首页 文章

Android Gcm不使用ROR

提问于
浏览
2

我阅读了实现google 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”],:data => {:message_text =>“Get on cloud nine”}} notification.save

用于发送通知:

$ rake gcm:notifications:deliver

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

2 回答

  • 1

    调试GCM消息可能很麻烦且困难 .

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

    另一个可能的原因是设备错误 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 是其中一个advanced options(花了我一个多小时才找到它) .

  • 0

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

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

相关问题