我使用GCM的应用程序出现问题,方案如下:
在第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回答)
答案 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”。否则它不会创建通知。
我知道这有点像黑客,但我认为考虑到这些限制,这将是最容易实现的。