简而言之,我的问题是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)
>摩托罗拉Razr HD(4.1.2)
服务器已从所有五个设备接收到有效的注册ID.在一个15秒的计时器上,它发出一条发往所有五个注册IDS的消息.响应始终显示已发送5条消息,没有错误且未更改注册ID.但是,它始终在上面列出的前三个设备上接收,而从不在最后两个设备上接收(运行4.1.2).当我调试它们时,根本没有调用广播接收器.
我还验证了所有五种设备:
>拥有Google Play服务4.3.25
>没有SIM,因此没有蜂窝数据,并且在同一个WiFi网络上
>拥有正确的日期&时间
>已在同一Gmail测试帐户中注册
>正在运行我的客户端应用程序的相同版本
>为其Google帐户启用所有同步设置
解决方法
我无法在任何地方找到清楚记录的内容,但是我们已经从我们的服务器日志和手机上运行的Connection Tracker中发现,Android的较新版本会回归到使用大多数防火墙允许的端口443(标准HTTPS端口)默认情况下通过流量.这就是我们运行较新Android版本的设备即使在防火墙后面工作的方式.我不知道究竟是什么Android版本引入了这个端口443后备,但它介于4.1.2(不工作)和4.3(工作)之间.