Android 设备未收到 5% 的通过 Firebase 云消息传递发送的推送

Android devices not receiving 5% of push sent with Firebase Cloud Messaging

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

一些重要说明:

pir,

据我了解,邮件无法送达的原因有很多。我想不看你的具体数据,任何人都很难给出结论性的答案。

我建议您花一些时间阅读 Understanding message delivery on the Firebase Documentation. Although I recommend you read the entire article, of particular interst for you will probably be the BigQuery data export section. This covers exporting your message data to BigQuery. Data exported to BigQuery is covered in the What data is exported to BigQuery? 部分。我认为您会对 event 字段感兴趣,该字段包含有关发生的事件类型的数据。这些事件类型包括:

  • MESSAGE_ACCEPTED:FCM服务器收到消息,请求有效;[​​=37=]
  • 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 无效,发送消息的请求被拒绝。

希望对您有所帮助。祝你好运!

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

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

  • 该应用已禁用推送权限 在设备设置中,用户可以打开开启关闭推送通知。从 设置 > 应用程序

  • 下的通知设置
  • 所有手机在收到推送或更新时都打开了我们的应用程序 到 2 分钟前

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

  • 所有推送都是优先级高的数据推送(即没有body/title)推送发送时过期10秒以按照Android文档对它们进行优先级排序

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

在你的情况下,如果 TimeToLive 只有 10 秒,它们就会丢失。

另外 Google 声称 95% 的消息在不到 250 毫秒的时间内送达,但其余 5% 的消息没有送达,这已经证明这些消息的丢失是合理的。