我已将应用程序服务器配置为通过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将所有待处理的消息传递给设备”当应用程序上线时,有没有办法在Android客户端和FCM之间手动建立连接,所以当我需要它时它总是打开?
答案 0 :(得分:0)
总而言之,将手机连接到WIFI网络就可以了。如果它是另一部电话的系留热点并不重要。
我还没有找到为什么Firebase Messaging Service会以这种方式运行,但是一旦完成手头的任务就会这样做