MobileFirst Foundation 8.0 迁移手册

improve this page | report issue

概述

此手册旨在提供一个简明视图,用于显示将应用程序和适配器从 IBM Worklight Foundation 6.2 或 IBM MobileFirst Platform Foundation 6.3 - 7.1 迁移到 IBM Mobile Foundation 8.0 的步骤。

迁移过程可指导您完成将经典混合应用程序转变为标准 Cordova 应用程序的步骤以及在本机应用程序中更新 MobileFirst SDK 的步骤。 同时还会处理移动 Web 应用程序。 适配器已迁移到 Maven 项目中,并且进一步阐明了实施概念,如 MobileFirst 安全框架、推送通知和直接更新。

为简化迁移过程的某些方面,提供了迁移辅助工具。
该工具可帮助您识别代码库中需要检查和更改的方面,如不推荐使用、不再支持或修改的 API。

注:此手册并未涵盖所有可能的迁移方案,如果要全面了解,建议您访问迁移用户文档主题

获取帮助

Mobile Foundation 团队很高兴帮助您解答任何疑问。
要获取官方支持,请提交 PMR。 也可以在 StackOverflow我们的 Slack 社区中提问。

快速入门

在开始迁移应用程序和适配器之前,如果您尚未迁移,建议您先阅读快速入门教程来熟悉并体验 Mobile Foundation 8.0。

这些教程中提供了有关各主题(如注册应用程序、构建和部署适配器、实施和配置安全性和认证等)的更多信息。




设置和工具

在开始迁移之前,您需要一个正在运行的 MobileFirst Server 实例和迁移辅助工具。

MobileFirst Server

您可以使用 Mobile Foundation Bluemix 服务IBM Bluemix 上设置 MobileFirst Server。 或者,您可以使用 MobileFirst Developer Kit 来设置在本地运行的服务器。

迁移辅助工具

在 MobileFirst Server 启动并运行之后,由于您将在稍后使用迁移辅助工具,请先安装此工具。

  1. 安装 NodeJS,因为它是运行该工具的先决条件。
  2. 从 MobileFirst Operations Console 中,单击侧边栏导航底部的“下载中心”链接。 请按照指示信息从 NPM 或通过下载 .zip 文件来安装迁移辅助工具。
从 MobileFirst Operations Console 下载迁移工具


迁移应用程序

用于迁移经典混合/MobileFirst Cordova、Web 和本机应用程序的步骤包括:通过运行迁移辅助工具来评估 API 更改、设置项目结构、管理应用程序源、使用软件包管理器和处理 API 更改。

经典混合应用程序

在过去的发行版中,使用针对 Eclipse 或 MobileFirst CLI 的 MobileFirst Studio 插件来创建、开发、构建和管理经典混合应用程序。 从 Mobile Foundation 8.0 开始,引入了对标准 Cordova 应用程序的支持,并替换了先前的应用程序模型。

使用标准社区工具(如 Cordova CLI)来创建 Cordova 应用程序。 通过 Cordova CLI,将 MobileFirst Cordova SDK 作为一组 Cordova 插件(可从 npm 获取)添加到 Mixture 中。

通过迁移到标准 Cordova 应用程序,开发人员就能够使用自己喜爱的工具并采用自己的方法来开发应用程序。 作为开发人员,现在授权您使用 Cordova 生态系统

提示:您也可以设置 Eclipse 以开发 Cordova 应用程序

了解有关 Cordova 应用程序开发的更多信息。

步骤 1

打开命令行窗口,并按以下方式使用迁移辅助工具。

  • 要仅扫描经典混合项目并生成 API 报告,请使用:
    mfpmigrate scan --in path_to_source_directory --out path_to_destination_directory
  • 要扫描经典混合项目并创建预定义的 Cordova 项目,请使用:
    mfpmigrate client --in path_to_source_directory --out path_to_destination_directory [--projectName location_of_project]
    注:此操作可能需要一段时间才能完成,这取决于您的因特网连接,因为该过程包括下载 MobileFirst Cordova SDK 插件。
  • source_directory 替换为位于 Studio 项目的应用程序文件夹中的 application 文件夹的路径,例如:../Desktop/InvokingAdapterProcedures/apps/InvokingAdapterProcedures
  • destination_directory 替换为用于存储已转换应用程序和已生成 API 报告的文件夹的路径。
  • location_of_project 替换为 destination_directory 内用于创建项目的位置的目录名称。 该标志为可选。
