在ios系统中,app应用程序无法在后台完成较多的任务,仅仅允许程序做一些有限的任务(如音视频播放、地理位置信息、voip)。然而,如果你想做一些有趣的事情,并且告知用户,甚至用户没有使用你的app应用程序,如收到一条微博信息,自己心爱的球队夺冠又或者晚餐已经准备好了等信息时,由于你的app应用程序没有运行(或者程序进入后台,进程被挂起),因此,可能无法接收到相关的消息。
然而,苹果提供了这类情况的解决方案,替代你的app应用程序定时获取事件或者在后台去处理这些事件,你需要搭建服务器端来处理这类事情。当感兴趣的事情发生时,服务器端会发送一条推送通知到你的app应用程序。推送通知可以做三件事情,1文字信息,2一种声音,3一个徽章的标记号。你可以将以上三种情况任意组合,这取决于你的app应用程序。比如推送通知时,只显示声音和标记,不显示消息等。
1、推送通知流程简述
(1) 首先用户必须确认需要接收到这些消息;
(2)app程序接收到令牌信息;
(3)将令牌信息发送到服务器端;
(4)当感兴趣的事情发生时,你的服务器将向苹果的推送通知服务器(Apple Push Notification Service,以下简称APNS)发送通知;
(5)APNS会向你的设备发送消息,即通知;
2、推送通知基本要求
(1)首先需要iphone或者ipad设备,模拟器上无法对“推送通知”进行测试。因此,你必须在真机上进行测试;
(2)需要加入ios开发者计划(99美金/年);
(3)一台连接互联网的服务器,因为推送通知的发起者是你的服务器(provider);
3、推送通知内容解析
服务器端(provider)负责创建消息推送通知,一个推送服务通知主要包含“设备令牌”和“负载”(定义的json信息的属性列表,负载最大运行值为256字节)。对于每个推送通知,服务器端(provider)必须构建一个严格遵守 RFC 4627 的 JSON 字典。 该字典必须包含一个键名为 aps 的字典。而 aps 的字典包含一个或多个属性,这些属性指定如下动作:
(1)提示用户的警告信息(ios5后有所改变,但大体一致);
(2)一个提示声音;
(3)显示app应用程序的数字(徽章);
4、推送通知的局限性
它们是不可靠的!不同的设备之间,他们的推送消息的时间可能存在不一致。
推送通知也可能不会被送达到指定设备。原因是可能所在wifi环境下端口被封、设备处于关机状态,又或者网络环境较差,以至无法正确送达。APNS会尽量与设备“握手”以此建立连接,但它只会尝试在有限的时间,一旦超时,推送通知将永远消失。
5、推送通知步骤详述
要实现远程推送在服务器端通知苹果推送服务器需要一个pem证书和密码,怎么得到pem呢,首先在项目立项是可以获得推送证书,和密钥,双击推送证书在mac机上的钥匙串中打开,选中证书和密钥——>导出两项另存为一个后缀名为.p12的证书(这里假设命名为zhengshu.p12),设置密码。
然后在命令框中进入放zhengshu.p12的文件夹,输入命令openssl pkcs12 -in zhengshu.p12 -out mytest.pem -nodes -clcerts
系统会提示你输入密码这样便生成了一个名为mytest.pem 的文件。这个文件便可以在服务器中使用了。