【问题标题】:Android devices not receiving 5% of push sent with Firebase Cloud MessagingAndroid 设备未收到使用 Firebase 云消息传递发送的 5% 的推送
【发布时间】:2020-05-08 23:03:40
【问题描述】:

下图来自 Firebase 云消息传递 (FCM) 控制台,显示手机仅接收了大约 95% 的推送。这给我们带来了很多问题,因为我们正在创建一个 VoIP 应用程序并且需要立即接收推送。谁能解释为什么会发生这种情况以及如何使这个比率接近 100%?

一些重要说明:

  • 所有手机都是安卓手机
  • 所有手机在收到推送时或最多 2 分钟前都打开了我们的应用程序
  • 所有推送都是数据推送(即没有正文/标题),优先级高
  • 推送会在 10 秒后发送,以便按照 Android 文档对其进行优先排序
  • 我们在同一时期发送推送有大约 30 个错误(registration-token-not-registered 和内部错误),这与大约 500 个未发送推送相比微不足道

【问题讨论】:

    标签: android firebase push-notification firebase-cloud-messaging android-push-notification


    【解决方案1】:

    皮尔,

    据我了解,消息未送达的原因有很多。我认为如果不查看您的具体数据,任何人都很难给出结论性的答案。

    我建议您花一些时间阅读 Firebase 文档中的 Understanding message delivery。尽管我建议您阅读整篇文章,但您可能特别感兴趣的是 BigQuery data export 部分。这包括将您的消息数据导出到 BigQuery。 What data is exported to BigQuery? 部分介绍了导出到 BigQuery 的数据。我想您会对 event 字段感兴趣,该字段包含有关发生的事件类型的数据。这些事件类型包括:

    • MESSAGE_ACCEPTED:消息已被FCM服务器接收,请求有效;
    • MESSAGE_DELIVERED:消息已发送到设备上应用的 FCM SDK。默认情况下,不会传播此字段。要启用,请按照setDeliveryMetricsExportToBigQuery(boolean) 中提供的说明进行操作。
    • MISSING_REGISTRATIONS:由于缺少注册,请求被拒绝;
    • UNAUTHORIZED_REGISTRATION:邮件被拒绝,因为发件人无权发送到注册;
    • MESSAGE_RECEIVED_INTERNAL_ERROR:处理消息请求时出现未指定的错误;
    • MISMATCH_SENDER_ID:发送消息的请求被拒绝,因为发送消息的发件人 ID 与为端点声明的发件人 ID 不匹配;
    • QUOTA_EXCEEDED:由于配额不足,发送消息的请求被拒绝;
    • INVALID_REGISTRATION:由于注册无效,发送消息的请求被拒绝;
    • INVALID_PACKAGE_NAME:由于包名无效,发送消息的请求被拒绝;
    • INVALID_APNS_CREDENTIAL:由于 APNS 证书无效,发送消息的请求被拒绝;
    • INVALID_PARAMETERS:由于参数无效,发送消息的请求被拒绝;
    • PAYLOAD_TOO_LARGE:由于负载大于限制,发送消息的请求被拒绝;
    • AUTHENTICATION_ERROR:发送消息的请求因身份验证错误而被拒绝(检查用于发送消息的 API 密钥);
    • INVALID_TTL:由于 TTL 无效,发送消息的请求被拒绝。

    我希望这会有所帮助。祝你好运!

    【讨论】:

    • 谢谢。我试过这个。但是,我们得到的唯一事件是 MESSAGE_ACCEPTED 和 14 个 MESSAGE_RECEIVED_INTERNAL_ERROR 事件,它们与我在原始帖子中提到的错误相对应。我们将添加MESSAGE_DELIVERED 所需的代码,但到目前为止,这并没有让我们深入了解正在发生的事情。有什么建议吗?
    【解决方案2】:

    可能导致通知未送达的原因有多种。

    • 有些设备可能具有特定的电池优化功能,会停止显示通知。 为了解决这个问题,您可能会要求用户执行以下操作。 检查 Settings > Battery > Battery Optimization 或 Adaptive Battery > 找到您的应用并按 不优化

    • 该应用可能具有推送权限 已禁用 在设备设置中,用户可以开启开启关闭推送通知。从 Settings > Apps

    • 下的通知设置

    【讨论】:

      【解决方案3】:
      • 所有手机在收到推送时都打开了我们的应用程序 到 2 分钟前

      你怎么知道所有手机都打开而不是睡眠模式?你 100% 确定吗?

      • 所有推送都是优先级高的数据推送(即没有正文/标题)推送在 10 秒到期后发送,以按照 Android 文档对其进行优先排序

      我还使用数据 FCM 来协调设备之间的更新,在我的情况下,绝大多数消息在不到 1/2 秒的时间内收到,但有时我观察到它们延迟了大约 20 秒,然后收到了几条消息突然。

      如果你的 TimeToLive 时间只有 10 秒,它们就会丢失。

      Google 还声称 95% 的消息在不到 250 毫秒的时间内送达,但剩下的 5% 没有,这已经证明了这些消息的损失是合理的。

      【讨论】:

      • 谢谢。我会尝试增加生存时间!
      • 我们知道他们当时或 2 分钟前还在营业,因为我们只允许呼叫最近在线的用户。
      猜你喜欢
      • 2017-10-04
      • 1970-01-01
      • 2017-01-25
      • 2020-06-30
      • 2016-09-21
      • 2017-03-10
      相关资源
      最近更新 更多