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

pom*_*ber 8 android push-notification google-cloud-messaging

我使用GCM的应用程序有问题,方案是这样的:

  1. 该应用已安装
  2. 应用程序调用GCM寄存器方法获取注册ID"RID-1"
  3. 该应用程序已卸载
  4. 该应用程序再次安装
  5. 应用程序再次调用GCM寄存器方法获取注册ID"RID-2"

在第5步中,我需要获取以前的注册ID,以便我可以更新我的模型.

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

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

如果您需要更多背景,请告诉我.


我发现了几个相关的问题,但答案不适用于这种情况:
GCM
gcm规范ID的注册ID重复应该更新或者不是
gcm注册ID的持久性
Google Cloud Messaging - 注册ID状态
Android GCM:如何检测注册的规范ID在我自己的服务器?
处理Android上的Google Cloud Messaging中的注册ID更改
(均由@eran回答)

小智 5

您可以在请求中指定"dry_run": true选项/send.

我发现设备没有收到带"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]
Run Code Online (Sandbox Code Playgroud)

输出$ ruby ask_canonical_ids.rb(格式化)

[{
  :old => "OldRegistrationId",
  :new => "NewRegistrationId"
}]
Run Code Online (Sandbox Code Playgroud)

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