前言
iOS10下,远程推送发生了变化,新增的UserNotifications.framework将本地推送和远程推送整合在一起。 最近刚刚更新了Xcode8,自动创建证书和配置文件确实方便许多。琰君分享下以开发环境为例(非生产环境)在Xcode8下,快速集成极光推送并兼顾iOS10。
注意:极光推送的远程推送是免费的,但相应的用户统计,终端统计等功能是不免费。如果你需要用户统计,终端统计这些功能意味着需要付费才能使用。
参考链接
开发证书配置
APNs 推送原理及问题
iOS 推送全解析,你不可不知的所有 Tips!
接下来假设你都了解证书相关的,推送的一些概念和极光推送的知识。那么相信你应该知道需要一台iOS设备和一个苹果开发者帐号才能去体验远程推送。如果你清楚远程推送的原理,那可以直接从以下第2步开始。
集成步骤
远程推送原理
Xcode8创建项目,配置自动创建App ID/证书/配置文件
创建APNs 推送证书
在极光推送后台创建应用,并上传APNs 推送证书
项目中集成极光推送SDK
获取 APNs(通知) 推送内容
极光推送后台发送远程推送测试
1. 远程推送原理
当iOS设备联网的情况下,苹果服务器和iOS设备建立了一个长链接,即便应用处于挂起和后台的状态,苹果可以给iOS设备中的应用发送通知。
远程推送原理
概念
iOS:iOS设备
APNS Server:苹果服务器
Your App: 自己的应用,例如咕咚
Your Server:自己的服务器,例如咕咚服务器
推送流程
iOS 应用注册推送通知,iOS设备将设备的UDID和应用的Bundle ID到苹果服务器。
苹果服务器将接收到的UDID和Bundle ID加密生成一个deviceToken,并返回给对应iOS应用。
iOS应用将接收到的deviceToken发送到自己的服务器,服务器并保存。
自己的服务器需配置APNs 推送证书,当需要推送时,去后台查询推送目标设备的deviceToken,将消息和deviceToken一起发送给苹果服务器。
苹果服务器通过deviceToken找到对应设备下的对应应用,推送消息。
说明
我们的应用真机测试需要创建对应App ID/证书/配置文件, 这步可以用Xcode8 自动创建,而不需要到苹果开发者平台去创建。如果不是Xcode8,则需要去开发者平台申请,并且在Xcode配置,保证真机测试即可。
我们自己的服务器需要配置 APNs 推送证书,同样的分为开发证书和生产证书。需要到苹果开发者平台去申请。
如果不借助第三方推送平台,我们需要完成推送流程中的1,3,4步。借助极光推送,那么我们只需要完成推送流程中的1,3步,但同样需要我们申请APNs 推送证书,并且上传到极光推送平台。
2. Xcode8配置自动创建App ID/证书/配置文件
在Xcode8下,确保已经登录付费苹果开发者帐号。请开启Application Target的Capabilities->Push Notifications选项。
开启远程推送
2.勾选自动管理App ID/证书/配置文件
勾选自动管理
3.检查Xcode生产的App ID/证书/配置文件这步配置好了就可以真机运行了。
检查Xcode生产的App ID/证书/配置文件
3. 创建APNs 推送证书
登录开发者网站,并点击按钮创建证书
点击按钮创建证书
2.选择开发环境APNs 推送证书点击右下角按钮创建
创建开发环境APNs 推送证书
3.选择工程的App ID
选择工程的App ID
4.上传证书请求文件,不知道的童鞋可参照开发证书配置
上传证书请求文件
5.点击下载证书,并双击安装到钥匙串.
安装APNs 推送证书
6.打开钥匙串,并参照下图指示,找到对应的APNs 推送证书,并选择右键导出.
钥匙串导出证书
7.设置证书名字,并选择证书存放位置。
设置证书名字
8.设置证书密码,可不填。极光推送支持证书设置密码,但像leanCloud推送不支持证书设置密码,各位童鞋可按照实际情况来。最后输入电脑开密码,导出证书。
设置证书密码
输入电脑开机密码导出证书
4. 在极光推送后台创建应用,并上传APNs 推送证书
1.登录极光推送平台,切换到控制台,并创建应用。接下来在应用信息中上传开发APNs 推送证书。生产环境APNs 推送证书配置类似,不做赘述.
上传开发APNs 推送证书
核对应用的Bundle ID 等信息是否正确.
核对Bundle ID 等信息
5. 项目中集成极光推送SDK
1.导入极光推送SDK
2.导入系统依赖库
3.AppDelegate.m 配置
导入以下头文件
注册远程推送极光版本
注册远程推送用系统自带版本
得到苹果服务器返回的deviceToken,上传到极光推送服务器。
6.获取 APNs(通知) 推送内容
iOS 设备收到一条推送(APNs),用户点击推送通知打开应用时,应用程序根据状态不同进行处理需在 AppDelegate 中的以下方法中添加代码以获取apn内容
1.如果 App 状态为未运行,此函数将被调用,如果launchOptions包含UIApplicationLaunchOptionsRemoteNotificationKey表示用户点击apn 通知导致app被启动运行;如果不含有对应键值则表示 App 不是因点击apn而被启动,可能为直接点击icon被启动或其他。
2.基于iOS 6 及以下的系统版本,如果 App状态为正在前台或者点击通知栏的通知消息,那么此函数将被调用,并且可通过AppDelegate的applicationState是否为UIApplicationStateActive判断程序是否在前台运行。
3.基于iOS 7 及以上的系统版本,如果是使用 iOS 7 的 Remote Notification 特性那么此函数将被调用
4.基于iOS 10及以上的系统版本,
原[application: didReceiveRemoteNotification:]将会被系统废弃,
由新增UserNotifications.framework中的以下两个方法替代。
在极光推送SDK2.1.9版本以后可实现SDK封装的JPUSHRegisterDelegate协议方法,适配iOS10新增的delegate协议方法。
即以下两个方法:
7. 极光推送后台发送远程推送测试
1.登录极光推送,切换到控制台,并点击对应的应用,点击推送按钮
2.设置推送内容
选择推送环境iOS开发环境,目标人群,发送时间。再点击可选设置设置消息的具体内容。
3.设置消息具体内容。远程推送分为普通推送/后台推送/静默推送3种类型,并且类型由推送消息设置来决定。关于如何设置请参考iOS 推送全解析,你不可不知的所有 Tips!
5.推送历史可以在这里看得到,但有延迟,可能远程推送已接收到,推送历史数据还没有更新到最新。
关于Xcode8下集成极光远程推送的简单介绍,到这里就结束了。
来源:赵先生Try http://www.jianshu.com/p/53e0244e6081
iOS攻城狮