将经典混合应用程序迁移到标准 Cordova 应用程序

在迁移辅助工具成功运行之后,您可以观察到以下效果:

  • MigratedProject 文件夹现在包含具有与经典混合应用程序相同的元数据的新 Cordova 应用程序(应用程序标识和其他设置,具体取决于经典混合应用程序的设置)、已安装 MobileFirst Cordova SDK 并且已添加所需平台。
  • 如果使用了 client 命令,那么已生成 API 报告 {app-name}-api-report.html 并且已在缺省浏览器中打开此报告。 其中包含因调整应用程序实施以用于 Mobile Foundation 8.0 而需要执行的可能操作。
API 报告

步骤 2

在对生成的 API 报告执行操作之前,您必须将应用程序源代码从经典混合应用程序复制到 Cordova 应用程序。

经典混合应用程序

复制 common 文件夹的内容并将其粘贴到 Cordova 应用程序的 www 文件夹(在提示时替换)。

MFPF 7.1 Cordova 应用程序

复制 www 文件夹并替换 Cordova 应用程序现有的 www 文件夹。

注:如果在经典混合应用程序中具有特定于环境的实施,那么可以使用 Cordova Merges 进行复制。

您无需使用由迁移辅助工具为您创建的 Cordova 应用程序。 通过 Cordova CLI,您可以自行创建新的 Cordova 应用程序,并添加 MobileFirst Cordova SDK 以及可能需要的任何第三方 Cordova 插件。 请参考 Cordova 教程以了解更多信息

步骤 3

由于应用程序的源代码现在位于 Cordova 应用程序中,因此您现在必须添加或编辑几个代码块。

  1. 更新 www/index.html 文件。
    • 将以下 CSS 代码添加到 index.html 文件头中已有的 CSS 代码之前。
      <link rel="stylesheet" href="worklight/worklight.css">
      <link rel="stylesheet" href="css/main.css">
      注:worklight.css 文件将 body 属性设置为 relative。 如果这影响应用程序的样式,请在您自己的 CSS 代码中为 position 声明其他值。 例如:
      body {
        position: absolute;
      }
    • 将对 Cordova JavaScript 文件的引用添加到文件头中的 CSS 定义之后。
      <script type="text/javascript" src="cordova.js"></script>
    • 移除以下代码行(如果存在)。
      <script>window.$ = window.jQuery = WLJQ;</script>
      您可以下载自己的 JQuery 版本,并按以下代码行中所示将其装入。
      <script src="lib/jquery.min.js"></script>
      不必将可选的 jQuery 新增项移至 lib 文件夹中。 可以将此新增项移至所需的任何位置,但必须在 index.html 文件中正确引用此项。
  2. www/js/InitOptions.js 文件更新为自动调用 WL.Client.init。
    • InitOptions.js 中移除以下代码。 函数 WL.Client.init 使用全局变量 wlInitOptions 自动进行调用。
      if (window.addEventListener) {
        window.addEventListener('load', function() { WL.Client.init(wlInitOptions); }, false);
      } else if (window.attachEvent) {
        window.attachEvent('onload',  function() { WL.Client.init(wlInitOptions); });
      }
  3. 可选:如果需要在初始化 MobileFirst 框架之前运行逻辑,请更新 www/InitOptions.js 文件以手动调用 WL.Client.init
    • 编辑 config.xml 文件并将 mfp:clientCustomInit 元素的 enabled 属性设置为 true
    • 如果使用的是 MobileFirst 混合缺省模板,请替换以下代码:
      if (window.addEventListener) {
        window.addEventListener('load', function() { WL.Client.init(wlInitOptions); }, false);
      } else if (window.attachEvent) {
        window.attachEvent('onload',  function() { WL.Client.init(wlInitOptions); });
      }
      with the following code:
      if (document.addEventListener) {
        document.addEventListener('mfpready', function() { WL.Client.init(wlInitOptions); }, false);
      } else if (window.attachEvent) {
        document.attachEvent('mfpready',  function() { WL.Client.init(wlInitOptions); });
      }

步骤 4

Cordova 应用程序几乎已完全迁移。 现在可以开始处理生成的 API 报告。 在浏览器窗口中打开 API 报告并查看所显示的项。 对于报告中的每个项,您需要以不同的方式实现或完全替换。 您可以重新运行迁移辅助工具,这次指向新的 Cordova 应用程序,以再次检查是否有未处理的 API。


