获取GCM规范注册ID而不发送消息

时间:2015-01-06 18:45:53

标签: android push-notification google-cloud-messaging

我使用GCM的应用程序出现问题,方案如下:

  1. 已安装该应用
  2. 应用程序调用GCM注册方法获取注册ID" RID-1"
  3. 已卸载该应用
  4. 再次安装该应用
  5. 该应用再次调用GCM注册方法获取注册ID" RID-2"
  6. 在第5步中,我需要获取之前的注册ID,以便我可以更新我的模型。

    限制:
    - 我试图在不使用外部存储器的情况下这样做 - 当服务器发送消息时我无法更新模型,应该在注册后完成,因为在应用中为每个新设备创建了新的配置文件

    我知道此信息位于Google服务器中,因为当您向旧注册ID发送邮件时,它会发送给您。例如,如果我向" RID-1"发送消息,则在响应中我得到新的(规范)注册ID为" RID-2" 。我需要的是一种在不发送消息的情况下获取此信息的方法。

    如果您需要更多背景信息,请与我们联系。


    我发现了几个相关的问题,但答案并不适用于这种情况:
    Registration ID duplication for GCM
    gcm canonical id should be updated or not
    Persistance of gcm registration id
    Google Cloud Messaging - Registration ID status
    Android GCM: How to detect registered canonical ids in my own server?
    Handling registration ID changes in Google Cloud Messaging on Android
    (全部由@eran回答)

3 个答案:

答案 0 :(得分:5)

您可以在/send请求中指定"dry_run": true option

我发现设备在使用"dry_run": true选项时未收到任何推送通知,而服务器则会收到canonical_ids响应。

以下是Ruby中的示例代码。您可能必须事先安装gcm Gem。

$ gem install gcm

<强> ask_canonical_ids.rb

require 'gcm'
require 'json'

API_KEY = "YourApiKey"
gcm = GCM.new(API_KEY)

registration_ids = [
  'OldRegistrationId',
]

option = { data: { 'message' => 'Hello Gcm!' }, dry_run: true }
response = gcm.send_notification(registration_ids, option)

p response[:canonical_ids]

$ ruby ask_canonical_ids.rb(已格式化)

的输出
[{
  :old => "OldRegistrationId",
  :new => "NewRegistrationId"
}]

同样,您的设备不会收到任何推送通知。

答案 1 :(得分:1)

我们需要用Canonical Id更新注册ID(通过查找数组的索引位置)。您可以关注此工作Ready use Code

答案 2 :(得分:0)

如果您只需要用户不应收到通知,请发送包含您的应用程序不需要的参数的消息。您将获得规范,如果没有强制性文本和消息,您的应用将会丢弃该通知。

例如,我的Cordova应用程序插件需要从服务器接收的数据中的密钥“message”。否则它不会创建通知。

我知道这有点像黑客,但我认为考虑到这些限制,这将是最容易实现的。