Android Gcm 不适用于 ROR

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

我阅读了实现 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 = device

notification.collapse_key = "updates_available"

notification.delay_while_idle = true

notification.data = {:registration_ids => ["RegistrationID"], :data => {:message_text => "Get on cloud nine"}}

notification.save

用于传递通知:

$ rake gcm:notifications:deliver

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

最佳答案

调试 GCM消息可能会很麻烦和困难。

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

另一个可能的原因是设备的 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_typeadvanced options 之一(我花了一个多小时才弄明白)。

关于Android Gcm 不适用于 ROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12246514/

相关文章:

ruby-on-rails - 在 Rails 中命名 React 组件文件时,前导下划线有什么区别?

android - Spring 和 Jackson Mapper 无法从 START_OBJECT 中反序列化 CUSTOM_CLASS 的实例

java - 应用程序因空指针异常而崩溃,并且在 android webview 中按下“返回”时出现其他错误

ruby-on-rails - Rails 3. 按匹配次数排序(多对多)

ios - 如何在应用程序终止或终止时点击推送通知后打开特定 Controller

Azure 移动服务与 Azure 通知中心 - 哪个用于推送通知?

android - 如何知道我的应用程序是否禁用了显示通知?

android - 在android中将数据从activity传递到dialogFragment

android - 为 Android Studio 错误安装 com.android.support.recyclerview-v7 的存储库

ruby-on-rails - 使用 Activemerchant gem 的多个商家帐户