iOS开发 - 如何实现APP的推送通知

发布时间 2023-03-23 07:35:37作者: 带缝儿的沙盒

前言

1 - 推送通知,也被叫做远程通知,是在 iOS 3.0 以后被引入的功能。是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径。推送的新消息可能是一条信息、一项即将到期的日程或是一份远程服务器上的新数据

2 - 要实现推送通知这一目的,开发者必须通过 iOS Developer Program Portal 获得 SSL 证书。每个证书限用于一个程序,使用程序的 bundle ID 作为标识。证书有两种用途的:一种是针对用于开发和测试,另外一种针对发布产品

3 -(苹果推送通知服务 Apple Push Notification Service)APNS 提供了两项基本的服务:消息推送和反馈服务

① 消息推送:使用流式 TCP 套接字将推送通知作为二进制数据发送给 APNS。分别针对开发和测试用的 sandbox、发布产品的两个接口,不管用哪个接口都需要通过 TLS 或 SSL 证书来建立一个安全的信道。

    产品接口:gateway.push.apple.com:2195

    sandbox:   gateway.sandbox.push.apple.com:219

② 反馈服务:可以得到针对某个程序的发送失败记录。开发者应该使用反馈服务周期性检查哪些设备收不到通知,不需要重复发送通知到这些设备

    sandbox:feedback.push.apple.com:2196

    产品接口:feedback.sandbox.push.apple.com:2196

Apple Push Notification 的工作机制

1 - 推送流程

① 首先是应用程序注册消息推送

② iOS 跟 APNS 要 deviceToken,应用程序接受 deviceToken

③ 应用程序将 deviceToken 发送给推送服务器(称作 Provider,就是我们的后台)

④ Provider 向 APNS 服务发送消息

⑤ APNS 服务将消息发送给 iPhone 应用程序

2 - 无论是 iPhone 客户端跟 APNS,还是 Provider 跟 APNS 都需要通过证书进行连接,整体推送流程大致分为三个阶段

      第一阶段:推送服务器把要发送的消息、iPhone 的标识打包发给 APNS

      第二阶段:APNS 在自身的已注册 Push 服务的 iPhone 列表中,查找有相应标识的 iPhone,并把消息发到 iPhone

      第三阶段:iPhone 把发来的消息传递给相应的应用程序,并且按照设定弹出 Push 通知

开发正书 | 推送证书

1 - 制作推送证书

第一步:登录开发者帐号:IOS Provisioning 中选择或新建一个App Id,这里以 info.luoyl.iostest 为例

第二步:创建完后进入 App Id 列表可以看到新建的 App Id 默认是没有激活推送功能的。点击 Configure 链接进入推送功能激活页面

第三步:在 Enable for Apple Push Notification service 选项上打勾,然后在行点 configure 按钮

第四步:此时会弹出一窗口,点击 continue

第五步:在弹出证书上传页面,证书选择事先做好的 CertificateSigningRequest.certSigningRequest 然后点击 Generate 按钮

第六步:接下来会有 Your APNs SSL Certificate has been generated 提示,点击 continue

第七步:下载刚生成的证书 aps_development.cer

第八步:至此 App Id 的 Development Push SSL Certificate 已经变成 Enabled 状态

2 - 制作开发证书

第一步:App Id 指定为 info.luoyl.iostest , 下载后双击安装到电脑上

第二步:双击下载好的推送文件 aps_development.cer 安装到 keychain Access 上

第三步:选中 Push Services 证书,右键导出证书为 个人信息交换(.p12)格式文件,这里命名为 aps_development.p12。点存储时会弹出一个密码设置窗口,可留空不填

第四步:在终端执行下面的命令,把刚才导出的 个人信息交换(.p12)格式文件 加密转换成推送服务器的推送证书

openssl pkcs12 -clcerts -nokeys -out cert.pem -in aps_development.p12
openssl pkcs12 -nocerts -out key.pem -in aps_development.p12
openssl rsa -in key.pem -out key.unencrypted.pem
cat cert.pem key.unencrypted.pem > iostest_push_dev.pem  

上面的命令在执行时有 4 处是需要输入密码的:其中 1 和 2 直接回车;3 是必须设定一个 key ,比如 push ,那么在 4 处输入 3 设定的 key 值 push

第五步:命令执行完后生成的 iostest_push_dev.pem 就是我们推送服务器要使用的推送证书(经过以上步骤的配置,就完成了开发推送功能所需要的条件)

 

 

 

接下来将会新建一个ios应用来体验完成推送功能,在 ios 应用需要实现的接口