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

标签: 系统架构 | 发表时间:2013-09-05 23: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为应用的交互提供了极大的便利.

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

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

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

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

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

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

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

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

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

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

Apache Tomcat 6.0.35前有拒绝服务,信息泄露等漏洞

- - C1G军火库
Apache Tomcat 6.0.35前有信息泄露相关的一个漏洞(CVE-2011-3375),. 以及另一个在此前广受关注的哈希碰撞引发拒绝服务(DoS)漏洞(CVE-2012-0022),. Apache 建议用户对 Tomcat 进行升级从而规避此漏洞. 一.安装Oracle JRockit.

根据status信息对MySQL服务器进行优化

- - 开心平淡对待每一天。热爱生活
网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一段时间后运行,根据服务器的”状态”进行优化.   可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句:.

苹果Siri个人助理服务仅适用于iPhone 4S

- Woooon - cnBeta.COM
北京时间10月5日早间消息,最新消息显示,只有iPhone 4S的用户才可以使用苹果最新推出的Siri个人助理语音服务. Siri已被集成在许多应用中,该软件能够在iPhone 4S和苹果的数据中心中运行. 不过Siri的软件进程需要强大的CPU来支持,因此仅适用于采用最新A5处理器的iPhone 4S.

苹果iCloud服务结束测试正式上线

- David - GeekPark 捕风捉影
10月12日,苹果的iCloud云存储服务已经结束测试,并正式上线. 由于尚未升级到iOS 5,仅有Find my iPhone可以使用. 一般用户在用户升级至iOS 5和最新版Mac OS X“狮”操作系统之前,将无法使用该服务. iCloud在正式上线后界面略有改变,苹果同时移除了iCloud图标上代表测试的“beta”标签.