Firebase云消息,即使应用程序位于前台,消息也需要时间

时间:2016-08-14 16:47:06

标签: android xmpp firebase-cloud-messaging

我已将应用程序服务器配置为通过XMPP与FCM通信。我维护一个始终在线的XMPP连接。配置看起来很好,我可以成功地将XMPP消息发送到FCM(我是根据我的服务器收到的ACK消息说的。)

在Android客户端,我实现了FirebaseMessagingService来接收消息。我面临的问题是,当应用程序处于前台时,消息不会立即收到,它实际上非常不一致,因为它有时工作正常,但有时消息捆绑起来并在一段时间后立即收到。我的用例要求消息在应用程序位于前台时立即到达客户端。如果我错过了什么,你能告诉我吗?我发送的XMPP消息和响应如下。

已发送XMPP消息:

<message id="">
    <gcm xmlns="google:mobile:data">
        {"to":"<registration-id>","priority" : "high","message_id":"m-1471190678140"}
    </gcm> 
</message>

收到确认消息:

<message>
    <gcm xmlns="google:mobile:data">
        {"message_type":"ack","from":"<registration-id>","message_id":"m-1471190678126"}
    </gcm> 
</message>

修改
在进一步调查后,我注意到应用程序闲置几分钟后消息停止,并在应用程序变为活动状态约一分钟后收到,但是,如果我切换互联网(Wi-Fi),它的开始按预期再次运行看起来android客户端和FCM之间的连接超时了。我找到了文档here,其中声明“当建立连接时,FCM将所有待处理的消息传递给设备”

1 个答案:

答案 0 :(得分:0)

我今天遇到了同样的问题。经过这么多的挖掘,我遇到了Arthur上面的回应,然后我突然意识到我从WIFI切换到手机的移动互联网后开始遇到问题。然后我切换回WIFI,消息传递立即发生。

总而言之,将手机连接到WIFI网络就可以了。如果它是另一部电话的系留热点并不重要。

我还没有找到为什么Firebase Messaging Service会以这种方式运行,但是一旦完成手头的任务就会这样做