步骤 5

要测试 Cordova 应用程序,您可以仅预览在模拟器/仿真器中或在物理设备中运行的 Web 资源。
注:如果客户端代码包含与安全性和认证、推送通知、适配器和类似功能相关的逻辑,那么可能需要继续调整代码,然后才能对其进行测试(见下文)。 但是,您可以查看应用程序界面以确保它仍然完整。

预览 Web 资源:

  • 从命令行窗口中,浏览至应用程序根文件夹。
  • 运行以下命令:mfpdev app preview
注:由于 Mobile Foundation 8.0 中的缺陷,预览涉及安全方面的应用程序失败。 作为变通方法,请在仿真器或物理设备中预览应用程序。
了解有关预览应用程序的 Web 资源的更多信息。

在仿真器/模拟器或物理设备中测试:

  • 从命令行窗口中,浏览至应用程序根文件夹。
  • 如果只想测试 UI,那么只需构建和运行应用程序:cordova run replace-with-platform-name
  • 如果还要测试与 Mobile Foundation 相关的应用程序逻辑,那么在预览之前,请确保先使用 mfpdev app register 注册应用程序。

后续步骤

Web 应用程序

与经典混合应用程序非常相似,针对移动 Web 和桌面浏览器的 Web 应用程序也可以通过针对 Eclipse 或 MobileFirst CLI 的 MobileFirst Studio 插件来管理。 在 Mobile Foundation 8.0 中,也使用 npm 中可用的 MobileFirst Web SDK 以传统方式来开发 Web 应用程序。

注:在先前的发行版中,MobileFirst Server 提供 Web 应用程序并提供面向公众的 URL。 在 Mobile Foundation 8.0 中,仅在 MobileFirst Server 中注册应用程序,以便为其提供安全功能、适配器功能等,并通过标准方法提供 Web 应用程序,例如,通过专用 Web 服务器提供 Web 应用程序。

了解有关 Web 应用程序开发的更多信息。

步骤 1

使用迁移辅助工具来生成 API 报告。
打开命令行窗口,并按以下方式使用迁移辅助工具。
这可能需要一段时间才能完成,具体取决于您的因特网连接...

mfpmigrate scan --in path_to_source_directory --out path_to_destination_directory
  • source_directory 替换为位于 Studio 项目的应用程序文件夹中的 common 文件夹的路径,例如:../Desktop/InvokingAdapterProcedures/apps/InvokingAdapterProcedures
  • destination_directory 替换为用于保存生成的 API 报告的文件夹的路径。

在迁移辅助工具成功运行之后,您可以观察到以下效果:

  • 已生成 API 报告 {app-name}-api-report.html。 其中包含因调整应用程序实施以用于 Mobile Foundation 8.0 而需要执行的可能操作。

步骤 2

评估 API 报告后,现在可以开始迁移应用程序的结构和源。

  1. 创建将包含应用程序源和资源的新文件夹。
  2. index.html 文件以及 jscssimages 文件夹从现有项目复制到创建的文件夹中。
  3. 从命令行窗口中,浏览至已迁移项目的根文件夹并添加 MobileFirst Web SDK:npm install ibm-mfp-web-sdk
在继续步骤 3 之前,请按照将 Mobile Foundation SDK 添加到 Web 应用程序教程中的指示信息来配置 SDK。

步骤 3

Web 应用程序几乎已完全迁移。 现在可以开始处理生成的 API 报告。 在浏览器窗口中打开 API 报告并查看所显示的项。 对于报告中的每个项,您需要以不同的方式实现或完全替换。


步骤 4

要测试已迁移的应用程序:

  1. 确保已在 MobileFirst Server 中注册该应用程序。
  2. 为避免遇到同源错误,请设置逆向代理。 为此,您可以使用 Node.js。 要获取使用 Node.js 的逆向代理实现的示例,请参阅设置 Web 开发环境教程。

本机应用程序

在产品的先前版本中,本机应用程序需要使用针对 Eclipse 或 MobileFirst CLI 的 MobileFirst Studio 插件先创建特定于平台的工件(WorklightAPI 文件夹、配置文件等),然后将这些工件手动复制粘贴到各 IDE 内的本机项目中。

