转载

将推送通知添加到您的 iOS 应用程序

移动应用程序的频繁加载和卸载是独一无二的,而且运行移动应用程序的设备与服务供应商的连接也是断断续续的。这些应用程序必须定期接受数据更新,向用户通知这些服务器事件。在这种情况下,推送通知服务可以通知用户缺少某项服务或传入了新数据。

让您的 iOS 用户保持最新。通过 IBM Bluemix 上的 Push 服务将推送通知添加到您的 Node.js 应用程序。

构建您的应用程序需要做的准备工作

  • 一个 Bluemix 帐户
  • 熟悉以下 developerWorks 教程:" 使用 IBM Mobile Data for Bluemix 服务构建一个 iOS 应用程序 "
  • 熟悉 iOS 应用程序开发和 CocoaPods 库依赖关系管理工具
  • 一个 iOS 开发凭据 和一个 Apple Push Notification Service (APNS) 凭据
  • Git 和 Cloud Foundry 命令行工具
  • (此项是可选的)一个链接到您的 IBM ID 的 DevOps Services 帐户,用于复制项目(通过下面的 " Get the code " 按钮),该帐户支持应用程序的节点部分的追踪、协作和自动部署
  • (此项是可选的)一个本地 Node.js 执行环境

观看: Node.js 入门(演示)

获取代码

步骤 1. 设置您的环境

要为移动应用程序设置一个 Bluemix 环境:

  1. 登录您的 Bluemix 帐户 ,并选择顶部菜单中的 Dashboard
  2. 从仪表板中选择 CREATE AN APP
  3. 此时会打开一个向导,它将带您遍历后端应用程序的创建。选择 Mobile
  4. 接下来,选择平台: iOS 8
  5. 单击 Continue
  6. 为您的应用程序选择一个惟一名称并单击 FINISH
  7. 您会看到 Route、App Key 和 App Secret。单击 Continue
  8. 现在,基本的 Bluemix 环境已经准备就绪。要查看 Route、App Key 和 App Secret(后面需要),可以单击 MOBILE OPTIONS。 将推送通知添加到您的 iOS 应用程序

    点击查看大图

    关闭 [x]

    将推送通知添加到您的 iOS 应用程序

  9. 尝试连接到您刚才通过启动一个浏览器并连接到 http:// <app> .mybluemix.net 创建的 Bluemix 服务器。
  10. 安装 cf 工具,这样您就可以轻松将您的代码上传到 Bluemix 服务器。您可以忽略这一步,直接从 DevOps Services 部署代码,但在这种情况下,您不能调试代码。建议您在本地计算机上保存代码的副本。
  11. 打开一个命令控制台,并使用 cf 工具连接到 Bluemix 服务器:
    cf login -a https://api.ng.bluemix.net
    输入您的 Bluemix 帐户和密码,这样您就可以将代码与 Bluemix 同步。

步骤 2. 在 Bluemix 中添加 Push 服务

关于 Android 开发环境、配置 Push 和 Node.js,以及在移动模拟器中运行一个示例的更多信息,请参阅developerWorks 教程。

在有了推送通知功能之后,就可以直接从 DevOps Services 推送代码。(我将在步骤 5 中讨论 Push 服务代码结构。)

  1. 从 DevOps Services 复制代码。三个文件夹被下载: bluelist-push-androidbluelist-push-iOSbluelist-push-node ,这些文件夹被分别用于 Android 平台、iOS 平台和 Node.js 环境。
  2. 切换到 node 文件夹,使用您在步骤 1 中创建的 <app> 名称上传 manifest.yml 。使用您在步骤 1 中生成的正确 ApplicationIdApplicationRoute 来更新 app.js
  3. 使用 cf 工具将上传的代码上传到 Bluemix 服务器:
    cf push <App> -p .

现在,Bluemix 中的 Push 服务已准备就绪。

步骤 3. 为 Apple Push Notification 服务做好准备

关于 IBM Mobile Cloud for iOS 的更多信息,请阅读此 教程 。

要为推送通知开发和部署一个应用程序,必须从 Apple Dev Center 获得 SSL 凭据。每个凭据仅限于一个应用程序,通过其 bundle ID 进行标识;该凭据还被限定于两个环境中的一个,一个用于开发环境,一个用于生产环境。

  1. 打开一个浏览器并连接到 Apple Developer Programs。使用您的 Apple ID 和密码进行注册,并导航到 iOS Dev Center 。
  2. 现在,您的选项包括 CertificatesIdentifiersDevicesProvisioning Profiles 部分。从 Certificates 部分,为开发和生产环境生成一个凭据。
  3. Identifiers 部分,创建一个 App ID。查看对 Push Notifications 服务的启用,然后生成 SSL Push Certificate 并下载它。
    备注 :开发凭据和生产凭据是不同的。 将推送通知添加到您的 iOS 应用程序
  4. Devices 页面中,输入您的 SSL 设备的 UDID 来实现开发。
  5. Provisioning Profiles 页面中,生成针对开发或分布的配置文件。
  6. 上传步骤 3.3 中生成的 SSL Push Certificate。打开一个浏览器,连接到 Bluemix,然后转到 Push Service 页面。您可以看到这里有两个配置: Sandbox (开发) 配置Production Configuration 。通过密码选择您的 Certificate .p12 文件,然后上传它。因为 SandboxProduction 是不同的凭据文件,所以不能交换它们。 将推送通知添加到您的 iOS 应用程序

    点击查看大图

    关闭 [x]

    将推送通知添加到您的 iOS 应用程序

