android - 如何诊断 GCM 结果为“成功”但未到达设备的通知
问题描述
这实际上是我发布的另一个问题的延续,除了现在我使用 Azure 的推送通知遥测并且 Google 停止了 Play Console 中的 FCM 诊断。
我收到用户报告说他们没有收到通知。但 Azure 遥测显示如下结果,即使是这些通知:
"GcmOutcomeCounts": {
"Outcome": {
"Name": "Success",
"Count": "1"
}
}
Crashlytics 没有显示崩溃,所以我想出的唯一方法是调用日志记录 API 以查看它在哪里失败或停止工作,但在这种情况下它甚至永远不会到达应用程序。
必须有一种方法来确定通知失败的确切位置和原因。它是什么?
解决方案
必须有一种方法来确定通知失败的确切位置和原因。它是什么?
这是我的 2 美分。通常,通知可能存在许多故障点。您的目标是找出问题所在。下面是FCM主页上的图表:
潜在故障点:
- 当应用程序将注册令牌发送到您的服务器时。
处理 FCM 注册令牌的更新。
- 如果发送注册令牌时出错,您可以将自定义非致命异常发送到 Crashlytics。由于您似乎已经拥有令牌,因此我认为这不是问题。但是在
某些情况下,令牌可能会更改,因此只需仔细检查您是否正在实施
onNewToken()
并将新的注册令牌发送到服务器,以防它发生更改。
- 如果发送注册令牌时出错,您可以将自定义非致命异常发送到 Crashlytics。由于您似乎已经拥有令牌,因此我认为这不是问题。但是在
某些情况下,令牌可能会更改,因此只需仔细检查您是否正在实施
从您的服务器向 FCM 发送通知时。
从 FCM 发送到用户设备时。
要确认从您的服务器 -> FCM -> 用户设备发送通知时是否没有问题,您可以尝试从 FCM 获取交货收据,如下所述:接收交货收据。它说:
对于 Android 和 Chrome 客户端应用程序,当设备确认收到 FCM 发送的消息时,您可以获得送达回执(从 FCM 发送到您的应用服务器)。
要启用此功能,您的应用服务器发送到 FCM 的消息必须包含字段delivery_receipt_requested。当此字段设置为 true 时,FCM 会在设备确认收到特定消息时发送送达回执。
此外,在有 GCM 的日子里,我有时会看到用户网络上的防火墙出现问题。可能存在防火墙阻止通知的问题。谷歌 GCM 推送通知服务器的 IP 范围?如果是这种情况,请尝试打开潜在的端口列表或尝试在运营商数据网络上进行测试。既然您提到您必须在应用程序的各个点包含日志,但它永远不会到达。查看以上几点可以是下一步。
在您的应用程序中处理通知/在通知抽屉中显示通知。
希望这有助于调试您的问题。
推荐阅读
- reactjs - 如何使用从另一个文件导入的功能组件在 React Native 中显示模态
- pandas - 使用 yum 在 rhel 上安装 pandas
- selenium-webdriver - 从方法中删除 browser.sleep()
- reactjs - 我们可以在哪里放置 `Office.onReady()` 以确保 Office.js 每次都能完全加载
- python - 如何解决 Python 文件中“找不到指定文件”的问题?
- javascript - 在 react-native 模块中使用 DeviceEventEmitter.addListener
- linux - 从 Mint 到 RPi 的 SSH 文件传输不是双向的
- python - python mysql连接器,如何创建用户定义的数据库
- jquery - 如何让我的按钮一次显示一项?
- java - 如何以编程方式计算 DBF 记录?