从 Mobile Foundation 8.0 开始,现在引入了对社区首选软件包管理器的支持:CocoaPods for iOSGradle for AndroidNuGet for Windows。 利用开发人员可用的这些工具,现在简化了在每个平台上添加 MobileFirst 本机 SDK 的过程。

了解有关本机应用程序开发的更多信息。

步骤 1

使用迁移辅助工具来生成 API 报告。

注:目前,迁移辅助工具可以仅扫描基于 MobileFirst Platform Foundation 7.1 的本机应用程序。

打开命令行窗口,并按以下方式使用迁移辅助工具:

mfpmigrate scan --in path_to_source_directory --out path_to_destination_directory --type platform
  • source_directory 替换为本机项目的路径,例如:../Desktop/FormBasedAuthObjCiOS-release71
  • destination_directory 替换为报告生成位置的路径。
  • platform 替换为受支持的平台:iosandroidwindows
为本机应用程序生成 API 报告

在迁移辅助工具成功运行之后,您可以观察到以下效果:

  • 已生成 API 报告 {app-name}-api-report.html 并且已在缺省浏览器中打开此报告。 其中包含因调整应用程序实施以用于 Mobile Foundation 8.0 而需要执行的可能操作。
API 报告

步骤 2

在解决 API 报告中的问题之后,您可以将旧的本机 SDK 替换为新的本机 SDK。

iOS
先决条件:确保已在 Mac 计算机上安装 CocoaPods:
  • 打开命令行窗口,并浏览至 Xcode 项目的根目录。
  • 运行 sudo gem install cocoapods 命令,然后运行 pod setup注:完成这些命令可能需要几分钟时间。

  1. 在 Xcode 中打开您的项目。
  2. 从 Xcode 项目中删除 WorklightAPI 文件夹(将其移至废纸篓)。
  3. 以下列方式修改现有代码:
    构建设置选项卡中,
    • $(SRCROOT)/WorklightAPI/include 从头文件搜索路径中除去。
    • $(PROJECTDIR)/WorklightAPI/frameworks 从框架搜索路径中除去。
    • 除去所有对静态库 libWorklightStaticLibProjectNative.a 的引用。
  4. 构建阶段选项卡中,移除指向以下框架和库的链接。 CocoaPods 将自动重新添加这些链接。
    • libWorklightStaticLibProjectNative.a
    • SystemConfiguration.framework
    • MobileCoreServices.framework
    • CoreData.framework
    • CoreLocation.framework
    • Security.framework
    • sqlcipher.framework
    • libstdc++.6.dylib
    • libz.dylib
  1. 确保 Xcode 已关闭。
  2. 打开终端并浏览至 Xcode 项目的根目录。
    • 运行 pod init 命令以创建 Podfile 文件。
    • 在 Xcode 项目的根目录中创建 Podfile 文件。 找到该文件,并在您选择的编辑器中打开该文件。
    • 注释掉或除去现有内容。
    • 添加以下行并保存更改。 请记住更新 target 值:
      use_frameworks!
      platform :ios, 8.0
      target "replace-with-the-name-of-the-target-in-xcode-project" do
          pod 'IBMMobileFirstPlatformFoundation'
      end
      其他 pod:
      IBMMobileFirstPlatformFoundationPush
      IBMMobileFirstPlatformFoundationJSONStore

      如果您的应用程序需要使用额外功能,那么可以进一步在文件中指定其他 pod。 例如,如果应用程序使用 OpenSSL,那么 Podfile 可能如下所示:
      use_frameworks!
      platform :ios, 8.0
      target "replace-with-the-name-of-the-target-in-xcode-project" do
          pod 'IBMMobileFirstPlatformFoundation'
          pod 'IBMMobileFirstPlatformFoundationOpenSSLUtils'
      end
    • 运行 pod install 命令。 该命令将安装 MobileFirst 本机 SDK、IBMMobileFirstPlatformFoundation.framework 以及 Podfile 中指定的任何其他框架及其依赖关系。 然后,该命令将生成 pods 项目,并将客户机项目与 MobileFirst SDK 集成。
  3. 通过在命令行中输入 open ProjectName.xcworkspace,在 Xcode 中打开 ProjectName.xcworkspace 文件。 该文件与 ProjectName.xcodeproj 文件位于同一目录中。 您可以从 Finder 中双击该文件。
  4. 使用以下新保护伞头文件(单一条目)替换头文件的所有现有 MobileFirst 导入:
    Objective C:
    #import <IBMMobileFirstPlatformFoundation/IBMMobileFirstPlatformFoundation.h>

    Swift:
    import IBMMobileFirstPlatformFoundation
  5. 构建设置选项卡中的其他链接程序标记下,在 -ObjC 标记的开头添加 $(inherited)
  6. 如果使用的是推送通知或 JSONStore,那么需要包含独立导入。

    推送通知
    对于 Objective C:
    #import <IBMMobileFirstPlatformFoundationPush/IBMMobileFirstPlatformFoundationPush.h>

    对于 Swift:
    import IBMMobileFirstPlatformFoundationPush

    JSONStore
    对于 Objective C:
    #import <IBMMobileFirstPlatformFoundationJSONStore/IBMMobileFirstPlatformFoundationJSONStore.h>

    对于 Swift:
    import IBMMobileFirstPlatformFoundationJSONStore

