【问题标题】:How to debug background notifications in iOS?如何在 iOS 中调试后台通知?
【发布时间】:2020-02-18 10:17:09
【问题描述】:

我正在尝试在 iOS 上调试后台推送通知,更具体地说,是在应处理通知以使用自定义逻辑配置国际化内容的代码中设置断点。

我在 AppDelegate 的 userNotificationCenter(_:willPresent:withCompletionHandler:)userNotificationCenter(_:didReceive:withCompletionHandler:) 中设置了断点。

我还创建了一个通知服务扩展,并在其didReceive(_:withContentHandler:) 中添加了一个断点,因为我想改变通知的内容。

当我发送以下有效负载并且我的应用程序位于前台时,userNotificationCenter(_:willPresent:withCompletionHandler:) 中的断点被命中并且一切正常:

{
  "aps" : {
    "badge" : 1012,
    "category" : "GENERIC_MESSAGE",
    "mutable-content" : 1
  },
  "translations" : [
    {
      "LanguageCode" : "fr",
      "Title" : "Aimant détaché",
      "Body" : "L'aimant du capteur 002F51AB, associé à l'outil HT-1225 Hitachi Tas, a été détaché."
    },
    {
      "LanguageCode" : "en",
      "Body" : "The magnet of the tag 002F51AB, link to tool HT-1225 Hitachi Tas, was detached.",
      "Title" : "Magnet detached"
    },
    {
      "LanguageCode" : "nl",
      "Body" : "De magneet van de tag 002F51AB, gelinkt aan het gereedschap HT-1225 Hitachi Tas, is losgekoppeld.",
      "Title" : "Magneet losgekoppeld"
    }
  ],
  "messageId" : "90073ebb-ce51-ea11-a94c-000d3a213771"
}

但是如果应用程序在后台并且我发送完全相同的通知,我不会在userNotificationCenter(_:didReceive:withCompletionHandler:) 上得到点击。当我运行通知服务扩展时,同样的事情,我没有在didReceive(_:withContentHandler:) 中获得成功

我是不是忘记了什么?是因为我的通知负载没有 aps 警报字段吗?

【问题讨论】:

  • 如果您的应用在后台,则通知通常会发送给用户,而不是您的应用。这里的例外是静默推送通知,它将在后台恢复(或重新启动)您的应用程序,以便它可以处理通知。
  • 那么我应该怎么做才能让这个推送通知始终发送到我的应用程序?如何使其成为静默推送通知?
  • 作为一般建议,我发现Unified Logging 在我没有连接到调试器但想在我的 macOS 控制台上查看日志设备事件时对调试应用程序非常有用。对于推送通知、后台会话等,它确实用于在未连接到调试器时进行诊断(因为这会改变应用程序的生命周期)。请参阅 WWDC 2016 视频Unified Logging and Activity Tracing

标签: ios swift push-notification apple-push-notifications


【解决方案1】:

我想通了:当我在推送通知中添加警报字段时,即使使用虚拟字符串,它也会被转发到我的通知服务。否则不会。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    相关资源
    最近更新 更多