我正在开发一款Android应用,该应用使用Google Cloud Messaging(新的GCM-API,而非弃用的C2DM)向所有已注册的设备发送发送至同步消息。
由于我使用的是官方文档,因此我的客户端实现与Google的示例几乎完全相同。作为服务器,我使用在localhost上运行的简单PHP脚本,其唯一任务是向GCM发送发送到同步消息。
只要我的设备通过UMTS等蜂窝网络连接到互联网,一切正常(服务器向GCM发送通知&gt; GCM一旦联机就将通知推送到设备&gt;设备上会显示通知)。< / p>
但是当设备连接到WIFI时,将不再接收GCM消息(尽管Google会向我的PHP服务器发送“成功” - )。由于以下answer我已经检查过我的路由器是否阻塞了某些端口,但它没有。
我有同样的接收推送消息的问题,即使GCM服务器回复“成功”,因为wifi隐私。当我使用我的公司wifi时,我不能在移动设备上接收消息,因为它们被阻止了GCM服务器端口。
有趣的是,我的实施已经在使用WIFI ...
Google从PHP发送GCM消息时的回复:
{
"multicast_id":4677038582377051331,
"success":1,
"failure":0,
"canonical_ids":0,
"results":[{"message_id":"0:1406364179145476%6ce83c64d7d6c7e2"}]
}
当我调用从智能手机发送GCM消息的PHP脚本时,问题就解决了,因为一切正常。
同时这个“新”GCM-API也被弃用了! 我现在正在使用latest GCM-API(2015年夏季发布)。自升级以来,我再也没遇到过这个问题。从我的观点来看,包括InstanceId-API在内的新API非常值得推荐,据我所知,它比旧的GCM更稳定。
答案 0 :(得分:3)
您需要打开端口5228 - 5230才能使GCM正常工作。
检查以下内容:
Note: If your organization has a firewall that restricts the traffic to or from the Internet, you'll need to configure it to allow connectivity with GCM. The ports to open are: 5228, 5229, and 5230. GCM typically only uses 5228, but it sometimes uses 5229 and 5230. GCM doesn't provide specific IPs. It changes IPs frequently. We recommend against using ACLs but if you must use them, take a broad approach such as the method suggested in this support link.
如果您的公司Wifi不允许这些端口,那么您将无法接收GCM。
希望有所帮助
答案 1 :(得分:0)
如果该服务在某个时间为您工作,您的设备“注册ID”可能会被更改或只是错误。
如果您从未为您工作,并且在检查您的设备注册ID与您在请求有效负载中向Google发送的设备注册ID相同后,请检查您的广播接收器和唤醒设备的GCM意向服务,因为如果执行此操作如果您的应用程序失败,即使您的请求已被Google收到,您仍然无法收到任何消息。
答案 2 :(得分:0)
同时这个“新”GCM-API也被弃用了! 我现在正在使用latest GCM-API(2015年夏季发布)。自升级以来,我再也没遇到过这个问题。从我的角度来看,新的API(包括InstanceId-API)非常值得推荐,因为我认为它比以前的GCM-API更稳定。