我读谷歌实现基本GCM例子。 我公司开发的小型客户端的Android应用程序,成功地给我注册ID从GCM服务器..现在我使用Ruby on Rails服务器端,因此我们用这个宝石执行的GCM的服务器端https://github.com/dondeng/gcm_on_rails 。 我把我的注册ID到我的服务器。 我成功运行这些命令
设备= GCM :: Device.create(:registration_id => “XXXXXXXXXXXXXXXXXXXXXX”)
通知= GCM :: Notification.new
notification.device =设备
notification.collapse_key = “updates_available”
notification.delay_while_idle =真
notification.data = {:registration_ids => [ “RegistrationID”],:数据=> {:MESSAGE_TEXT => “获取关于云9”}}
notification.save
用于传送通知:
$ rake gcm:notifications:deliver
我rake命令没有任何错误运行。 但是,所有这些任务我的设备没有收到任何消息,完成后..我不知道什么背景回事。 如何确认发送消息正确的设备接收。需要帮助...谢谢你....
调试GCM消息可能是麻烦和困难的。
一个可能的原因是一个错误的GCM API密钥 ,必须在配置文件中定义。 如果你使用了错误的API密钥,那么你可能会得到来自服务器的成功响应{:code=>200, :message=>nil}
,虽然没有消息已发送。 在这种情况下转到谷歌API控制台并查找正确的密钥。
另一个可能的原因是一个错误的REGISTRATION_ID
的设备。 如果REGISTRATION_ID是不正确的,你可能会得到一个NotRegistered或InvalidRegistration错误,这并不总是由gcm_on_rails插件(目前)的认可。 使用下面的curl命令通过控制台调试API(插入您的API_KEY和REGISTRATION_ID
器件)。
curl --header "Authorization: key=API_KEY" \
--header Content-Type:"application/json" \
https://android.googleapis.com/gcm/send \
-d "{\"registration_ids\":[\"REGISTRATION_ID\"],
\"data\":{\"message_text\":\"Test, Test\"}}"
一个成功/失败的尝试打电话给GCM API应该是这样的:
{"multicast_id":7961..,"success":1,"failure":0,"canonical_ids":1,
"results":[{"registration_id":"..","message_id":"0:.."}]}
{"multicast_id":7961..,"success":0,"failure":1,"canonical_ids":0,
"results":[{"error":"NotRegistered"}]}
最后,另一个原因是在当天无效键:不使用保留字像message_type
作为数据散列的关键。 它会返回一个状态代码200,但它不会提供任何通知。 message_type
是一个高级选项 (我花了一个多小时找到了)。
如果您在服务器端没有错误,也许你没有正确处理您的Android应用程序的事件。
按照此原则: http://developer.android.com/guide/google/gcm/gs.html#android-app ,写日志调试。