iOS远程推送

远程推送应用配置过程

一. 创建支持远程推送功能的App ID

iOS远程推送_第1张图片
添加App ID
iOS远程推送_第2张图片
设置Bundle ID,不能设置通配ID

勾选远程通知选项,可以在配置App ID的时候勾选,也可以在原有App ID的基础上进行更改。

iOS远程推送_第3张图片
勾选远程通知选项
iOS远程推送_第4张图片
勾选远程通知选项

二. 申请开发者证书,并选中刚刚创建的App ID

iOS远程推送_第5张图片
创建远程推送证书
iOS远程推送_第6张图片
创建推送证书

选择我们刚才配置好,勾选推送选项的App ID.


选择App ID

选择我们电脑本地使用证书助理生成的CSR文件

iOS远程推送_第7张图片
选择后缀名为.certSigningRequest的文件

三. 下载CER文件,并导入钥匙串管理

iOS远程推送_第8张图片
下载证书

四. 我们需要重新生成一下配置文件


生成配置文件

选择此Provisioning Profile的环境后点击Continue


点击Continue

选择要创建Provisioning Profile的App ID后点击Continue

iOS远程推送_第9张图片
点击Continue

选择所属的开发者证书,(这里创建了多个开发者证书,建议只创建一个,方便管理)为了方便。这里选择Select All,再点击Continue进入下一步。


点击Continue进入下一步

为该Provisioning Profile选择将要安装的设备(一般选择Select All),点击Continue

iOS远程推送_第10张图片
选择Select All

给该Provisioning Profile填写Profile Name,点击generate完成创建

iOS远程推送_第11张图片
完成创建

创建完成,点击download下载到本地。双击下载下来的Provisioning Profile,添加到xcode。

五. 将推送证书导出后缀为.p12的文件,上传服务器。在团队开发中如果遇到多人开发,也需要给同事导出.p12证书给他人使用。


注意:导出证书的时候,尽量不要展开私钥。

iOS远程推送_第12张图片
导出后缀为.p12的文件

导出证书

上传给服务器时,需要告诉服务器开发同事证书的密码。

iOS远程推送_第13张图片
设置密码

六. 远程推送应用程序开发过程

具体怎么新建应用程序和其他开发就不多说了,直接说和推送相关的。

打开info.plist文件的Bundle identifier选项,将配置推送证书的App ID填写进去


App ID填写

点击项目,进入Build Setting 界面,向下滑动,去到Code Signing 配置证书


配置证书

需要在Xcode 中修改应用的 Capabilities 开启Remote notifications

iOS远程推送_第14张图片
开启Remote notifications

七. 获取DeviceToken,并发送给服务器

由于iOS系统权限限制,需要注册远程通知,我们直接上代码

iOS远程推送_第15张图片
注册远程通知

注册通知之后,苹果会将DeviceToken通过代理方法的形式返回相应的代理方法。注意:一定要联网!

这个代理方法会将手机的UDID + 应用程序的Bundle ID发送给苹果,苹果进行某种编码之后再通过代理方法返回。

deviceToken = (手机的UDID + 应用程序的Bundle ID) 苹果编码

返回的deviceToken是NSData类型的,大概格式如下:<7040f7d5 5a974598 c5cf31b5 3e340b39 68affd25 122f0ce1 3f315226 396c2e5b>

注册通知后,在代理方法中接收到苹果返回的deviceToken

iOS远程推送_第16张图片
获取到苹果发送的deviceToken

实现接收到远程通知的代理方法,触发方法和本地通知流程一致

iOS8以前使用这个方法:


获取推送消息

iOS8之后使用这个方法:


获取推送消息

执行completionHandler有两个目的

1> 系统会估量App消耗的电量,并根据传递的UIBackgroundFetchResult 参数记录新数据是否可用

2> 调用完成的处理代码时,应用的界面缩略图会自动更新

注意:接收到远程通知到执行完网络请求之间的时间不能超过30秒



文/刘小壮(简书作者)
原文链接:http://www.jianshu.com/p/5639a3d2a2be
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

你可能感兴趣的:(iOS远程推送)