Nil*_*zor 8 android push-notification google-cloud-messaging
在Android设备上注册/取消注册GCM消息时,我注意到了一些奇怪的行为.从客户端设备的角度观察以下用例:
如果在步骤2之后,服务器尝试向ID A发送消息,则会收到NotRegistered错误,如记录和预期的那样.
但是,现在的怪部分:第3步之后,两者 ID 一个和乙是有效的ID!两个ID都将触发设备上的Intent接收器,从而向应用程序发送两条消息.
这种行为是否已经过了,或者我做错了什么?
这是我注册和取消注册的代码,从onCreate()我的应用程序上的第一个活动启动时触发:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
unregister(getApplicationContext());
register(getApplicationContext());
}
/** Registers this device for GCM messages */
public static void register(Context context) {
GCMRegistrar.checkDevice(context);
GCMRegistrar.checkManifest(context);
String regId = GCMRegistrar.getRegistrationId(context);
if (regId.equals("")) {
GCMRegistrar.register(context, SENDER_ID);
} else {
storeRegId(regId); // Also notifies back-end
}
}
public void unregister(Context context) {
GCMRegistrar.unregister(context);
}
Run Code Online (Sandbox Code Playgroud)
注1:我只包含了unregister() - 用于调试的调用.我的应用程序通常保持注册"终身"(我也希望在暂停和终止时收到GCM消息),但我仍然想弄清楚这种行为的原因,因为我不确定取消注册是否是唯一的情况ID被重新生成.如果用户卸载并重新安装应用程序该怎么办?我想要一个防弹系统 - 我的用户永远不会收到两次相同的GCM消息.
注2:问题非常类似于此,除了我确实正在注册,getApplicationContext()如答案所示.
当您取消注册时,您应该将旧的注册 ID 发送到您的服务器并将其从数据库中删除。
假设您未能执行步骤 1,如果在注册并获取新注册 ID 后您使用旧注册 ID 发送消息,则 Google 的响应将包含规范注册 ID(即新注册 ID)。此响应表明您的服务器应删除旧的注册 ID 并仅使用新的注册 ID。
| 归档时间: |
|
| 查看次数: |
8937 次 |
| 最近记录: |