【问题标题】:Android Gcm Not working with RORAndroid Gcm 不适用于 ROR
【发布时间】:2012-09-03 10:59:20
【问题描述】:

我阅读了实现 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")

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

【问题讨论】:

    标签: android ruby-on-rails push-notification google-cloud-messaging


    【解决方案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"}]}
    

    最后还有一个原因是当天的key无效:不要使用message_type这样的保留字作为数据hash中的key。它将返回状态码 200,但不会发送任何通知。 message_typeadvanced options 之一(我花了一个多小时才找到答案)。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 嗨 manelizzard 感谢您的回复...根据上面的链接,我已经在 androidmanifest.xml 中提取了所有必需的权限。我的客户端 android 应用程序包含两个 java 文件,一个是 GCMIntentService.java 扩展 GCMBaseIntentService,另一个是 mainactivity.java。当我运行这个客户端应用程序时,它运行没有任何错误,并且还给了我 regId...但没有收到来自服务器的任何通知...我在客户端错过的任何其他东西...
      • 我使用本教程 androidv5.wordpress.com/2012/08/15/… 成功实现了服务器站点部分和客户端部分,它还显示用户注册成功,但是当我尝试向用户发送消息时它给了我错误 Servlet SendAllMessagesServlet 不可用
      • 这是一个服务器端错误。你有类SendlAllMessagesServlet.javahere 并映射到web.xmlhere
      • 对不起,我错过了这个服务器端教程是为 Java 完成的,而不是为 Ruby on Rails 完成的
      • 我有 SendlAllMessagesServlet.java 也映射到 web.xml 但它仍然给我同样的错误。即使我创建了 java 类并映射到 web.xml 但仍然为新类给出相同的错误......需要帮助......谢谢......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      相关资源
      最近更新 更多