iOS 如何调试 Push 和 Notification Service Extension

前言

阅读此文后,希望读者能够达成以下目标

  • 模拟器上 能通过模拟 Push 配置测试 Push 链接是否能正常跳转
  • 真机上 能通过 DeviceToken 模拟系统推送
  • 真机上 能够调试 Notification Service Extension

模拟器模拟 Push

  1. 将要推送的内容保存到一个名为 apns 后缀的文件
  2. 将该文件 拖拽 到模拟器中,模拟器将触发基于这个文件配置的推送事件

下面基于一个【打开 Airbnb 房源详情页的 Push】进行演示

  1. 准备一个后缀为 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"
 }
  1. 拖拽到已经安装到了airbnb App 的模拟器
  2. 点击推送测试唤起 App 并进行跳转

真机模拟 Push

  1. 下载一个推送工具,这里使用的是 Knuff

下载地址:github.com/KnuffApp/Kn...

  1. 准备好推送证书的 P12,双击 P12 文件导入 Keychain

注意:

  1. 沙盒证书(Sandbox)只能用于开发、调试
  2. 生产证书(Production)同时能用于开发、调试、生产

导入后在钥匙串可以看到该证书

  1. 打开 Knuff App 进行配置,点击 Choose(序号1) 选择证书,这里选择刚才导入的证书

Topic 非空代表证书是可用的,第三张图片对应的证书就是异常的

  1. 选择好环境,真机 debug 选择 Sandbox,产线调试选择 Production
  2. 填写设备的的 Device Token 即可进行推送 (可以通过运行项目在系统回调通过断点获取)
  3. 填写推送的 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"
}

具体步骤

  1. 选择 notification-service Target 将 NSE run 在 真机上
  2. 在 NSE 的方法上打上断点
  3. 给运行中的真机通过上面的 Knuff 工具发一条测试 Push
  4. App 收到消息后,将触发断点

扩展阅读

相关推荐
brzhang3 小时前
我操,终于有人把 AI 大佬们 PUA 程序员的套路给讲明白了!
前端·后端·架构
止观止3 小时前
React虚拟DOM的进化之路
前端·react.js·前端框架·reactjs·react
goms3 小时前
前端项目集成lint-staged
前端·vue·lint-staged
谢尔登4 小时前
【React Natve】NetworkError 和 TouchableOpacity 组件
前端·react.js·前端框架
Lin Hsüeh-ch'in4 小时前
如何彻底禁用 Chrome 自动更新
前端·chrome
augenstern4166 小时前
HTML面试题
前端·html
张可6 小时前
一个KMP/CMP项目的组织结构和集成方式
android·前端·kotlin
G等你下课6 小时前
React 路由懒加载入门:提升首屏性能的第一步
前端·react.js·前端框架
蓝婷儿7 小时前
每天一个前端小知识 Day 27 - WebGL / WebGPU 数据可视化引擎设计与实践
前端·信息可视化·webgl
然我7 小时前
面试官:如何判断元素是否出现过?我:三种哈希方法任你选
前端·javascript·算法