我在GCM中使用GoogleCloudMessaging.getInstance(context)注册; 并将收到的令牌保存在设备上.然后将其发送到服务器,它与用户帐户相关联.如果我卸载我的应用程序而没有注销并再次安装并与其他用户一起登录,我会收到新令牌并将其发送到服务器.当推送发送给第一个用户时,我在第二个用户登录时看到它们.
为什么GCM会向我发送不同的令牌,我该如何处理?
在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) 我目前正在尝试使用GCM向用户发送通知,目前我还在研究如何最大化它.现在我只使用此处文档中提供的示例项目,并使用gcm-client示例来处理它.
现在使用Git中的这个项目我尝试使用应用程序创建的注册ID来推送消息,是的,它成功传递了消息.
现在问题是我卸载应用程序后.重新安装后,它将生成一个新的注册ID,其中我将它与前一个一起存储在服务器上,但我无法将之前的注册ID标记为不接收任何进一步的消息,因为当用户没有互联网时可能会发生卸载连接.之后,我发送消息到两个注册ID,这是卸载应用程序之前的ID和重新安装应用程序后的ID.发生了什么事情,我收到两个推送消息,尽管我预计它只会得到一个,因为应用程序已经更改了注册ID.
我希望应用程序可能会收到两个或更多重复的应用程序,如果我还更新了应用程序,因为正如文档中所述,注册ID可能会在更新时更改.
我可以做任何解决方法来处理这些重复的消息?
我发现当GCM无法发送下一个推送通知时,GCM会将注册ID标记为删除.
但在我的情况下,我的用户发生了以下情况.
场景:
1)我的用户安装了应用程序,他的设备已在GCM注册.
2)同一用户卸载并立即再次安装应用程序.第二次生成新的注册ID.
3)这两个注册ID存储在我的数据库中.
4)现在这个特定用户正在获得两个推送通知.
现在我有以下问题:
问题: