Google Cloud Messaging无法在公司网络上使用4.1.2设备

时间:2014-05-19 08:04:32

标签: android networking google-cloud-messaging

我已经实现了一个简单的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消息,但该应用无法连接到公司服务器。

我已经看到一些迹象表明,当公司网络具有过度保护的防火墙时,GCM可能会失败(例如here)。但如果它只是一个防火墙问题,那么4.3 +设备肯定不会收到任何消息吗?

一些其他细节

我的测试手机如下:

  • 华硕Nexus 7(4.4.2)
  • 三星Galaxy S4(4.4.2)
  • HTC One(4.3)
  • 三星Galaxy S3(4.1.2)
  • Motorola Razr HD(4.1.2)

服务器已从所有五个设备收到有效的注册ID。在一个15秒的计时器上,它发出一条发往所有五个注册IDS的消息。响应始终显示发送了5条消息,没有错误,也没有更改注册ID。但是,上面列出的前三个设备始终,最后两个从不(运行4.1.2)。当我调试它们时,广播接收器根本没有被调用。

我还验证了所有五种设备:

  • 拥有Google Play服务4.3.25
  • 没有SIM,因此没有蜂窝数据,并且在同一个WiFi网络上
  • 拥有正确的日期&时间
  • 已在相同的Gmail测试帐户中注册
  • 正在运行相同版本的客户端应用
  • 为其Google帐户启用了所有同步设置

2 个答案:

答案 0 :(得分:13)

我终于弄明白了问题所在。公司防火墙阻止5228的本机GCM端口上的流量。(5229和5230是also mentioned with relation to GCM但我们根本没有看到任何尝试在这些端口上的流量。)这在其他地方有很好的记录(只是谷歌< em> GCM端口5228 )。

我无法在任何地方找到清楚记录的内容,但我们已经从我们的服务器日志和手机上运行Connection Tracker中发现,Android的较新版本是否回归到使用端口443(标准HTTPS端口)大多数防火墙默认允许流量通过。这就是我们运行较新Android版本的设备即使在防火墙后面工作的方式。我不确切知道Android版本引入了哪个端口443后备,但它介于4.1.2(不工作)和4.3(工作)之间。

答案 1 :(得分:0)

我没有看到上面的清单条目,但几天前我遇到了确切的问题,清单必须与 C2D_MESSAGE 权限包匹配。 即

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.foo.bar"
    android:versionCode="8"
    android:versionName="3.1">

...

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<permission android:name="com.foo.bar.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.foo.bar.permission.C2D_MESSAGE" />

在我的情况下,声明的包不匹配,以便为以前版本的应用程序提供升级路径。