我正在使用GoogleCloudMessaging在我的应用中实现通知功能。但我有一个问题,当我卸载我的应用程序,并再次安装,我得到2个不同的注册ID,这导致重复通知我的应用程序。GoogleCloudMessaging#注册会在同一应用程序/设备中返回不同的ID?
在the document,他们说: “这种方法重复调用将返回原来的注册ID”
公共字符串寄存器(串... senderIds)
注册GCM的应用并返回注册ID。您的 必须在安装应用程序时调用一次,并将返回的注册ID发送到服务器。
重复调用此方法将返回原始注册号 ID。
但在another document,他们想出了一种叫“规范标识”:
规范标识 在服务器端,只要应用程序表现很好,一切都应该正常工作。但是,如果应用程序 中的某个错误触发了同一设备的多个注册,则可能很难与 协调状态,并且最终可能会出现重复的消息。
那么我如何才能使这一切与所有设备保持一致?我的(第三方)服务器仅存储注册ID,这些注册ID将用于发送通知。现在,这里来了“规范ID”,一切都变得非常复杂!
这是否意味着当我做注册时,我必须为每个设备发送一个唯一的识别号码?
这是我用于将设备注册到Google云端通讯的代码块:
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(context);
}
regid = gcm.register(SENDER_ID);
Log.d(TAG, "########################################");
Log.d(TAG, "Current Device's Registration ID is: " + regid);
Map<String, String> data = new HashMap<String, String>();
data.put("regId", regid);
try {
Utils.post(Constants.SERVER_NOTIFY_REG_LINK, data);
Log.d(TAG, "ID registered: " + regid);
} catch (Exception e) {
e.printStackTrace();
}
} catch (IOException ex) {
msg = "Error :" + ex.getMessage();
Log.d(TAG, msg);
}
感谢您的回复。看起来像我必须走你的第一个解决方案。但是我认为外部存储中的“唯一实例ID”并不像你提到的那样好。有没有更简单的方法可以用来识别设备?例如“设备ID”或什么?无论如何,我会马上谷歌它。谢谢。 – TrungDQ 2014-09-25 08:09:13
不幸的是,没有“唯一的设备标识符”这样的东西。因此,您必须严格遵守Google提供的方法,以免接收到重复的邮件。 – 2015-11-06 07:12:13