GCM XMPP交货收据发送其他机器并且GCM在收到其确认时关闭连接

时间:2015-09-05 19:34:36

标签: android notifications xmpp google-cloud-messaging

我在两台计算机上运行了一个应用程序,每台计算机都通过TCP(XMPP)通过GCM建立了连接。

我遇到的一个问题是通过一个带有'delivery_receipt_requested'标志的连接发送xmpp消息,并不一定意味着在同一连接上接收该消息的收据。这显然是非常有问题的,因为连接可能在不同的进程上建立,有时在不同的机器上。

另一个问题是机器收到delivery_receipt(不发送原始邮件)尝试向GCM发送delivery receipt ack,GCM关闭此连接。

这看起来有点奇怪吗? GCM在其他计算机上发送送达回执,当它从该计算机收到delivery receipt ack时,它会关闭连接,因为邮件不是从该计算机发送的?

2 个答案:

答案 0 :(得分:0)

我找到了连接关闭的原因。我有很多连接,我的应用程序通过连接池中的任何连接将deliverty_receipt_ack发送到GCM。经过一段时间后谷歌发出XMPP错误,“收到的结果超出预期”,然后连接关闭。

这种通信模式导致连接关闭问题,正确的方法是使用连接收到的deliveryrty_receipt以发送delivery_receipt_ack,换句话说使用相同的连接发送delivery_receipt_ack以响应delivery_receipt解决问题。

答案 1 :(得分:0)

是否必须发送确认收货收据?到目前为止我没有发送任何问题,除了电话连接不良时的巨大延迟,例如来自国外。