android - 使所有 gcm token 无效

标签 android google-cloud-messaging

我的应用程序使用 gcm。每次用户登录时,都会注册新的 gcm token 并将其发送到我的第 3 方服务器。每次用户注销时,都会取消注册 gcm token 。这锅没有任何问题。

问题是,当涉及到测试时,测试人员可以在不注销的情况下卸载应用程序,然后重新安装并登录到另一个帐户。然后他将从两个不同的帐户收到两个 gcm。这意味着他将收到他当前未登录的帐户的私有(private) gcms。有时,实时用户甚至会发生这种情况。

GCM 文档指出,如果应用程序被卸载,gcm token 有时可能会过期。实际上,这永远不会发生。
http://developer.android.com/google/gcm/gcm.html

GCM 文档还声明您可以通过执行取消注册 GCM token

Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
startService(unregIntent);

但是你重装后试试这个方法好像不行。我确实收到了回调,它告诉我 token 未注册,但 gcm token 仍然可以正常工作。

我的问题是:您能否确保您的应用程序没有有效的 gcm token ?我真的很想在应用程序首次启动时注销所有现有 token ,或者至少从手机设置中重置它们。

最佳答案

您的应用程序的 GCM token 对于每台设备都是唯一的,因此如果您遇到不同的用户告诉您他们使用与其他用户相同的 GCM token ,那么您就知道您描述的情况已经发生。基本上,每次您收到 GCM token 时,您应该删除所有具有相同 GCM token 的旧记录,然后再将其仅分配给新用户。

关于android - 使所有 gcm token 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13724526/

相关文章:

android - 谷歌播放 : application is not visible with search keyword

android - 无法实例化 GcmBroadcastReceiver

android - 当应用程序在 android 中运行或不运行时,将推送通知内容显示到警报对话框中

android - 独立的推送通知服务器实现

java - 新 GCM 的 Android HttpsURLConnection 和 JSON

android - 自定义 CheckBox 菜单项 ActionBar 不起作用

java - 在 Android 上运行 bash

Android 检查设备是否支持应用内计费

android - 在 Android 4.2 的 StateListDrawable 中使用默认的 ShapeDrawable

没有谷歌帐户的Android云到设备消息传递