首页 > 解决方案 > 如何诊断 GCM 结果为“成功”但未到达设备的通知

问题描述

这实际上是我发布的另一个问题的延续,除了现在我使用 Azure 的推送通知遥测并且 Google 停止了 Play Console 中的 FCM 诊断。

我收到用户报告说他们没有收到通知。但 Azure 遥测显示如下结果,即使是这些通知:

"GcmOutcomeCounts": {
    "Outcome": {
        "Name": "Success",
        "Count": "1"
    }
}

Crashlytics 没有显示崩溃,所以我想出的唯一方法是调用日志记录 API 以查看它在哪里失败或停止工作,但在这种情况下它甚至永远不会到达应用程序。

必须有一种方法来确定通知失败的确切位置和原因。它是什么?

标签: androidazurepush-notificationfirebase-cloud-messaging

解决方案


必须有一种方法来确定通知失败的确切位置和原因。它是什么?

这是我的 2 美分。通常,通知可能存在许多故障点。您的目标是找出问题所在。下面是FCM主页上的图表:

潜在故障点:

  1. 当应用程序将注册令牌发送到您的服务器时。
  2. 处理 FCM 注册令牌的更新。

    • 如果发送注册令牌时出错,您可以将自定义非致命异常发送到 Crashlytics。由于您似乎已经拥有令牌,因此我认为这不是问题。但是在 某些情况下,令牌可能会更改,因此只需仔细检查您是否正在实施onNewToken()并将新的注册令牌发送到服务器,以防它发生更改。
  3. 从您的服务器向 FCM 发送通知时。

  4. 从 FCM 发送到用户设备时。

    • 要确认从您的服务器 -> FCM -> 用户设备发送通知时是否没有问题,您可以尝试从 FCM 获取交货收据,如下所述:接收交货收据。它说:

      对于 Android 和 Chrome 客户端应用程序,当设备确认收到 FCM 发送的消息时,您可以获得送达回执(从 FCM 发送到您的应用服务器)。

      要启用此功能,您的应用服务器发送到 FCM 的消息必须包含字段delivery_receipt_requested。当此字段设置为 true 时,FCM 会在设备确认收到特定消息时发送送达回执。

    • 此外,在有 GCM 的日子里,我有时会看到用户网络上的防火墙出现问题。可能存在防火墙阻止通知的问题。谷歌 GCM 推送通知服务器的 IP 范围?如果是这种情况,请尝试打开潜在的端口列表或尝试在运营商数据网络上进行测试。既然您提到您必须在应用程序的各个点包含日志,但它永远不会到达。查看以上几点可以是下一步。

  5. 在您的应用程序中处理通知/在通知抽屉中显示通知。

希望这有助于调试您的问题。


推荐阅读