步骤 4. 上传 iOS 开发环境并部署它

  1. 打开一个控制台,并导航到您在步骤 2 中下载的 iOS 文件夹。执行 Pod install 来安装依赖关系库。
  2. 从 Xcode 打开 iOS .xcworkspace 项目文件并绑定它。
  3. 打开 Bluelist.plist 文件并上传 applicationIdapplicationSecretapplicationRoute 变量。
  4. 打开 Bluelist-info.plist 文件,上传来自步骤 3 的 Bundle Identifier
  5. 不要忘记上传 Project Certificate ,这样您就可以将您的代码部署到设备。

步骤 5. 测试通知

  1. 从 Xcode 执行 Bluelist 。在开始执行时,会出现一个对话框询问您: Allow Push Notification 。选择 Yes 。如果错误地按下了 No,那么您可以导航到 Settings > Notifications > Bluelist 来更改此设置。
  2. 从两个设备启动 Bluelist 应用程序。如果一个设备中的数据已经上传,那么另一个设备将会收到一个通知。 将推送通知添加到您的 iOS 应用程序
  3. 您也可以从 Bluemix 手动发送推送通知。转到 Bluemix 中的 Push 服务,选择 Notification 选项卡,在 Message text 中填充消息,单击 Next ,然后单击 Send 。您的 iOS 设备很快就会获得通知。 将推送通知添加到您的 iOS 应用程序

推送通知像预期的那样正常工作。

现在来看一下代码,以便可以在您的应用程序中启用推送通知。在第一个代码片段中,显示了 Node.js 中的 app.js ,该代码最初调用了 InitializeService ,然后使用 sendBroadcastNotification method 发送通知:

var config = {  applicationRoute:"<ApplicationRoute>",  applicationId:"<ApplicationId>",  applicationSecret:"<ApplicationSecret>" }; ibmbluemix.initialize(config); var push = ibmpush.initializeService(); var message = {  alert : "Push Notification from Javascript SDK",  url : "https://www.bluemix.net" } push.sendBroadcastNotification(message,null).then(function (response) { console.log("Notification sent successfully to all devices.", response); 

但什么时候将数据推送到设备呢?让我们查看一下代码片段。任何发送到 http:// <app> .mybluemix.net/notifyOtherDevice 的 http post 请求都将调用 TO DO 代码块。在本示例中,TO DO 将通知推送到了设备:

appContext=express.Router(); appContext.post('/notifyOtherDevices', function(req,res) {      //TODO });

下一个代码片段显示了一个 iOS 客户端中的推动代码 (APNS)。在开始的时候,您需要注册设备来接收远程通知;用户会看到一个对话框,询问是否想要接收推送服务。此外,还有两个回调函数:一个回调函数通知用户已启用远程推送功能,随后从 IBM SDK 注册 Bluemix Push。另一个回调函数是在 Bluemix 有更新数据和通知设备更新 Bluelist 的本地数据的时候调用的。

AppDelegate.m

- (BOOL)application:(UIApplication *)application    didFinishLaunchingWithOptions: NSDictionary *)launchOptions { …   // Register application for push notifications   [[UIApplication sharedApplication] registerForRemoteNotificationTypes:    (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound |     UIRemoteNotificationTypeAlert)]; } -(void) application:(UIApplication *)application     didRegisterForRemoteNotificationsWithDeviceToken:  (NSData *)deviceToken {  // Register Device to receive Push Notifications  IBMPush *pushService = [IBMPush service];  [[pushService registerDevice:CONSUMER_ID withConsumerId:CONSUMER_ID      withDeviceToken:deviceToken.description]continueWithBlock:^id(BFTask *task) {   if(task.error) {    NSLog(@"Device Registration failed with error: %@", task.error);   }   return nil;  }]; } -(void) application:(UIApplication *)application    didReceiveRemoteNotification: NSDictionary *)userInfo {  // Handle remote Push notification by reloading the list and getting the   latest data   [self.listViewController listItems: nil]; } 

最后,关于数据同步的一个要点是:在上传数据后,您必须要求 Bluemix 通知其他设备。在 ListViewController.m 中的任何地方,都有可能看到海量的代码。例如:

- (void) createItem: (IBM_Item*) item {  [self.cloudCodeService post:@"notifyOtherDevices" withDataPayload:nil       withHeaders: nil]; }

但是为什么我们在代码中看不到数据同步呢?这是因为 Bluemix Mobile Data 服务是手动处理数据同步的。在上传数据后,Bluemix 服务器会调用 AppDelegate.m 中的第二个回调函数,然后强迫设备重新加载数据来显示新的数据。

结束语

本教程向您展示了如何在 Bluemix 中从头创建一个移动应用程序,如何在 Bluemix 中运行一个 Node.js 应用程序,如何让 Push 服务与不同的设备进行交互,以及如何完成数据转换。

BLUEMIX SERVICE USED IN THIS TUTORIAL: Push iOS 8 服务 支持您将推送通知发送给 iOS 设备。

正文到此结束
Loading...