苹果信息推送服务(Apple Push Notification Service)使用总结

标签: 系统架构 | 发表时间:2013-09-06 07:22 | 作者:rambowu
出处:http://www.blogread.cn/it/

标签:   Push   信息推送

苹果信息推送服务(Apple Push Notification Service),是由苹果官方提供的消息推送服务。推送形式包括顶部消息条、声音以及badge number()有了APNS,应用程序可在任意状态接收到与程序有关的消息(包括运行状态not running,foreground以及background),由于在大多数情况下,iOS中最多只有一个应用能处于active状态,所以,APNS为应用的交互提供了极大的便利。

一:简介

在使用APNS之前,有这么几点需要了解:1:APNS是免费的。只要有开发者账号便可以申请APNS证书。2:APNS又是不可靠的,苹果对信息推送的可靠性不做任何保证。3:APNS对消息的大小是有限制的,总容量不能超过256字节。 清楚了以上三条,各位应该对APNS适用的应用情景有所了解了。 APNS的工作流程如下图所示: 1 & 2:用户第一次安装应用并第一次启动时,会弹出对话框提示应用需要开通推送,是否允许,如果允许,应用会得到一个硬件token。有三点需要注意:第一,此token唯一与设备相关,同一设备上不同应用获取的token是一样的;第二,当应用被卸载,然后重新安装时,确认对话框不会再出现,自动继承前一次安装的设置信息;第三,推送设置可以在设置-通知中进行更改。可以选择开启消息框、声音以及badge number中的一种或多种。 3:应用将受到的token发送到服务端,也就是APNS消息的源头。4:应用服务器通过token及证书向苹果的消息服务器发送消息。5:苹果将接收到的消息发送到对应设备上的对应应用。6:如果应用未处于Active状态(未启动或backgroud),默认设置下,屏幕顶部会弹出消息框,同时有声音提示,点击改消息框会进入应用,如不点击则应用图标上会有badge number出现。

二:使用步骤

APNS的使用并不复杂,但容易出错的环节比较多,特别是证书申请的部分,要特别的注意。下面根据我按 教程实际操作的步骤进行阐述:准备工作:A: 一个Xcode工程,我们将其命名为MyPushChat,以及一个对应的App ID.B:一台能用于调试的iOS设备(APNS只能在实体设备上工作,模拟器无法运行)

step1:

在"应用程序-使用工具"中打开"钥匙串访问"(Keychain Access),如下图所示:  在接下来的对话框中选择存储到磁盘,邮件可随意填写,名称命名为MyPushChat 点击“继续”,将文件名设为"MyPushChat",点击存储。这样,会得到一个名为"MyPushChat.certSigningRequest"的文件,此文件要妥善保管。 从刚刚创建的csr文件中到处私钥,具体操作如下图所示: 将导出的文件命名为MyPushChatKey.p12,并输入密码,请牢记此密码,这里姑且设为123456abc。此时,我们已有文件MyPushChat.certSigningRequest,以及MyPushChatKey.p12

step2:

App IDs中找到与MyPushChat对应的AppID, 点击右侧"Configure"按钮,勾选下图所示选择框: 点击”Development Push SSL Certificate“右侧的configure按钮,development版本的应用于测试,有效期只有一年,且只能使用苹果的APNS测试服务器,应用发布时需要申请Distributions版本的证书。Development与Distribution版本的证书获得的Token是不一样的。弹出框如下所示: 上传"MyPushChat.certSigningRequest"并点击Generate,片刻后证书生成完毕,下载,命名为“aps_developer_identity.cer”。

step3:

打开 Provision Portal,点击 New Provision,将Provision File命名为"MyPushChat",选择对应的App ID 以及Device并下载。得到文件MyPushChat.provision。双击导入此MyPushChat.Provision文件,如果一切正常,会弹出Orgnizer, 且显示界面如下所示:

step4:

将上面得到的文件都保存到桌面。打开Console,切换到桌面。首先将aps_developer_identity.cer转换成MyPushChat.cert命令:openssl x509 -in aps_developer_identity.cer -inform der-out MyPushChatCert.pem 然后将私钥文件转换为MyPushChatKey.pem命令:openssl pkcs12 -nocerts -out MyPushChatKey.pem -in MyPushChatKey.p12Enter Import Password:此处密码输入为前面为私钥设置的密码: 123456abcMAC verified OKEnter PEM pass phrase:这里一定要输入新密码,我们设为123456abcVerifying - Enter PEM pass phrase: 下一步,将MyPushChatKey.pem及MyPushChatCert.pem合成一个pem文件:命令:cat PushChatCert.pem PushChatKey.pem > ck.pem 最后,测试一下得到的ck.pem文件首先运行:命令:telnet gateway.sandbox.push.apple.com 2195如果网络正常,会出现如下所示,ctrl + C终止连接。Trying 17.172.232.226...Connected to gateway.sandbox.push-apple.com.akadns.net.Escape character is '^]'. 然后使用ssl测试连接命令:openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert MyPushChatCert.pem -key MyPushChatKey.pem输入密码123456abc后,如果一切正常,会出现很多的输出,你将可以输入若干字符,回车后,连接将中断。 到此,最繁琐与易错的过程已经完成,证书相关工作到此为止了,进入编码阶段~

