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 收到消息后,将触发断点

扩展阅读

相关推荐
变与不变8065 小时前
jQuery怎么使用
前端·javascript
神膘护体小月半5 小时前
flex 布局的 order 属性
前端·css
paopaokaka_luck5 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
仰望.5 小时前
vue 表格组件 vxe-table 树表格懒加载支持拖拽排序的详细用法
前端·javascript·vue.js·vxe-table
前端 贾公子5 小时前
vite-plugin-uni-manifest 升级指南
前端
小码哥_常5 小时前
iPhone 用户传了张 HEIC,我的前端崩了
前端
小码哥_常5 小时前
你发的原图可能暴露你家地址——聊聊图片 EXIF 隐私
前端
java1234_小锋6 小时前
【技术专题】CSS3 网页技术 - CSS3 优先级
前端·css·css3
鸿蒙开发7 小时前
共享 Schema 与 SchemaFactory
前端·后端·harmonyos
屏什么录7 小时前
录屏超过两小时就卡顿崩盘?从参数调优到代码实现,一文彻底搞定长时间录屏
前端·音视频开发