Android
查找您项目的 lib 文件夹并删除以下文件:
  • worklight-android.jar
  • uicandroid.jar
  • bcprov.jar
  • android-async-http.jar
  1. 在 Android Studio 中,浏览至 Android → Gradle 脚本并选择 build.gradle(模块:应用程序)文件。
  2. apply plugin: 'com.android.application' 下方添加以下行:
    repositories{
        jcenter()
    }
  3. android 内添加以下行:
    packagingOptions {
        pickFirst 'META-INF/ASL2.0'
        pickFirst 'META-INF/LICENSE'
        pickFirst 'META-INF/NOTICE'
    }
  4. dependencies 内添加以下行:
    compile group: 'com.ibm.mobile.foundation',
    name: 'ibmmobilefirstplatformfoundation',
    version: '8.0.+',
    ext: 'aar',
    transitive: true
    如果您的应用程序需要使用额外功能,那么可以指定更多工件。 例如,如果您的应用程序使用推送通知,请添加:
    compile group: 'com.ibm.mobile.foundation',
    name: 'ibmmobilefirstplatformfoundationpush',
    version: '8.0.+',
    ext: 'aar',
    transitive: true
    或者,如果您打算使用 JSONStore:
    compile group: 'com.ibm.mobile.foundation',
    name: 'ibmmobilefirstplatformfoundationjsonstore',
    version: '8.0.+',
    ext: 'aar',
    transitive: true

Windows
从 Visual Studio 项目中移除以下文件:
  • wlclient.properties
  • Newtonsoft.Json
  • SharpCompress
  • worklight-windows8
  1. 右键单击项目解决方案并选择管理 Nuget 软件包
  2. 在搜索选项中,搜索“IBM MobileFirst Platform”,选择 IBM.MobileFirstPlatform.8.0.0.0,然后单击安装
  3. 在 Package.appxmanifest 中,添加因特网(客户机)功能。

步骤 3

本机应用程序几乎已完全迁移。 现在可以开始处理 API 报告中生成的问题。 在浏览器中打开并查看 API 报告。 对于报告中的每个项,您需要以不同的方式实现或完全替换。


步骤 4

要测试应用程序,请在特定平台 IDE 中运行该应用程序。

后续步骤

补充阅读材料:

您的应用程序现在符合 MobileFoundation 8.0 所需的结构。 您现在可以开始查看适配器。



迁移适配器

在过去的发行版中,使用针对 Eclipse 或 MobileFirst CLI 的 MobileFirst Studio 插件来创建、开发和构建适配器。 从 Mobile Foundation 8.0 开始,适配器现在可视为是使用 IBM 提供的 archetype(用于生成 Java 和 JavaScript 适配器)创建的标准 Apache Maven 项目。

使用 Maven 为服务器端开发人员提供一种简单的标准方法来管理和集成所需的依赖关系,并可以让开发人员在开发期间自由使用其喜爱的工具。 可以从命令行使用 Maven 命令创建 Maven 项目,或者使用可在幕后调用 Maven 命令并提供简化命令的 MobileFirst CLI 来创建 Maven 项目。

提示:您也可以设置 Eclipse 或 IntelliJ 在 IDE 环境中创建和开发适配器

您是否知道? Mobile Foundation 8.0 引入了 DevOps 样式的运行方式,将适配器部署到 MobileFirst Server 之后,您可以通过 MobileFirst Operations Console 动态配置各种属性(例如,用于数据库连接的用户名和密码值),而无需重新部署适配器。

了解有关开发 Java 和 JavaScript 适配器的更多信息。

