gpt4 book ai didi

android - 注销和重新注册 GCM 消息会导致两个 regId 有效。这是预期的吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:54:53 24 4
gpt4 key购买 nike

在 Android 设备上注册/取消注册 GCM 消息时,我注意到一些奇怪的行为。从客户端设备的角度观察以下用例:

  1. 注册 GCM -- ID A assigned
  2. 注销
  3. 注册 GCM -- ID B assigned

如果在第 2 步之后,服务器尝试向 ID A 发送消息,它将收到一个 NotRegistered 错误,as documented和预期。

但奇怪的是:在第 3 步之后, ID AB 都是有效的 ID!两个 ID 都会触发设备上的 Intent 接收器,从而向应用程序发送两条消息。

这种行为是否符合预期,还是我做错了什么?

这是我注册和取消注册的代码,在我的应用程序上启动第一个 Activity 时从 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);
}

注意 1:我只包含了 unregister() 调用以用于调试目的。我的应用程序通常“终身”注册(我也想在暂停和终止时接收 GCM 消息),但我仍然想找出这种行为的原因,因为我不确定取消注册是否是唯一的情况重新生成 ID。如果用户卸载并重新安装应用程序怎么办?我想要一个防弹系统 - 我的用户永远不会两次收到相同的 GCM 消息。

注2:问题很漂亮similar to this ,除了我确实按照答案建议使用 getApplicationContext() 注册。

最佳答案

  1. 当您取消注册时,您应该将旧的注册 ID 发送到您的服务器并将其从您的数据库中删除。

  2. 假设您未能执行第 1 步,如果在注册并获得新注册 ID 后您使用旧注册 ID 发送消息,Google 的响应将包含规范注册 ID(即新注册 ID ).此响应表明您的服务器应删除旧的注册 ID 并仅使用新的注册 ID。

关于android - 注销和重新注册 GCM 消息会导致两个 regId 有效。这是预期的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16320549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com