iOS 推送流程(APNS )
iOS 推送流程(APNS )
二年级下册数学辅导题>做鬼脸的英语⼀、APNS (Apple Push Notification Service )
great wall苹果推送通知服务(APNs)是推送通知的⽹关,iPhone ipad 对于应⽤程序在后台运⾏有诸多限制,考虑到⼿机电池电量,应⽤不允许在后台进⾏过多的操作。因此,当⽤户切换到其他程序后,原先的程序⽆法保持运⾏状态。对于那些需要保持持续连接状态的应⽤程序(⽐如社区⽹络应⽤),将不能收到实时的信息。推送是解决轮询所造成的流量消耗和电量消耗的⼀个⽐较好的解决⽅案
为解决这⼀限制,苹果推出了APNs(苹果推送通知服务 Apple Push Notification rvices)。APNs 允许设备与苹果的推送通知服务器保持常连接状态。当你想发送⼀个推送通知给某个⽤户的iPhone上的应⽤程序时,你可以使⽤ APNs 发送⼀个推送消息给⽬标设备上已安装的某个应⽤程序。
苹果的推送服务APNs基本原理简单来说就是苹果利⽤⾃⼰专门的推送服务器(APNs)接收来⾃我们⾃⼰应⽤服务器的需要被推送的信息,然后推送到指定的iOS设备上,然后由设备通知到我们的应⽤程序,设备以通知或者声⾳的形式通知⽤户有新的消息。推送的前提是装有我们应⽤的设备需要向APNs服务器注册,注册成功后APNs服务器会返给我们⼀个device_token,拿到这个token后我们将这个token
virtue
发给我们⾃⼰的应⽤服务器,当有需要被推送的消息时,我们的应⽤服务器会将消息按指定的格式打包,然后结合设备的device_token⼀并发给APNs服务器,由于我们的应⽤和APNs维持⼀个基于TCP的长连接,APNs将新消息推送到我们设备上,然后在屏幕上显⽰出新消
息来。
英语3级考试我们的设备和APNS服务器之间的通讯是基于SSL协议的TCP流通讯,⼆者之间维持⼀个长连接。
上图显⽰的这个消息体就是我们的服务器(Provider)发送给APNS服务器的消息结构,APNS验证这个结构正确并提取其中的信息后,再将消息推送到指定的设备。
这其实就是个JSON结构体,alert标签的内容就是会显⽰在⽤户⼿机上的推送信息,badge显⽰的数量(注意是整型)是会在应⽤Icon右上⾓显⽰的数量,提⽰有多少条未读消息等,sound就是当推送信息送达是⼿机播放的声⾳,传defalut就标明使⽤系统默认声⾳,如果传⽐如“beep.wav”就会播放在我们应⽤⼯程⽬录下名称为beep.wav的⾳频⽂件,⽐如当⼿机锁屏时QQ在后台收到新消息时的滴滴声。
//Payload 内容
{
"aps":{
"alert":"⼀些⽂字",
"badge":"1",
"sound":"default",
落幕的英文
}
}
有这么⼀种情况,当我们将应⽤从设备卸载后,推送的消息改如何处理呢。我们知道,当我们将应⽤从设备卸载后,我们是收不到Provider 给我们推送的消息的,但是,如何让APNS和Provider都知道不去向这台卸载了应⽤的设备推送消息呢?针对这个问题,苹果也已经帮我们解决了,那就是Feedback rvice。他是APNS的⼀部分,APNS会持续的更新Feedback rvice的列表,当我们的Provider将信息发给APNS推送到我们的设备时,如果这时设备⽆法将消息推送到指定的应⽤,就会向APNS服务器报告⼀个反馈信息,⽽这个信息就记录在feedback rvice中。按照这种⽅式,Provider应该定时的去检测Feedback rvice的列表,然后删除在⾃⼰数据库中记录的存在于反馈列表中的device_token,从⽽不再向这些设备发送推送信息。连接Feedback rvice的过程同样使⽤Socket的⽅式,连接上后,直接接收由APNS传输给我们的反馈列表,传输完成后断开连接,然后我们根据这个最新的反馈列表在更新我们⾃⼰的数据库,删除那些不再需要推
送信息的设备的device_token。从Feedback rvice读取的数据结构如下:
结构中包含三个部分,第⼀部分是⼀个时间戳,记录的是设备失效后的时间信息,第⼆个部分是device_token的长度,第三部分就是失效的device_token,我们所要获取的就是第三部分,跟我们的数据库进⾏对⽐后,删除对应的device_token,下次不再向这些设备发送推送信息。
时代周刊英文版⼆、配置推送准备⼯作英译汉字典
⾸先要有⼀台苹果的设备,模拟器是不⽀持推送的,所以你需要⼀台iphone,ipod touch或者ipad。
准备CSR⽂件,⽣成带有Push Notifications功能的AppID,给该AppID的Push Notifications配置CSR,下载证书配置钥匙串,导出p12⽂件。 其中
CSR⽂件:
⾸先我们要通过证书助⼿⽣成⼀个Certificate Signing Request(也就是CSR)的请求⽂件。
证书: 内容是公钥或私钥,由其他机构对其签名组成的数据包。
厦门人力资源管理师培训Entitlements : 包含了 App 权限开关列表。
CertificateSigningRequest : 本地公钥。
localtimep12: 本地私钥,可以导⼊到其他电脑。
Provisioning Profile : 包含了 证书 / Entitlements 等数据,并由苹果后台私钥签名的数据包。
继续之后选择保存位置,点击保存
这时该位置上会有⼀个SigningRequest的请求⽂件,也就是我们说的CSR⽂件。⽣成带有Push Notifications功能的AppID
在此处点+添加,按需求填写信息即可。
这⾥的bundleID是识别APP的唯⼀ID,⼀个APP对应⼀个APP ID 也就是⼀个bundleID,⼀般采⽤域名反写的⽅式命名,输⼊部分的英⽂建议如此。
当然也可以⼀个APP ID对应多的应⽤,为多个APP设定同⼀个bundleID,使⽤下⾯的Wildcard App ID设定,但是会少⼀些功能,例
如游戏中⼼,内购,数据保护,iCloud。
这⾥要把Push Notifications勾选上,应⽤才能带有推送能⼒。
全部设定好之后继续,保存,⽣成了⼀个新的APP ID
PS:当然⼀开始没有选上也没有关系,在我们⽣成的APP ID后,选择编辑,也会有勾选框可以选择增加能⼒。给该AppID的Push Notifications配置CSR: