未调用 iOS 推送通知服务扩展 (didReceive)

Posted

技术标签:

【中文标题】未调用 iOS 推送通知服务扩展 (didReceive)【英文标题】:iOS Push notification service extension (didReceive) is not called 【发布时间】:2021-02-10 15:27:33 【问题描述】: 我已经在 xCode 中设置了推送通知服务扩展。 我已将目标部署版本设置为 13.0(应用程序也是 13.0) 扩展名的Info.plist 具有正确的NSExtensionPrincipalClass 为了测试,我正在运行扩展目标并选择应用程序 我正在运行 ios 14.2 的设备上测试所有内容 我尝试了以下有效负载:

      "gcm.message_id" : "XXXXX",
      "type" : "XXXXX",
      "url" : "XXXXX",
      "body" : "XXXX",
      "title" : "XXX",
      "google.c.a.e" : "XX",
      "aps" : 
        "mutable-content" : 1,
        "alert" : 
          "title" : "Test",
          "body" : "Test"
        ,
        "category" : "XXXX",
        "content-available" : 1
      ,
      "channel_id" : "XXXX"

我也尝试排除mutable-content,但仍然没有调用服务扩展。 我也尝试过像这样更简单的有效载荷:


"aps" : 
        "mutable-content" : 1,
        "alert" : 
          "title" : "Test",
          "body" : "Test"
        ,
        "category" : "XXXX",
        "content-available" : 1
      

无论有没有mutable-content,这里也没有运气

作为测试的结果,我总是可以看到推送通知,但是扩展 `didReceive` 方法中的断点没有被触发。有效载荷也不会以任何方式修改。

重新启动设备、重新启动 macbook 和删除派生数据等方法也不起作用

【问题讨论】:

相关问题:***.com/q/66259849/7698092 【参考方案1】:

我设法在 app target -> Build Phases -> Embed App Extensions

中解决了这个购买取消选择 Copy only when installing 的问题

【讨论】:

任何解释,为什么你必须这样做才能让它工作?由于您的回答,我能够解决这个问题。谢谢 这可能是因为“仅在安装时复制”不会在您使用 xcode 构建应用程序时运行应用程序扩展,而仅在应用程序安装时运行。通过取消选择此标志,应用程序扩展始终运行。

以上是关于未调用 iOS 推送通知服务扩展 (didReceive)的主要内容,如果未能解决你的问题,请参考以下文章

调试时未调用推送通知扩展

使用 Flutter App 在 iOS 中未触发 UNUserNotificationCenterDelegate didReceive

如何在应用程序未运行并点击推送通知时调试远程推送通知?

应用程序未运行时未调用本地通知的 UNUserNotificationCenterDelegate didReceive 响应

WatchOS 动态通知不适用于 Xcode 11.1 及更高版本 - 未调用 didReceive

当应用程序处于推送通知中时,不会调用 didrecieveremotenotfication?