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

扩展阅读

相关推荐
neter.asia12 分钟前
vue中如何关闭eslint检测?
前端·javascript·vue.js
~甲壳虫13 分钟前
说说webpack中常见的Plugin?解决了什么问题?
前端·webpack·node.js
光影少年32 分钟前
vue2与vue3的全局通信插件,如何实现自定义的插件
前端·javascript·vue.js
As977_33 分钟前
前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)
前端·css·学习
susu108301891135 分钟前
vue3 css的样式如果background没有,如何覆盖有background的样式
前端·css
Ocean☾36 分钟前
前端基础-html-注册界面
前端·算法·html
Dragon Wu39 分钟前
前端 Canvas 绘画 总结
前端
CodeToGym43 分钟前
Webpack性能优化指南:从构建到部署的全方位策略
前端·webpack·性能优化
~甲壳虫44 分钟前
说说webpack中常见的Loader?解决了什么问题?
前端·webpack·node.js
~甲壳虫1 小时前
说说webpack proxy工作原理?为什么能解决跨域
前端·webpack·node.js