step5:

1:在项目MyPushChat中AppDelegate.m的didFinishLaunchingWithOptions中加入如下代码

[plain][/plain] view plain copy
  • [[UIApplication sharedApplication] registerForRemoteNotificationTypes:

  •        (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

本句代码的作用为在应用第一次启动时弹出对话框让用户确认是否开启消息推送,本句注册的消息类型有BadgeNumber, 声音, 顶部消息框. 可以选择其中的一种或多种。  2:在AppDelegate中加入如下代码:

[plain][/plain] view plain copy
  • - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken

  • {

  •    NSLog(@"My token is: %@", deviceToken);

  • }


  • - (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error

  • {

  •    NSLog(@"Failed to get token, error: %@", error);

  • }

如果获取token成功,运行后控制台中会有如下格式的输出: My token is:<740f4707 bebcf74f 9b7c25d4 8e335894 5f6aa01d a5ddb387 462c7eaf 61bb78ad>将尖括号内容保存,稍后使用同样,在AppDelegate中加入如下代码

[plain][/plain] view plain copy
  • - (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

  • {

  •    if ( application.applicationState == UIApplicationStateActive ) {

  •        // 程序在运行过程中受到推送通知

  •        NSLog("%@", [[userInfo objectForKey: @"aps"] objectForKey: @"alert"]);

  •    } else {

  •        //程序为在运行状态受到推送通知

  •    }

  • }

上面这段代码处理了应用分别在运行和非active状态下接收推送通知的处理方式。  3:下载 php样例程序,将其中的devicetoken字段设为刚才保存的token,注意,去掉空格。将password设为123456abc,将message设为你想设置的内容,保存,然后命令行下进入php源码路径,运行php simplepush.php 如果人品够好,你的设备上马上会咚咚的响一下~

三:其他注意事项

1:可以使用如下代码判断开启了那些类型的消息通知:

[plain][/plain] view plain copy
  • UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

  • if (enabledTypes & UIRemoteNotificationTypeBadge) {

  • //开启badge number

  • }

  • if (enabledTypes & UIRemoteNotificationTypeSound) {

  • //开启声音

  • }

  • if (enabledTypes & UIRemoteNotificationTypeAlert) {

  • //开启alert

  • }

2: 推送服务端推荐使用 Javapns, 使用很简便,注意其使用的证书文件不是pem,而是p12格式,具体生成方法为: 一:生成csr文件(同上)二:通过csr在苹果网站上生成cert文件(同上)三:双击导入生成的cert文件,在keychain中同时选中csr的专用秘钥及刚刚导入的ssl证书,右键->导出, 保存为p12其他过程相同 3: 如果有把握,可以直接使用distribution版的证书和provision文件,但线上服务器有一定的限制,如果使用不当,会被苹果当ddos ban掉。 4:苹果的推送服务器会向应用服务器返回一个发送结果,对于一直失败的目标,应用服务端需要进行处理。 5:传送的message为json格式,可以在其中加入自己的字段,但同样,总大小不能超过256字节。From:http://blog.csdn.net/lifengzhong/article/details/7737028

您可能还对下面的文章感兴趣:

  1. 消息系统该Push/Pull模式分析 [2012-04-07 14:31:47]
  2. Push Or Pull? [2011-06-02 00:03:33]
  3. 中庸之道的newsfeed的设计 [2010-10-28 22:19:54]
  4. Array的push与unshift方法性能分析 [2010-09-14 08:53:23]

相关 [苹果 信息 推送] 推荐:

苹果信息推送服务(Apple Push Notification Service)使用总结

- - IT技术博客大学习
标签:   Push   信息推送. 苹果信息推送服务(Apple Push Notification Service),是由苹果官方提供的消息推送服务. 推送形式包括顶部消息条、声音以及badge number()有了APNS,应用程序可在任意状态接收到与程序有关的消息(包括运行状态not running,foreground以及background),由于在大多数情况下,iOS中最多只有一个应用能处于active状态,所以,APNS为应用的交互提供了极大的便利.

八爪PuSure:把信息从电脑推送到手机

- - 动点科技-独立原创科技博客
伴随着人们在电脑、手机、平板之间的交叉使用,跨平台成为很多产品的方向,首先的当然是信息在各个终端之间的传递. 前段时间上线并快速发展的 消息速递就是这样一个产品——把电脑上的信息一键发送到手机. 在这次的移动互联网大会上,我们发现了另外一款类似的产品,有个信互动(北京)网络科技所开发的 八爪PuSure,以更简单的方式让用户把电脑上的信息推送到手机.

苹果开始推送 iOS 6.0.1 固件更新

- - 果迷网
苹果已经向 iOS 用户推送了最新的 iOS 6.0.1 更新,主要修正了此前用户反馈较多的键盘横线和闪关灯无法关闭问题,同时修复了 iPhone 5 无法通过无线方式进行软件更新的问题. 有意思的是,对于存在“无法以无线方式安装软件更新的问题”的 iPhone 5 用户来说,会发现软件更新的“下载并安装”按钮是灰色的……因此在进行软件更新之前需要按提示(设置-通用-软件更新-了解更多)下载并安装一个名为“iOS Updater”的安装器应用;安装完成并打开它就会自动跳转回软件更新界面按正常步骤进行软件更新.

苹果iOS系统下的推送机制及实现

- - IT技术博客大学习
标签:   push   推送. 原文由iOS教程团队 Matthijs Hollemans 撰写,经原网站管理员授权本博翻译. 在iOS系统,考虑到手机电池电量,应用不允许在后台进行过多的操作,当用户未开启应用时,要怎么样才能通知用户呢. 好比用户收到一个新的微博、喜欢的球队取得一场胜利或者是晚餐准备好了,如果应用都不在运行当中,当然也就无法去获得这些事件.

很有创意的苹果iCloud错误信息提示

- will - cnBeta.COM
苹果iCloud测试网站已经开通,这个网站最初只面向拥有苹果开发者账户的用户. 对这些用户来说,云服务的错误信息提示有些懊恼,但是他们乐意跟我们一同分享这些错误信息的提示图. 首先,看起来像个书呆子的iCloud端着一杯咖啡,这幅图片是提醒用户使用JavaScript.

[信息图表]苹果谣言是如何诞生的

- Adam - cnBeta.COM
在科技媒体中最受关注的就是各式各样的苹果谣言,它们半真半假同时又充满吸引力,这些谣言到底都是从哪里来的呢. 答案有四:1.工作在制造方的舅舅 2.善于在设备和软件中发现细节的黑客 3.科技网站的再加工 4.分析师的“分析”.

[信息图]跟着我一起解读苹果邀请函

- Yi - cnBeta全文版
关于iPhone5的传言比比皆是,虽然苹果官方已经证实向媒体发出邀请函,确定10月4日上午10点(北京时间10月5日凌晨1点)于苹果总部 Cupertino总部举行新品发布会,主题是“Let's talk iPhone”. 邀请函上有四个图标:一个是日历,一个是时钟,一个是总部的地址,一个电话图标~这个电话图标的右上角中有个1,使用 iPhone 的童鞋都知道,这代表有一个未接电话,而在这里却并不仅仅如此.

[信息图表]为什么苹果应该感谢中国

- youschan - cnBeta.COM
 一个庞大的苹果王国已经在全球范围内悄然建立,而苹果在中国市场取得的辉煌业绩则是苹果王国建立的重要基石. 如今,苹果的每一个动作都会在中国掀起一场苹果风暴,而即将于10月4号推出的iPhone5势必又将再次席卷中国. 苹果在一定程度上已经统占了中国市场,从某种意义上说,苹果真的应该感谢中国,看了下面这张信息图,你就知道为什么中国对苹果有如此重大的意义了.

Web2.0Share信息图推荐:乔布斯和苹果之道

- hailin - 天涯海阁-Web2.0Share
今天推荐一些关于乔布斯和苹果相关的信息图,更多信息图可以查看这里. Steve jobs 构建的苹果产品图. 大图地址:http://ikeepu.com/bar/amom. 大图地址:http://ikeepu.com/bar/a3u0. iQuit:一个男人和他所改变的世界. 大图地址:http://ikeepu.com/bar/amj4.

Google Realated for Chrome 和 IE 发布,随时推送正在浏览的相关信息

- skymare - 谷奥——探寻谷歌的奥秘
Google Related目前以Chrome扩展的形式存在,同时也集成到了Google Toolbar for IE里. 在安装扩展之后,你只要随便打开一个网页,Google都会在页面下方显示出一个Google Related工具栏,这里会根据当前你浏览页面的信息推送给你相关内容,比如你浏览一个饭馆的网页,可能会推送你该饭馆的Google Maps地图、Google Places评论以及跟该饭馆口味类似的其它饭馆.