【问题标题】:Android: Delay in Receiving message in FCM(onMessageReceived)Android:FCM中接收消息的延迟(onMessageReceived)
【发布时间】:2016-08-02 16:12:15
【问题描述】:

在测试应用中,我实现了 FCM 以使用

发送通知消息

https://github.com/firebase/quickstart-android/tree/master/messaging

为了测试,我使用通知下的“新消息”从 Firebase 控制台发送了消息(8:42 PM)。

但在我的模拟器中,我在 9:06 PM

收到了消息

如果有什么办法可以减少延迟,请告诉我。

谢谢。

【问题讨论】:

  • 这里的发送日期表示FCM将消息发送到您的设备。假设 FCM 和您的设备/模拟器之间没有瓶颈,您应该会在几秒钟内收到消息。在你的情况下看起来花了将近一个小时。如果您能够始终如一地重现这一点,那么我会向 Firebase 支持提交一份支持票,提供一些有关您的情况的更多信息。 firebase.google.com/support
  • @ArthurThompson 即使我也遇到了这个问题,因为昨天我一直在尝试各种事情来在我的模拟器中接收通知,但直到现在,(几分钟前)我收到了昨天的所有通知我在 Emu 和平板电脑上都用我的平板电脑尝试过,我的模拟器一直都有网络连接..
  • 这看起来是一个网络问题,如果您完全接收到消息,那么您已经完成了足够多的工作并且应该尽快收到它们,除非网络条件阻止它。您是否能够在同一设备/模拟器上在更合理的时间范围内接收其他通知?
  • 一个问题:模拟器干净启动,还是从保存状态唤醒?如果是第二个,通知会有很大的延迟,这似乎是模拟器问题。

标签: android firebase-cloud-messaging


【解决方案1】:

这可能是由 Firebase 云消息传递中的不切实际的心跳间隔引起的。

FCM 的工作原理是维持从 Android 设备到 Google 服务器的空闲套接字连接。这很棒,因为它几乎不消耗电池电量(与轮询相反),并且它允许在消息到达时立即唤醒设备。

为确保连接保持活动状态,Android 将在移动连接上每 28 分钟发送一次检测信号,在 WiFi 上每 15 分钟发送一次检测信号。如果心跳失败,则连接已终止,FCM 将重新建立它并尝试检索任何未决的推送通知。心跳间隔越高,消耗的电池越少,设备从睡眠中唤醒的次数就越少。

但是,这是有代价的:心跳间隔越长,识别断开的套接字连接所需的时间就越长。在部署 FCM 之前,Google 尚未在现实​​生活中对这些间隔进行足够彻底的测试。这些间隔的问题是由网络路由器和移动运营商造成的,它们会在几分钟不活动后断开空闲套接字连接。

更多信息可以在我的博客上找到:

http://eladnava.com/google-cloud-messaging-extremely-unreliable/

作为一种解决方法,请考虑 Pushy (https://pushy.me),它是 GCM/FCM 的直接替代品,可大大提高通知速度和可靠性(完全披露 - 我创立了 Pushy)。

【讨论】:

  • 如果 android 是这种情况,那么当应用程序甚至不在后台时,像 WhatsApp 这样的应用程序如何立即执行此操作?
  • @helado 如今,WhatsApp 最有可能使用 FCM 高优先级消息(使用 android.priority: high 发送)来支持这种情况,同时如果它打开时也会尝试通过自己的套接字连接发送它设备。
【解决方案2】:

我最好的猜测是这与消息priority有关。

来自文档:

设置消息的优先级

在 Android 上为下游消息分配传递优先级有两种选择:正常优先级和高优先级。正常和高优先级消息的传递方式如下:

普通优先级。这是数据消息的默认优先级。正常优先级消息不会打开睡眠设备上的网络连接,并且它们的传递可能会延迟以节省电池。对于时间敏感度较低的消息,例如新电子邮件通知或要同步的其他数据,请选择正常递送优先级。

高优先级。这是通知消息的默认优先级。 FCM 尝试立即传递高优先级消息,允许 FCM 服务在可能的情况下唤醒睡眠设备并打开与您的应用服务器的网络连接。例如,具有即时消息、聊天或语音呼叫警报的应用程序通常需要打开网络连接并确保 FCM 将消息无延迟地传递到设备。如果消息时间紧迫且需要用户立即交互,请设置高优先级,但请注意,与正常优先级消息相比,将消息设置为高优先级更会消耗电池电量。

我不确定,但我相信当您向“所有 Android 设备”发送消息时使用normal 优先级,您似乎在上述问题中正在这样做。它也有可能被发送到一个 FCM 主题,即optimized for throughput rather than latency

因此,将优先级设置为 high,或发送到特定设备而不是主题,应该可以减少您看到的延迟。

还有;请注意,推送消息是基于尽力而为。无法保证消息将在给定时间传递,或者根本不传递。

【讨论】:

  • 今天我遇到了同样的问题,我可以保证即使High 优先级也一样。今天我在上午 10:00 发送了 FCM,优先级为High,我在下午 3:44 收到了它。我试过data标签以防万一,结果是一样的。电话也没有闲着。我每隔一小时使用 Chrome 和其他应用程序预热设备一段时间,以检查它需要多少时间。
【解决方案3】:

此问题跟踪器专门用于处理与 Android 快速入门相关的问题。从事此项目的专家无权访问任何诊断程序来帮助解决 FCM 问题。请联系支持。 https://firebase.google.com/support/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多