gpt4 book ai didi

android - Google Cloud Messaging - 有时直到网络状态发生变化才会收到消息

转载 作者:IT王子 更新时间:2023-10-29 00:04:03 30 4
gpt4 key购买 nike

在做一个与 GCM 集成的小项目时,我偶然发现了一个奇怪的问题。

有时当我开始查看日志以查看是否收到消息时,直到我更改网络状态(即最初在 WiFi 上,如果我关闭 WiFi 并移动到移动数据,则消息似乎不会通过,消息到达很好)。更改网络状态后,消息开始正常到达,一旦我将网络状态更改回之前的状态(在本例中为 WiFi),消息将继续接收。

项目本身包括启动时启动的能力(启动时启动 GCMBaseIntentService),它再次完美运行,我确信应用程序/服务正在运行,因为我在此问题时手动启动了应用程序发生(它还会检查服务是否正在运行,如果不是,它会运行它并检查它是否已注册)。

有没有其他人遇到过这个问题,或者有任何关于我如何解决这个问题的指示?在未收到消息的时间和收到消息的时间(更改网络状态之后)之间,我在日志中没有看到任何帮助。我浏览了 GCM 文档,没有看到任何提及由于超时(在设备本身上)或任何可能影响此的配置选项而未收到消息的内容。

感谢任何帮助 - 如果需要,我可以提供源代码,尽管它几乎不会偏离 android-sdk 中提供的演示应用程序。

最佳答案

我也注意到了这一点。虽然我还没有深入研究实际的代码,但这是我对为什么会发生这种情况的理解。

GCM(以及大多数推送消息服务)的工作原理是为 Google 的推送通知服务器保持一个长期有效的套接字。通过在电话和服务器之间发送“心跳”消息,套接字保持打开状态。

偶尔,网络状态可能会改变,这个socket会坏掉(因为设备的IP地址改变了,比如从3g变成wifi)。如果消息在套接字重新建立之前进来,那么设备将不会立即得到消息。

仅当手机注意到套接字损坏时才会重新连接,而这只发生在它尝试发送心跳消息时。

再说一遍,这只是我对它如何工作以及为什么会发生的基本理解,我可能是错的。

关于android - Google Cloud Messaging - 有时直到网络状态发生变化才会收到消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13835676/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com