【问题标题】:didReceiveRemoteNotification not called swiftdidReceiveRemoteNotification 未快速调用
【发布时间】:2016-10-25 10:08:59
【问题描述】:

为什么我没有收到后台未收到的通知???

这是我第一次使用推送通知。我阅读了文档并遵循Google Firebase Doc 的指导。我还实现了来自firebase/quickstart-ios 的代码。之后,我在 firebase 服务上创建了控制台,上传我的证书并成功发送了我在前台收到的消息,所以在后台也收到了。

但是当我更改从后端开发人员那里获取的控制台时,我的应用程序停止在后台模式下接收推送通知。

我在做什么:

  • 功能推送通知设置为“开启”
  • 在后台模式功能中启用“后台获取”、“远程通知”
  • content_available 设置为“1”
  • 发送消息优先级设置为“高”

如果之前运行良好,我不明白为什么应用停止在后台接收通知。

我也在 stackoverflow 上阅读了相同的问题,但没有找到我的问题的解决方案。

请帮忙解决这个问题!

更新:

实际上,我在后台没有收到任何通知,所以在前台。原因是当我从第一个控制台使用 GoogleService-Info.list 安装我的应用程序时,我接受了接收通知。所以,如果你改变了控制台,当然你改变了 GoogleService-Info.list,你应该再次接受接收通知!如果您不接受,didReceiveRemoteNotification 将不会调用!

【问题讨论】:

  • 这很奇怪。 content_available 不应设置为 1,使用 FCM 时应设置为 true。你能试试吗?如果还是不行。您可以发布有效负载的字符串结构吗?
  • 感谢您的重播!我将值更改为“true”,但仍未收到通知。所以这是前台的响应 %@ [AnyHashable("notification"): { badge = 1;身体=新15; e = 1;声音=默认; sound2 = 默认;标题=标题; } 你是这个意思吗?
  • 我指的是来自您的应用服务器的有效负载。 :)
  • 和上面的 sting 一样:{ 'content-available': '1', aps: { badge: 1, body: 'New15,' sound = enable, title = Title} }。我确信该属性是正确的。正如我所说,起初 console.firebase 一切正常,但第二次却不行。
  • 您是在使用 firebase 控制台进行测试,还是从 FCM 服务器发送推送通知? AFAIK 控制台有限制。最好使用 CURL 进行测试并调整有效负载以具有 notificationdata 有效负载,具体取决于您希望 FCM 如何处理通知

标签: ios push-notification apple-push-notifications swift3 firebase-cloud-messaging


【解决方案1】:

原因是当我从第一个控制台使用 GoogleService-Info.list 安装我的应用程序时,我接受了接收通知。所以,如果你改变了控制台,当然你改变了 GoogleService-Info.list,你应该再次接受接收通知!如果您不接受,didReceiveRemoteNotification 将不会调用!

附: 在我的变体中,我使用 swizzling 实现通知。如果您选择相同的方式,请确保在 Info.plist 文件中您有属性 FirebaseAppDelegateProxyEnabled 其值设置为 YES

【讨论】:

    【解决方案2】:

    您尚未添加任何代码,因此可能需要考虑一些事项:

    确保您已定义 fetchCompletionHandler,以便content-available: true 能够在收到推送通知时唤醒应用程序。

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                       fetchCompletionHandler completionHandler:{ @escaping (UIBackgroundFetchResult) -> Void)
    fetchCompletionHandler(UIBackgroundFetchResultNewData);
    }
    

    FCM 根据推送通知负载中包含的内容以不同方式处理通知。尝试将推送通知与仅数据负载和仅通知负载一起使用,试验一下,看看会发生什么。

    {
      "to":"push_token",
        "content_available": true,
        "priority": "high",
        "notification": {
          "title": "New Message",
          "message": "Bob sent you a message",
        },
        "data": {
          "title": "New Message",
          "message": "Bob sent you a message",
        }
    }
    

    使用此 CURL 命令而不是使用 firebase 控制台来测试发送推送通知

    curl -X POST --header "Authorization: key=APIKEY" --Header "Content-Type: application/json" https://fcm.googleapis.com/fcm/send -d "@push_payload.json"
    

    【讨论】:

    • 感谢您的回答!我检测到未调用 didReceiveRemoteNotification。为什么会这样?
    猜你喜欢
    • 1970-01-01
    • 2017-03-28
    • 2020-06-30
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多