iOS应用Push功能从0到1
APNs(Apple Push Notification service)是一种供应用程序开发人员将信息传播到iOS、tvOS和macOS设备上的服务。在用户设备上首次启动应用程序时,系统会自动在App和APNs之间建立经过认证、加密并且持久的IP连接,以保证App能够接收通知。
本文的主要内容有两个,一个是介绍Push证书的相关知识;二是如何创建Push证书并且导出对应的p12文件。
1、Push分类
通常iOS Push可以分为三种类型:
- 在线Push:即时通讯App通常会使用这种类型的Push,比如QQ、微信等App会通过IM自建的网络长连接将聊天消息和指令进行推送。
- 本地Push:iOS本地通知会使用这种类型的Push,比如闹钟的定时提醒,邮件的提醒事项等。
- 远程Push:也就是开篇提到的APNs,这也是本篇文章要介绍的内容。使用这种类型的Push,即使App处于后台或者完全被杀死的情况下,仍然能够通过网络获取到推送消息。
2、Push原理
Push原理整个过程分为三步:
- Provider相当于自己的服务器,首先Provider将要发送的消息以及目标设备的标识(device token)发送给APNs
- 其次APNs收到后在已注册的Push服务设备列表中查找对应的设备,并将消息发送给该设备
- 最后iOS设备接受到消息后传递给相应的应用程序,并按照设定的提醒风格展示在设备上。
备注:
device token是APNs用于区分识别每个iOS设备和设备上不同app的一个标识符,还可以用于APNs通过它将推送消息路由到指定设备上
APNs uses device tokens to identify each unique app and device combination. It also uses them to authenticate the routing of remote notifications sent to a device
To protect user privacy, do not use device tokens to identify user devices. Device tokens change when the user updates the operating system and when a device’s data and settings are erased. As a result, apps should always request the current device token at launch time.
3、工作流程
Push工作流程工作流程分为五步:
- App首先要向APNs注册推送服务,注册成功后会返回一个device token,这是iOS设备的唯一标识。
- App接收APNs返回的device token。
- App将返回的device token发送给自己的Push服务端,完成整个注册服务过程。
- 当有需要Push的消息是,服务端将Push消息和目标设备标识(device token)按照APNs指定的格式打包发送给APNs。
- APNs接收到Push服务端发送的消息后,根据device token查找对应的iOS设备,并将该消息发送给目标iOS设备。
4、Push证书
整个Push过程最重要的一环:Push证书,基于Push证书的身份验证,应用程序和APNs之间才能建立安全可靠的链接。Push证书有效期为一年,为了避免Push服务终端,一定要记得在过期之前更新证书。下面我们来看下如何注册Push证书。
1.创建CSR文件
- CSR(Certificate Signing Request)文件是用来创建私钥的,生成办法如下:打开钥匙串访问.app,选中
钥匙串访问--证书助理--从证书颁发机构请求证书...
,如下图所示
- 选择“从证书颁发机构请求证书...”后,弹出证书相关信息,用户电子邮件和常用名称可以随便填,这里我填写的是个人公司邮箱账号和个人姓名全拼,然后下边选择“存储到磁盘”,如下图所示
最后选择“继续”将后缀为certSigningRequest的CSR文件导出到本地即可。
2.创建Push证书
- 登录苹果开发者账号,选择左侧的
Certificates, IDs & Profiles
进入证书相关页面,打开页面后在左侧俩表中选择Certificates
下边的All
,右侧显示出所有的证书列表。选择右上角+
号,开始创建Push证书。
- 此时会有两种证书类型需要选择:开发证书(Development)和生产证书(Product),前者只能用于开发环境测试使用,后者用于生产环境正式使用(App Store App Push使用)。如下图所示,我们选择一种后,点击
continue
,进入下一步。
- 这一步要选择对应的App ID,它是使用你的应用程序Bundle ID创建的。如下图所示,选择完毕后点击
continue
,进入下一步。
- 这一步是要让创建一个CSR文件,之前已经将CSR文件创建好放在本地了,所以直接点击
continue
,进入下一步。
- 这一步是上传CSR文件,选择
Choose File...
将创建好的CSR文件上传,点击continue
,证书创建完毕。将创建好的证书下载到本地,双击打开即可将证书添加到钥匙串访问.app中。
3.导出Push证书
- APNs证书是一种扩展名为p12的文件,它是我们发消息给APNs的证明。打开钥匙串访问.app,找到要导出的证书,选中右键选择导出,如下图所示
- 填写要保存的文件名和要保存的位置,,点击
save
,弹出密码设置页面,这个密码Push服务端同学会用到,务必保存好。
证书导出成功,将导出的p12文件发送给负责Push功能的服务端同学。
如果想要完整的完成Push功能,还要在Xcode里边做相应的参数设置和代码开发,这里不再赘述,如有兴趣可以自行研究。