苹果信息推送服务

来源:互联网 发布:mac qq远程 编辑:程序博客网 时间:2024/04/28 06:30

苹果信息推送服务

                                                                                                                             Apple Push Notification Service

前言:

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

 

一、简介

1:APNS是免费的。只要有开发者账号便可以申请APNS证书。

2:APNS又是不可靠的,苹果对信息推送的可靠性不做任何保证。

3:APNS对消息的大小是有限制的,总容量不能超过256字节。

APNS工作流程如图:

 


1& 2:用户第一次安装应用并第一次启动时,会弹出对话框提示应用需要开通推送,是否允许,如果允许,应用会得到一个硬件token。

有三点需要注意:

第一,  此token唯一与设备相关,同一设备上不同应用获取的token是一样的;

第二,  应用被卸载,然后重新安装时,确认对话框不会再出现,自动继承前一次安装的设置信息;

第三,  推送设置可以在设置-通知中进行更改。可以选择开启消息框、声音以及badge number中的一种或多种。

3:应用将收到的token发送到服务端。

4:应用服务器通过token及证书向苹果的消息服务器(APNS)发送消息。

5:苹果消息服务器(APNS)将接收到的消息发送到对应设备上的对应应用。

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"按钮,勾选下图所示选择框:


点击”DevelopmentPush SSL Certificate“右侧的configure按钮,development版本的应用于测试,有效期只有一年,且只能使用苹果的APNS测试服务器,应用发布时需要申请Distributions版本的证书。Development与Distribution版本的证书获得的Token是不一样 的。弹出框如下所示:


上传"MyPushChat.certSigningRequest"并点击Generate,片刻后证书生成完毕,下载,命名为“aps_developer_identity.cer”。

 

step3:

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

 

step4:

将上面得到的文件都保存到桌面。打开Console,切换到桌面。

首先将aps_developer_identity.cer转换成MyPushChat.cert

命令:opensslx509 -in aps_developer_identity.cer -inform der-out MyPushChatCert.pem

 

然后将私钥文件转换为MyPushChatKey.pem

命令:

opensslpkcs12 -nocerts -out MyPushChatKey.pem -in MyPushChatKey.p12

EnterImport Password:

此处密码输入为前面为私钥设置的密码: 123456abc

MACverified OK

Enter PEMpass phrase:

这里一定要输入新密码,我们设为123456abc

Verifying -Enter PEM pass phrase:

 

下一步,将MyPushChatKey.pem及MyPushChatCert.pem合成一个pem文件:

命令:catPushChatCert.pem PushChatKey.pem > ck.pem

 

最后,测试一下得到的ck.pem文件

首先运行:

命令:telnetgateway.sandbox.push.apple.com 2195

如果网络正常,会出现如下所示,ctrl + C终止连接。

Trying17.172.232.226...

Connectedto gateway.sandbox.push-apple.com.akadns.net.

Escapecharacter is '^]'.

 

然后使用ssl测试连接

命令:openssls_client -connect gateway.sandbox.push.apple.com:2195 -cert MyPushChatCert.pem-key MyPushChatKey.pem

输入密码123456abc后,如果一切正常,会出现很多的输出,你将可以输入若干字符,回车后,连接将中断。

 

到此,最繁琐与易错的过程已经完成,证书相关工作到此为止了。

 

 

 

 

参考文献:

ApplePush Notification Services Tutorial: Part 1/2

https://developer.apple.com/notifications/

https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Introduction/Introduction.html