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

扩展阅读

相关推荐
之歆6 小时前
Day01_ES6+ 专业指南:从基础到实战的现代JavaScript开发(下)
前端·javascript·es6
lichenyang4536 小时前
鸿蒙 MVVM 实战:从 Demo 到工程化,聊聊登录、状态管理与埋点系统设计
前端
IT_陈寒7 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
kyriewen7 小时前
AI生成代码快如闪电,但我修了三个小时——它到底帮了谁?
前端·javascript·ai编程
ayqy贾杰8 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox8 小时前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全
miaowmiaow8 小时前
PSD2Code 近期更新与深度解析:从设计稿到生产级代码的完整技术栈
前端·人工智能·ai编程
Hilaku8 小时前
多标签页并发请求导致 Token 刷新失败?只有 15行代码就能解决 !
前端·javascript·程序员
Nile8 小时前
解密Palantir系列一:4. Ontology 不是哲学
开发语言·前端·javascript
因_崔斯汀8 小时前
ECharts 区域地图可视化实战:以山东地图为例
前端