IBM MobileFirst Platform for iOS 可以帮助用户快速地构建多平台的,本地的或者混合的的 iOS 应用。用户只需要专注于构建移动端应用,无需关心云端架构的复杂性,同时却可以方便快速地使用预设置的,可扩展的,可管理的云服务。
当用户在云管理平台创建 mobile back-end 应用时,多个服务会相应绑定到该应用上,用户可使用云平台提供的客户端 SDK 去构建 iOS 的本地应用,并使用这些云服务。同时您也可以获得服务器端的应用,方便您构建服务器端的功能,如资源 URI 或者静态文件等。被绑定的云服务包括如下几类:
Data(数据存储):该服务基于 Cloudant NoSQL DB,用户可以存储,删除,更新,查询存储在云上的数据。
Push iOS 8:该服务可以向移动设备发送消息,当您配置了应用使用 Push 功能时,您就可以向所有注册的移动设备或者应用广播消息。
Security(安全):该服务确保您的后台系统是加密的。您可以配置使用定制化的账户或者已有的社交账户(Google,Facebook)来登陆应用。
App Monitoring: 该服务可以帮助用户获得应用的性能数据,包括注册的设备,服务器以及客户端的日志等。
本文将使用例子程序 BlueList 来详细介绍如何在云平台上创建 mobile back-end 应用并使用其云服务。
回页首
BlueList 可在 Bluemix 官方网站获得,有两个版本,分别使用 Swift 和 Objective-c 编写,您可以查看其代码并熟悉它如何调用 iOS SDK 去使用云端服务。该应用会在移动设备上创建一些条目,并使用 Data 服务将这些条目存储在云端;您可以将您的设备注册到 Bluemix 控制台,这样用户便可以从 Bluemix 控制台上向对其进行注册的设备发送 push 通知,您也可以通过该应用熟悉安全服务以及监控服务。
使用 BlueList 需要您准备以下的开发以及运行环境:
您可以到 IBM DevOps Services 上使用 git 命令获得 BlueList 示例程序,此处存放有 Swift 和 Objective-C 两个版本。
图 1. 获得 BlueList 源代码
git clone https://hub.jazz.net/git/mobilecloud/imf-bluelist
这里的 URL 就是您从 DevOps Services 中复制的 URL。
此时,您获得了 BlueList 所有的源代码以及配置文件。
BlueList 的正确运行需要相关的依赖,这里我们使用 CocoaPods 来获得其所需要的依赖。
如果您想使用 Swift,去如下目录:
cd imf-bluelist/bluelist-swift
如果你想使用 Objective-C,去如下目录:
cd imf-bluelist/bluelist-objective-c
如果 CocoaPods 没有安装,请使用如下的命令进行安装:
$ sudo gem install cocoapods$ pod setup
图 2. 使用 CocoaPods 安装 BlueList 需要的依赖库
图 3. Bluelist-swift 应用程序概览
您可以通过两种途径来创建 Mobile back-end 应用。第一是通过图 1 所示中点击 Run on Bluemix,可以帮助您直接生成应用。本文将介绍第二种,用户自己创建应用,方便用户熟悉应用创建流程。
图 4. 创建 back-end 应用
图 5. 选择 back-end 应用类型
图 6. 选择 back-end 应用为 iOS 8 类型
图 7. 选择 back-end 应用的 Catalog 属性
图 8. Advanced Mobile Access 的 Plan 名称和应用名字
图 9. 应用 BlueListTestGN 的概览
默认情况下,连接到新创建的 back-end 应用的客户端应用是不需要认证的,但是 BlueList 例子程序是需要配置用户认证机制的。这里,我们可以使用 Facebook,Google 或者 Custom 的认证方式。这也是 MobileFirst Platform 提供的安全服务,也即是 Advanced Mobile Access 服务。
三种认证方式您任选一种即可,本文将详细介绍 Custom 的认证方式,其余两种认证方式将由本系列文章中的另外一篇文章进行详细介绍。
图 10. 创建新的移动客户端
图 11. 给客户端命名
图 12. Bundle ID 和 Version 等信息
图 13. 进行认证配置
图 14. 创建新的认证方式
图 15. 选择认证方式
图 16. Custom 方式的 Realm Name 值和 URL 值
图 17. Custom 认证方式概览
要将 BlueList 程序链接到 Bluemix 上并使用其提供的 Cloudant NoSQL DB 服务,需要对该程序进行一些配置的修改。
图 18. Advanced Mobile Access 配置页面的应用 Route 和 UID 信息
清单 1.代码片段 1
applications: - disk_quota: 1024M host: BlueListTestGN name: BlueListTestGN command: node app.js path: . domain: mybluemix.net instances: 1 memory: 128M
清单 2. 代码片段 2
点击查看代码清单
关闭 [x]
var express = require('express'), passport = require('passport'), ImfBackendStrategy = require('passport-imf-token-validation').ImfBackendStrategy, customRealm = 'customAuthRealm_1'; passport.use(new ImfBackendStrategy()); // setup middleware var app = express(); app.use(passport.initialize()); app.use(express.bodyParser()); app.use(app.router); app.use(express.errorHandler()); app.post('/apps/:tenantID/'+customRealm+'/startAuthorization', passport.authenticate('imf-backend-strategy', {session: false}), function(req, res) { console.log ("tenantID " + req.param("tenantID")); var returnedJSON = startAuthorization(req.body.headers); res.json(returnedJSON); }); app.post('/apps/:tenantID/'+customRealm+'/handleChallengeAnswer', passport.authenticate('imf-backend-strategy', {session: false}), function(req, res) { console.log ("tenantID " + req.param("tenantID")); var returnedJSON = handleChallengeAnswer(req.body.headers, req.body.stateId, req.body.challengeAnswer); res.json(returnedJSON); }); var users = { "john": { password: "123", displayName: "John Lennon" }, "paul": { password: "456", displayName: "Paul McCartney" } }; var startAuthorization = function(headers) { return { status: "challenge", challenge: { message: "wrong_credentials" }, stateId : "myStateId" }; }; var handleChallengeAnswer = function(headers, stateId, challengeAnswer) { console.log('State id ' + stateId); if (challengeAnswer && users[challengeAnswer.userName] && challengeAnswer.password === users[challengeAnswer.userName].password) { return { status: "success", userIdentity: { userName: challengeAnswer.userName, displayName: users[challengeAnswer.userName].displayName } }; } else { return { status: "challenge", challenge: { message: "wrong_credentials" } } } }; // There are many useful environment variables available in process.env. // VCAP_APPLICATION contains useful information about a deployed application. var appInfo = JSON.parse(process.env.VCAP_APPLICATION || "{}"); // TODO: Get application information and use it in your app. // VCAP_SERVICES contains all the credentials of services bound to // this application. For details of its content, please refer to // the document or sample of each service. var services = JSON.parse(process.env.VCAP_SERVICES || "{}"); // TODO: Get service credentials and communicate with bluemix services. // The IP address of the Cloud Foundry DEA (Droplet Execution Agent) that hosts this application: var host = (process.env.VCAP_APP_HOST || 'localhost'); // The port on the DEA for communication with the application: var port = (process.env.VCAP_APP_PORT || 3001); // Start server app.listen(port, host); console.log('Custom authentication App started on port ' + port);
使用 cf 命令行工具输入如下命令连接 bluemix 将 nodejs 应用上传。
cf api https://api.ng.bluemix.net
cf login – a your_username – p your_password
cf push
为方便读者,本示例将使用模拟器运行该 iOS 应用。应用成功运行后,您可以添加条目并且对条目进行优先级排序,这些数据将会存储在 iOS 设备本地,同时也保存到云端,这里使用的是 Cloudant NoSQL DB 的服务。
图 19. 运行 BlueList
图 20. BlueList 登陆界面
使用 BlueList 应用,您可以添加条目并且进行优先级排序。其中红色是 High 的优先级,黄色是 Medium 的优先级。如图 21 所示 .
图 21. 输入任意的条目并设置优先级
同步您刚才保存的本地数据到云端,从模拟器上面向下拉即可,如图 22 所示。
图 22. 同步在移动客户端的数据到云端
图 23. 选择 Cloudant NoSQL DB 服务
图 24. 选择查看数据的选项 Objects and Documents
图 25. 根据条件过滤移动客户端同步的数据
在 BlueList 中使用 push 通知,您必须有一个唯一的 App Bundle ID 和一个 Apple Push Notification service(APNs)的证书(.p12)。这个 App Bundle ID 是从 Apple 官方获得用来测试 Push 通知功能,证书也是从 Apple 开发者中心获得。
Push 功能只适用于 iOS8 及以上的版本,并且应用只能安装在真实的 iOS 设备上,而非模拟器,该设备也必须是已经在 Apple 官网进行注册的设备。
图 26. 选择 Push iOS 8 服务
图 27. 配置 Push
图 28. 配置 APNs 证书
图 29. Push 配置概览
图 30. 选择真实设备
图 31. 配置开发者团队
图 32. 配置 code signing 和 provisioning profile
图 33. 发送 notification
图 34. 选择要发送 notification 的设备
图 35. 配置待发送的消息
图 36. 发送 notification 通知
图 37. 发送成功验证页面
图 38. 过滤注册在同一个 back-end 上的设备
IBM MobileFirst Platform 向用户提供监控和分析工具,您可以从应用的控制面板获得该项服务。这里将结合 BlueList 给出一个简单的示例,详尽的功能介绍请参阅我们的系列文章或者 Bluemix 的文档。
图 39. Monitoring 服务
图 40. 应用数据概览
回页首
现在您已经了解了如何安装并运行例子程序 BlueList,同时也了解了 BlueList 赖以运行的后台云端服务,并清楚如何创建 mobile back-end 应用和配置各项服务。为深入理解 IBM MobileFirst Platform 提供的 SDK 以及各项服务,我们建议您阅读一下 BlueList 的源代码或者官方提供的文档(有代码片段),方便您更好的利用 IBM MobileFirst Platform 开发自己的移动端应用。