【发布时间】:2014-05-19 08:04:31
【问题描述】:
我已经实现了一个简单的 GCM 客户端和服务器。客户端使用current GCM client APIs(不是deprecated helper library)。服务器(C# & .NET)遵循相应的server guidelines(使用HTTP)。我的服务器在我公司域内的机器上运行,因此我将客户端设备连接到公司网络内的 Wi-Fi 接入点,但可以访问 Internet。
简而言之,我的问题是在 4.3+ 手机上可以正常接收通知,但在连接到公司 Wi-Fi 网络时在 4.1.2 手机上永远不会收到通知。如果我将 4.1.2 设备连接到我们的公共访客 Wi-Fi 网络,则会按预期接收 GCM 消息,但是应用程序无法连接到公司服务器。
我看到一些迹象表明,当公司网络的防火墙保护过度(例如here)时,GCM 可能会失败。但如果只是防火墙的问题,4.3+的设备肯定也不会收到任何消息吗?
一些额外的细节
我的测试手机如下:
- 华硕 Nexus 7 (4.4.2)
- 三星 Galaxy S4 (4.4.2)
- HTC One (4.3)
- 三星 Galaxy S3 (4.1.2)
- 摩托罗拉 Razr HD (4.1.2)
服务器已收到来自所有五台设备的有效注册 ID。在一个 15 秒的计时器上,它会向所有五个注册 IDS 发送一条消息。响应始终显示发送了 5 条消息,没有错误,也没有更改注册 ID。但是,在上面列出的前三个设备上总是收到,而在后两个设备上从不(运行 4.1.2)。当我调试它们时,广播接收器根本没有被调用。
我还验证了所有五台设备:
- 拥有 Google Play Services 4.3.25
- 没有 SIM 卡,因此没有蜂窝数据,并且在同一个 WiFi 网络上
- 有正确的日期和时间
- 使用同一个 Gmail 测试帐户注册
- 正在运行我的客户端应用程序的相同版本
- 为其 Google 帐户启用所有同步设置
【问题讨论】:
-
您能否在问题中发布您的清单?
-
@Eran 当然,我已经添加了。
-
刚刚添加了 build.gradle 以防万一有用。
-
好吧,我觉得清单中的 GCM 相关定义没问题,所以我不能帮你。
-
尝试在一个不工作的设备上安装Firebind,并用它来检查端口5228,5229,5230是否打开。
标签: android networking google-cloud-messaging