用于将适配器迁移到 Maven 项目的步骤包括:创建匹配的新 Maven 项目,然后将其复制到现有适配器的源代码(通过一些修改)。 随后构建 Maven 项目以查找任何错误。

Maven 适配器需要在开发人员工作站上安装 Apache Maven。

  1. 安装 Apache Maven。
    • 下载 Apache Maven .zip
    • 添加指向 Maven 文件夹的 MVN_PATH 变量。
    • Mac 和 Linux:
      编辑您的 ~/.bash_profile
      #### Apache Maven example location
      
      export MVN_PATH="/usr/local/bin"
    • Windows: 遵循此指南
    • 通过执行 mvn -v 来验证安装。
  2. 该手册使用 MobileFirst CLI 来调用 Maven 命令以创建和构建适配器。
    • 如果尚未安装 NodeJS,请进行安装,因为它是运行该工具的先决条件。
    • 从命令行窗口中,运行以下命令:npm install -g mfpdev-cli(或者在 MobileFirst Operations Console 上从“下载中心”中进行下载和安装)。
    • 通过执行 mfpdev -v 来验证安装。

创建与您自己的适配器类型和适配器名称以及软件包名称匹配的新适配器模板。
这将简化迁移,因为适配器的元数据是类似的,因此不需要进行额外编辑。

  • 从命令行窗口中,运行以下命令:mfpdev adapter create
  • 选择适配器类型:HTTP 或 SQL JavaScript 适配器或 Java 适配器。
  • 提供 GroupID
  • 如果您创建 Java 适配器,请确保指定先前使用的相同软件包名称(例如,“com.sample”)。
创建适配器模板
HTTP JavaScript 适配器
  1. 在文件系统中浏览至 JavaScript 适配器文件夹,例如:../Desktop/JavaScriptAdapters/adapters/RSSReader
  2. 打开另一个窗口并浏览至新 Maven 项目(例如:../Desktop/MigratedAdapter)和 src/main/adapter-resources 文件夹。
  3. 将现有适配器文件复制并粘贴到此文件夹。
  4. 编辑 adapter.xml:将其内容替换为现有适配器的 XML 内容(在此示例中为 RSSReader.xml)。
  5. 编辑 js/{adapter-name}-impl.js:将其内容替换为现有适配器的内容(在此示例中为 RSSReader-impl.js)。

SQL JavaScript 适配器
  1. 在文件系统中浏览至 JavaScript 适配器文件夹,例如:../Desktop/JavaScriptAdapters/adapters/SQLAdapter
  2. 打开另一个窗口并浏览至新 Maven 项目(例如:../Desktop/MigratedAdapter)和 src/main/adapter-resources 文件夹。
  3. 编辑 adapter.xml:将其内容替换为现有适配器的 XML 内容(在此示例中为 SQLAdapter.xml)。
  4. 编辑 js/{adapter-name}-impl.js:将其内容替换为现有适配器的内容(在此示例中为 SQLAdapter-impl.js)。

这是 Maven 依赖关系生效的位置。 由于未使用 Worklight/MobileFirst Studio(数据库连接器先前放置在 server/lib 文件夹中),所以将其替换为 Maven 依赖关系。

  1. 返回到新创建的 Maven 项目,然后打开位于该目录的根目录下的 pom.xml 文件。
  2. 为您的数据库类型添加依赖关系。 您可以在 Maven Central Web 站点中搜索要使用的相应依赖关系。
  3. 在此示例中,使用 MySQL 数据库。 在 dependencies 部分中添加以下代码块:
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>

如果您具有其他依赖关系,pom.xml 文件将是指向本地文件或远程依赖关系的位置。

了解有关 Maven 依赖关系的更多信息:

下面这些“图”以不同角度呈现了到目前为止所完成的工作:

JavaScript 适配器的旧结构
MyProject
├── adapters
│   ├── RSSAdapter
│   │   ├── RSSAdapter-impl.js
│   │   ├── RSSAdapter.xml
│   │   └── filtered.xsl
JavaScript 适配器的新结构
RSSAdapter
├── pom.xml
├── src
│   └── main
│       ├── adapter-resources
│       │   ├── adapter.xml
│       │   └── js
│       │        ├── RSSAdapter-impl.js
│       │        └── filtered.xml
  1. 在文件系统中浏览至 Java 适配器文件夹,例如:../Desktop/JavaAdapters/RSSAdapter
  2. 打开另一个窗口并浏览至新 Maven 项目(例如:../Desktop/MigratedAdapter)和 src/main/adapter-resources 文件夹。
  3. 编辑 {adapter-name}.xml:将其内容替换为现有适配器的 XML 内容(在此示例中为 RSSAdapter.xml)。
  4. 在新适配器中,浏览至 src/main/java/com/sample/(在此示例中)。
  5. 将现有的 .java 文件替换为现有适配器的 .java 文件。

