2

我阅读了实现 google gcm 的基本示例。我开发了小型客户端 android 应用程序,它成功地从 gcm 服务器为我提供了注册 ID。现在在服务器端我使用 Ruby on rails 因此我们使用这个 gem 来实现 gcm 的服务器端https://github.com/dondeng/gcm_on_rails . 我将我的注册 ID 传递给我的服务器。我成功运行了这些命令

device = Gcm::Device.create(:registration_id => "XXXXXXXXXXXXXXXXXXXXXX")

通知 = Gcm::Notification.new

notification.device = 设备

notification.collapse_key = "updates_available"

notification.delay_while_idle = true

notification.data = {:registration_ids => ["RegistrationID"], :data => {:message_text => "上云九"}}

通知.保存

用于传递通知:

$ rake gcm:notifications:deliver

我的 rake 命令运行没有任何错误。但是在完成所有这些任务后,我的设备没有收到任何消息。我不知道后台发生了什么。如何确认设备正确接收发送的消息..需要帮助...谢谢....

4

2 回答 2

1

调试GCM消息可能既麻烦又困难。

一个可能的原因是GCM 的 API 密钥错误,必须在配置文件中定义。如果您使用了错误的 API 密钥,那么您可能会从服务器获得成功响应{:code=>200, :message=>nil},尽管尚未发送任何消息。在这种情况下,请转到Google API 控制台并查找正确的密钥。

另一个可能的原因是REGISTRATION_ID设备错误。如果 REGISTRATION_ID 不正确,您可能会收到NotRegisteredInvalidRegistration错误,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高级选项之一(我花了一个多小时才找到它)。

于 2013-05-27T12:20:53.437 回答
0

如果您在服务器端没有错误,则可能是您没有正确处理 Android 应用程序中的事件。

请遵循以下准则: http: //developer.android.com/guide/google/gcm/gs.html#android-app,并编写调试日志。

于 2012-09-03T11:02:45.583 回答