当前位置: 首页 > 知识库问答 >
问题:

Android:FCM中接收消息的延迟(onMessageRec的)

平学
2023-03-14

测试应用程序中,我使用以下命令实现了用于发送通知消息的FCM

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

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

但在我的模拟器中,我在晚上9:06收到了消息

请让我知道是否有什么可以减少延误。

谢谢你。

共有3个答案

沈琨
2023-03-14

此问题跟踪器专门介绍与 Android 快速入门相关的问题。从事此项目的大师无法访问任何诊断来帮助解决 FCM 问题。请联系支持人员。https://firebase.google.com/support/

锺离昂然
2023-03-14

我最好的猜测是,这与消息优先级有关。

来自文档:

设置邮件的优先级

在Android上,您有两个选项来为下游消息分配传送优先级:普通优先级和高优先级。普通邮件和高优先级邮件的传递方式如下:

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

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

我不确定,但我相信,当你向“所有Android设备”发送消息时,会使用正常优先级,这似乎是你在回答上面的问题。也可能是发送到FCM主题,该主题针对吞吐量而不是延迟进行了优化

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

也;请注意,推送消息基于最大努力。不能保证消息将在给定时间之前传递,或者根本不保证。

步建茗
2023-03-14

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

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

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

然而,这需要付出巨大的代价:心跳间隔越长,识别断开的套接字连接所需的时间就越长。谷歌在部署FCM之前,没有在现实生活中足够彻底地测试这些间隔。这些间隔的问题是由网络路由器和移动运营商造成的,它们在几分钟不活动后断开空闲的套接字连接。

我的博客上提供了更多信息:

http://eladnava.com/html" target="_blank">google-cloud-messaging-extremely-unreliable/

作为解决方法,请考虑Pushy(https://pushy.me),是GCM/FCM的替代品,大大提高了通知速度

 类似资料:
  • 如何使用Apache Kafka生成/使用延迟消息?标准的Kafka(和Java的kafka-client)功能似乎没有这个特性。我知道我自己可以用标准的等待/通知机制来实现它,但是它看起来不是很可靠,所以任何建议和好的实践都很感谢。 找到相关问题,但没有帮助。正如我所看到的:Kafka基于从文件系统的顺序读取,并且只能用于直接读取主题,保持消息的顺序。我说的对吗?

  • 主要内容:1 load加载延迟消息数据,1.1 parseDelayLevel解析延迟等级,2 start启动调度消息服务,3 DeliverDelayedMessageTimerTask投递延迟消息任务,3.1 executeOnTimeup执行延迟消息投递,3.2 scheduleNextTimerTask下一个调度任务,3.3 correctDeliverTimestamp校验投递时间,3.4 messageTimeup恢复正常消息,,基于RocketMQ release-4.9.3,深入

  • 1.场景描述:设备向Netty服务器发送数据(大约##20ms间隔##),Netty服务器向客户端转发消息##立即##(IOS或Android)。2.关联业务代码CTX.WriteAndFlush(msg) 3.发出网络服务器可以及时接收设备数据,网络服务器也可以及时将数据写入套接字缓冲区。但Netty客户端收到消息时延!!!(如5s时延) 4.服务器带宽配置入站100M/bps位/秒。出站5M/

  • 使用启用会话(消息排序)的Azure ServiceBus队列,我的会话需要持续几分钟到几个小时。 为此,我将QueueClient配置如下: 并按如下方式开始接收消息: 在几次(1到6次之间)成功(几乎是瞬时的)消息接收回调之后——无论是对于新会话还是现有会话,接收处理程序都会停止触发。使用,我可以看到位于servicebus队列上的消息。有趣的是,它们都有一个DeliveryCount=1。过

  • 我正在使用Kafka0.8.0并尝试实现下面提到的场景。 JCA API(充当生产者并将数据发送到)------>消费者------>HBase 当我使用JCA客户端获取数据时,我会立即将每个消息发送给消费者。例如,一旦生产者发送第1号消息,我就想从消费者那里获取相同的消息并将其“放入”HBase。但是我的消费者在一些随机的n条消息之后开始获取消息。我想让生产者和消费者同步,这样他们两个开始一起工