如果使用的是现有适配器中的任何其他库,Maven 依赖关系现在开始生效。 由于未使用 Worklight/MobileFirst Studio(库先前放置在 server/lib 或 Java 适配器的 lib 文件夹中),所以将其替换为 Maven 依赖关系。

  1. 返回到新创建的 Maven 项目,然后打开位于该目录的根目录下的 pom.xml 文件。
  2. 为您的数据库类型添加依赖关系。 您可以在 Maven Central Web 站点中搜索要使用的相应依赖关系。
  3. 此示例使用 Cloudant 依赖关系。 在 dependencies 部分中添加以下代码块:
    <dependency>
    	<groupId>com.cloudant</groupId>
    	<artifactId>cloudant-client</artifactId>
    	<version>1.2.3</version>
    </dependency>

了解有关 Maven 依赖关系的更多信息:

下面这些“图”以不同角度呈现了到目前为止所完成的工作:

Java 适配器的旧结构
├── adapters
│   └── RSSAdapter
│       ├── RSSAdapter.xml
│       ├── lib
│       └── src
│           └── com
│               └── sample
│                   ├── RSSAdapterApplication.java
│                   └── RSSAdapterResource.java
Java 适配器的新结构
├── pom.xml
├── src
│   └── main
│       ├── adapter-resources
│       │   └── adapter.xml
│       └── java
│           └── com
│               └── sample
│                   ├── RSSAdapterApplication.java
│                   └── RSSAdapterResource.java
└

构建已迁移的适配器

从命令行窗口中,浏览至适配器的文件夹并运行以下命令:mfpdev adapter build

在命令行中构建适配器 - 故障

要解决此类错误,建议将 Maven 项目导入到 IDE(如 IntelliJ),并在那里构建项目。 通过由您控制的 IDE,您可以更轻松地遍历构建错误并逐个解决错误。 了解有关使用 IntelliJ 和适配器的更多信息

使用 IntelliJ

测试已构建的适配器

要测试已迁移的适配器,您可以使用 MobileFirst CLI 调用自己的端点,或者从 MobileFirst Operations Console 中使用 Swagger。

测试和调试适配器教程中了解有关测试适配器的更多信息。
补充阅读材料:

将适配器迁移到与 Maven 项目兼容的表单和代码之后,可以开始了解一些开发概念...



开发主题

现在已将应用程序和适配器迁移到 Mobile Foundation 8.0 内的新结构中;下面讨论了最新发行版中已更改的一些实施概念。

适配器

JavaScript 适配器

全局变量和会话

避免在 JavaScript 适配器中使用全局变量来保存有关会话的数据 - 因为没有“会话”。 此行为更改最先出现在 MobileFirst Platform Foundation 7.1 中。 但是,您可以使用全局变量来保存要在单个请求期间使用的数据。 但是,请记住不再建议这样做。

在适配器教程中了解有关创建、构建、部署和测试适配器的更多信息。

安全框架

Mobile Foundation 8.0 中的安全框架不同于先前发行版中的安全框架。 因此,您必须重新实施一些应用程序后端和客户机逻辑。

强烈建议您用一些时间来熟悉现在完全基于 OAuth 模型的新安全框架及其授权流程。 另外,请了解新的授权实体(如访问令牌、安全性检查和作用域),这些实体将替换先前的已知实体(如安全性测试、域和登录模块)。

迁移认证和安全性教程中了解如何迁移安全性。 要了解有关安全框架和授权概念的更多信息,请参阅认证和安全性教程

域与安全性检查

在 Mobile Foundation 8.0 中,安全性检查可视为是先前发行版中的三个概念的组合:
安全性检查 = 域 + 认证器 + 登录模块

实施安全性检查,即是实施登录模块和认证器。
安全性检查的定义类似于域的定义。

下表描述了先前发行版的安全框架与 Mobile Foundation 8.0 的安全框架之间的差异。

