-
iOS SDK 调试指南
iOS 调试思维导图
-
2
确认证书
请到“应用详情页面”确认证书可用性:
-
3
开发环境测试
在对 JPush iOS 开发环境进行测试前,请确保 3 个统一:
App 是开发环境打包(开发证书 Development)
上传了开发证书并验证通过
Portal 上的应用设置为开发环境
发布环境测试
在对 JPush iOS 生产环境进行测试前,请确保 3 个统一:
App 是 ad-hoc 打包或者App Store 版本(发布证书 Production)
上传了发布证书并验证通过
Portal 上的应用设置为生产环境
可能存在的其他问题
收到消息不够稳定
JPush iOS 是对原生官方 APNs 推送的一个补充,是对其的封装,以帮助开发人员更轻松地使用 APNs 。
由于APNs 本身不承诺保证消息到达,客户端网络与服务器端的连通性,对 APNs 是否及时接收到消息具有很大的影响。
-
4
iOS 证书 设置指南
创建应用程序ID
登陆 iOS Dev Center 选择进入iOS Provisioning Portal。
-
5
在 iOS Provisioning Portal中,点击App IDs进入App ID列表。
-
6
创建 App ID,如果 ID 已经存在可以直接跳过此步骤
-
7
为 App 开启 Push Notification 功能。如果是已经创建的 App ID 也可以通过设置开启 Push Notification 功能。
-
8
根据实际情况完善 App ID 信息并提交,注意此处需要指定具体的 Bundle ID 不要使用通配符。
-
9
配置和下载证书
如果你之前没有创建过 Push 证书或者是要重新创建一个新的,请在证书列表下面新建。
-
10
新建证书需要注意选择证书种类(开发证书用于开发和调试使用,生产证书用于 App Store 发布)
-
11
点击 Continue 后选择证书对应的应用ID,然后继续会出现“About Creating a Certificate Signing Request (CSR)”。
-
12
根据它的说明创建打开KeychainAccess 创建 Certificate Signing Request。
-
13
填写“User Email Address”和“Common Name” 后选择 Saved to disk 进行保存 。
-
14
继续返回Apple developer 网站点击 Continue ,上传刚刚生成的 .certSigningRequest 文件生成 APNs Push Certificate。
下载并双击打开证书,证书打开时会启动“钥匙串访问”工具。
在“钥匙串访问”中你的证书会显示在“我的证书”中,注意选择“My Certificates” 和"login"
-
15
导出 .p12 证书文件
注意要选“login”和“My Certificates” 导出证书时要选中证书文件,不要展开private key。
-
16
将文件保存为Personal Information Exchange (.p12)格式。
-
17
将文件保存为Personal Information Exchange (.p12)格式。
上传证书
在 JPush 管理 Portal 上,针对某应用程序,上传上面步骤得到 .p12 证书文件。这是 iOS SDK 能够接收到 JPush 推送消息的必要步骤。
Provisioning Profile的创建
假设创建了一个App ID:cn.jpush.examlpe,并为此App ID配置开发环境的Push Notifications:
-
18
创建该App ID的推送证书,如下图:
-
19
创建App ID、APN证书和p12证书的导出的具体步骤请看 :iOS 证书 设置指南
点击下图按钮开始创建Provisioning Profile:
-
20
选择此Provisioning Profile的环境后点击[Continue]:
-
21
选择要创建Provisioning Profile的App ID后点击[Continue]:
-
22
选择所属的开发者证书,(这里创建了多个开发者证书,建议只创建一个,方便管理)为了方便,选择了[Select All],再点击[Continue]进入下一步:
-
23
为该Provisioning Profile选择将要安装的设备(一般选择[Select All]),点击[Continue]:
-
24
给该Provisioning Profile填写Profile Name,点击[generate]完成创建。
-
25
点击[DownLoad]下载Provisioning Profile:
-
26
双击下载下来的Provisioning Profile,添加到xcode。
XCode的证书配置教程
参照iOS SDK 集成指南集成JPush SDK 和上传了推送用到的p12证书后在编译运行前需要先配置一下证书,步骤如下:
打开xxx-info.plist的Bundle identifier项把上传到JPush 控制台的bundle id填写进去:
-
点击项目,进入Build Setting 界面,向下滑动,去到Code Signing 配置证书:
-
iOS 7 Background Remote Notification
本次iOS 7在推送方面最大的变化就是允许,应用收到通知后在后台(background)状态下运行一段代码,可用于从服务器获取内容更新。功能使用场景:(多媒体)聊天,Email更新,基于通知的订阅内容同步等功能,提升了终端用户的体验。
Remote Notifications 与之前版本的对比可以参考下面两张 Apple 官方的图片便可一目了然。
-
如果只携带content-available: 1 不携带任何badge,sound 和消息内容等参数,则可以不打扰用户的情况下进行内容更新等操作即为“Silent Remote Notifications”。
-
客户端设置
开启Remote notifications
需要在Xcode 中修改应用的 Capabilities 开启Remote notifications,请参考下图:
-
修改通知处理函数
当注册了Backgroud Modes -> Remote notifications 后,notification 处理函数一律切换到下面函数,后台推送代码也在此函数中调用。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;
服务端推送设置
推送消息携带 content-available: 1 是Background 运行的必须参数,如果不携带此字段则与iOS7 之前版本的普通推送一样。
使用Web Portal 推送
在“可选设置内”选择对应的参数。
使用 API 推送
只需在Push API v3 的 ios 内附加content-available":true 字段即可
限制与注意
“Silent Remote Notifications”是在 Apple 的限制下有一定的频率控制,但具体频率不详。所以并不是所有的 “Silent Remote Notifications” 都能按照预期到达客户端触发函数。
“Background”下提供给应用的运行时间窗是有限制的,如果需要下载较大的文件请参考 Apple 的 NSURLSession 的介绍。
“Background Remote Notification” 的前提是要求客户端处于Background 或 Suspended 状态,如果用户通过 App Switcher 将应用从后台 Kill 掉应用将不会唤醒应用处理 background 代码。
更详细的说明资料请查阅 Apple 官方的 iOS 开发文档。
OS 8 UIUserNotificationSettings
支持版本
v1.8.0 版本开始。
本次iOS 8在推送方面最大的变化就是修改了推送的注册接口,在原本的推送type的基础上,增加了一个categories参数,这个参数的目的是用来注册一组和通知关联起来的button的事件。
这个categories由一系列的 UIUserNotificationCategory组成。每个UIUserNotificationCategory对象包含你的app用来响应本地或者远程通知的信息。每一个对象的title作为通知上每一个button的title展示给用户。当用户点击了某一个button,系统将会调用应用内的回调函数application:handleActionWithIdentifier:forRemoteNotification:completionHandler:或者application:handleActionWithIdentifier:forLocalNotification:completionHandler:。
客户端设置
使用UIUserNotificationCategory
-
客户端设置
使用UIUserNotificationCategory
服务端设置
服务端payload格式:aps增加category字段,当该字段与客户端UIMutableUserNotificationCategory的identifier匹配时,触发设定的action和button显示。
payload example:{"aps":{"alert":"example", "sound":"default", "badge": 1, "category":"identifier"}}
-
OS 8 UILocalNotification
本次iOS 8 UILocalNotification增加了三个参数: region、regionTriggersOnce、category。
region: 用于控制当用户进入或者离开某一个地理位置时候,触发通知。使用此功能,用户需要拥有CoreLocation的"when-in-use"权限。
regionTriggersOnce(BOOL):当为YES时,通知只会触发一次,当为NO时,通知将会在每一次进入或者离开时都触发。
category:如果localNotification通过+[UIUserNotificationSettings settingsForUserNotificationTypes:userNotificationActionSettings:]注册了,通过该category可以获取该通知的注册category.
客户端设置
使用UILocalNotification