移动应用程序的频繁加载和卸载是独一无二的,而且运行移动应用程序的设备与服务供应商的连接也是断断续续的。这些应用程序必须定期接受数据更新,向用户通知这些服务器事件。在这种情况下,推送通知服务可以通知用户缺少某项服务或传入了新数据。
“ 让您的 iOS 用户保持最新。通过 IBM Bluemix 上的 Push 服务将推送通知添加到您的 Node.js 应用程序。 ”
观看: Node.js 入门(演示)
获取代码
要为移动应用程序设置一个 Bluemix 环境:
点击查看大图
关闭 [x]
cf login -a https://api.ng.bluemix.net输入您的 Bluemix 帐户和密码,这样您就可以将代码与 Bluemix 同步。
关于 Android 开发环境、配置 Push 和 Node.js,以及在移动模拟器中运行一个示例的更多信息,请参阅developerWorks 教程。
在有了推送通知功能之后,就可以直接从 DevOps Services 推送代码。(我将在步骤 5 中讨论 Push 服务代码结构。)
manifest.yml
。使用您在步骤 1 中生成的正确 ApplicationId 和 ApplicationRoute 来更新 app.js
。 cf push <App> -p .
现在,Bluemix 中的 Push 服务已准备就绪。
关于 IBM Mobile Cloud for iOS 的更多信息,请阅读此 教程 。
要为推送通知开发和部署一个应用程序,必须从 Apple Dev Center 获得 SSL 凭据。每个凭据仅限于一个应用程序,通过其 bundle ID 进行标识;该凭据还被限定于两个环境中的一个,一个用于开发环境,一个用于生产环境。
.p12
文件,然后上传它。因为 Sandbox 和 Production 是不同的凭据文件,所以不能交换它们。 点击查看大图
关闭 [x]
Pod install
来安装依赖关系库。 .xcworkspace
项目文件并绑定它。 Bluelist.plist
文件并上传 applicationId 、 applicationSecret 和 applicationRoute 变量。 Bluelist-info.plist
文件,上传来自步骤 3 的 Bundle Identifier 。 Bluelist
。在开始执行时,会出现一个对话框询问您: Allow Push Notification 。选择 Yes 。如果错误地按下了 No,那么您可以导航到 Settings > Notifications > Bluelist 来更改此设置。 推送通知像预期的那样正常工作。
现在来看一下代码,以便可以在您的应用程序中启用推送通知。在第一个代码片段中,显示了 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 设备。