先前发行版 Mobile Foundation 8.0
定义 已在 authenticationConfig.xml 中使用名称、登录模块和认证器进行定义,例如:
<realm loginModule="AuthLoginModule" name="AuthRealm">
        <className>com.worklight.integration.auth.AdapterAuthenticator</className>
    </realm>
在相关的 adapter.xml 文件中使用名称和实现类来定义安全性检查:
<securityCheckDefinition
        name="securityCheckX"
        class="com.sample.SecurityCheckW">
    </securityCheckDefinition>
进入/退出方法 基于适配器的认证:将定义登录/注销函数(在发出授权请求时框架将调用此函数)。
<parameter name="login-function" value="AuthAdapter.onAuthRequired"/>
<parameter name="logout-function" value="AuthAdapter.onLogout"/>
定制认证器 + 登录模块:init() 方法用于启动,processRequest() 用于授权请求。 认证器会将登录模块凭证发送到 login()/logout() 方法。
在实现安全性检查接口时,用户还必须实现 authorize()introspect() 方法(在授权请求期间框架将调用这两个方法)。 安全性检查将自行处理认证和登录/注销。
用法 封装在 customSecurityTest 中,可以包含一个或多个域:
<customSecurityTest name="AuthSecurityTest">
    <test isInternalUserID="true" realm="AuthRealm"/>
</customSecurityTest>
封装在作用域元素中,可以包含 0 个或更多个安全性检查

安全性测试与作用域

在 Mobile Foundation 8.0 中,作用域用于聚集 0 个或更多个安全性检查,然后可用于保护局部和外部资源或应用程序。 这类似于先前发行版中的 CustomSecurityTest 概念。

先前发行版 Mobile Foundation 8.0
定义 已在 authenticationConfig.xml 文件中使用名称和 1 个或多个安全性测试(其中至少一个专用于定义 UserID)进行定义。
<customSecurityTest name="AuthSecurityTest">
    <test isInternalUserID="true" realm="AuthRealm"/>
</customSecurityTest>
已在 MobileFirst Operations Console 中定义,或者已通过 REST API 定义,作用域包含 0 个或更多个安全性检查。
"scopeElementMapping": {
    "ScopeElementA": "secCheck1 secCheck2"
}, 
用法 安全性测试可用于保护资源(Java 适配器)、过程(JavaScript 适配器)或应用程序(应用程序描述符)。

Java 适配器
@OAuthSecurity(scope="AuthRealm")
JavaScript 适配器
<procedure name="getSecretData" securityTest="AuthSecurityTest"/>
:不能使用不属于安全性测试的域来保护资源。
作用域(1 个或多个作用域元素)可用于保护资源(Java 适配器)、过程(JavaScript 适配器)或应用程序(应用程序描述符)。

Java 适配器
@OAuthSecurity(scope="ScopeElementA ScopeElementB")
JavaScript 适配器
<procedure name="deleteUser" scope="deletePrivilege"/>
:可以使用不属于作用域元素映射的 securityCheck 来保护资源/应用程序
用户身份 安全性测试中的某些域将定义 DeviceID 和 UserID。
<test isInternalUserID="true" realm="AuthRealm"/>
作用域并不知道构成它的安全性检查。
部署 已在 authenticationConfig.xml 文件中配置。 要更改哪些域构成安全性测试,您必须重新部署 .war 文件。 已在不中断 MobileFirst Server 的情况下使用 MobileFirst Operations Console 进行更改。

通知

在 Mobile Foundation 8.0 中,引入了新的推送服务以及关于设置、配置和发送通知的新体验。 此外,已撤回了事件源推送通知概念。 在这些用户文档主题中查找基于方案的详细迁移路径:
在通知教程中了解有关设置通知支持以及发送已认证通知和基于标记的通知的更多信息。

直接更新

使用“直接更新”功能交付更新的步骤已发生了变化,并且施加了一些限制。

在Cordova 应用程序中使用“直接更新”教程中了解有关如何使用“直接更新”的更多信息。

其他

在 Mobile Foundation 8.0 中,已移除多个其他组件和功能。 要获取完整列表,请查看已移除的组件用户文档主题。

最后,下面提供了一个视频,展示如何将 MobileFirst Platform Foundation 6.3 混合应用程序和适配器迁移到标准 Cordova 应用程序和 Maven 项目。

Last modified on September 11, 2017