前言
阅读此文后,希望读者能够达成以下目标
- 模拟器上 能通过模拟 Push 配置测试 Push 链接是否能正常跳转
- 真机上 能通过 DeviceToken 模拟系统推送
- 真机上 能够调试 Notification Service Extension
模拟器模拟 Push
- 将要推送的内容保存到一个名为 apns 后缀的文件
- 将该文件 拖拽 到模拟器中,模拟器将触发基于这个文件配置的推送事件
下面基于一个【打开 Airbnb 房源详情页的 Push】进行演示
- 准备一个后缀为 apns 文本文件
这个推送配置和普通推送配置不一样的地方在于,会多出一个
Simulator Target Bundle
的属性,值类型为 String,设置为 App 对应的 Bundle ID 即可
下面是 demo 文件的内容
json
{
"Simulator Target Bundle": "com.airbnb.cn",
"aps": {
"alert": {
"title": "myTitle",
"body": "myMessage"
},
"badge": 1,
"sound": "default"
},
"deep_link": "https://www.airbnb.cn/rooms/42904760"
}
- 拖拽到已经安装到了airbnb App 的模拟器
- 点击推送测试唤起 App 并进行跳转
真机模拟 Push
- 下载一个推送工具,这里使用的是 Knuff
- 准备好推送证书的 P12,双击 P12 文件导入 Keychain
注意:
- 沙盒证书(Sandbox)只能用于开发、调试
- 生产证书(Production)同时能用于开发、调试、生产
导入后在钥匙串可以看到该证书
- 打开 Knuff App 进行配置,点击 Choose(序号1) 选择证书,这里选择刚才导入的证书
Topic 非空代表证书是可用的,第三张图片对应的证书就是异常的
- 选择好环境,真机 debug 选择 Sandbox,产线调试选择 Production
- 填写设备的的 Device Token 即可进行推送 (可以通过运行项目在系统回调通过断点获取)
- 填写推送的 Playload ,填写完成即可点击【Push】按钮进行推送测试
Knuff 默认Push
json
{
"aps": {
"alert": "Test",
"sound": "default",
"badge": 1
}
}
这个结构是iOS 10之前的结构,测试可以直接用 我们看看iOS 10 之后的结构
json
{
"aps": {
"alert": {
"title": "myTitle",
"body": "myMessage"
},
"badge": 1,
"sound": "default"
},
"deep_link": "https://www.airbnb.cn/rooms/42904760"
}
真机 Debug Notification Service Extension
默认的推送是不经过 Notification Service Extension(NSE) 的,要想通知经过 NSE,需要在通知的内容中携带 "mutable-content": 1
才能触发 NSE,下面是一个 Push Playload 示例
css
{
"aps": {
"mutable-content": 1,
"alert": {
"title": "myTitle",
"body": "myMessage"
},
"badge": 1,
"sound": "default"
},
"deep_link": "https://www.airbnb.cn/rooms/42904760"
}
具体步骤
- 选择 notification-service Target 将 NSE run 在 真机上
- 在 NSE 的方法上打上断点
- 给运行中的真机通过上面的 Knuff 工具发一条测试 Push
- App 收到消息后,将触发断点