我在推送通知服务器上看到此问题 - 不同的Android设备(由其IMEI标识)从Google的GCM服务接收相同的注册ID。 注册ID不应该是唯一的吗?在东部用于相同的应用程序或GCM API密钥?
我看到了这个帖子,但似乎没有答案: Can two different devices have same GCM Registration ID?
非常感谢任何帮助
修改 这是相关的注册代码:
Intent intent = new Intent(
"com.google.android.c2dm.intent.REGISTER");
intent.setPackage("com.google.android.gsf");
intent.putExtra("app",
PendingIntent.getBroadcast(context, 0, new Intent(), 0));
intent.putExtra("sender", flatSenderIds);
context.startService(intent);
答案 0 :(得分:6)
我想到的唯一想法是,如果sender
的额外值在所有设备上相同,则不推荐使用的方法会在不同的设备上分配相同的ID。这与您不知道自己是谁的当前版本不同,您甚至不发送Intent
,只需致电register()
,Google就会确定您的身份以及您应该提供的身份证件
如果你最终使用这个新库,那么有一个如何注册的示例片段(在AsyncTask
或Thread
内):
GoogleCloudMessaging gcm = null;
try {
// Will be for the first time
if (gcm == null)
gcm = GoogleCloudMessaging.getInstance(your_context);
// Registration against the GCM service
String regid = gcm.register(YOUR_SENDER_ID_OBTAINED_FROM_YOUR_PROJECT);
// You'll need to send the registration info to your remote server
registerRemoteServer(regid);
Log.d("MyGCM", "Registered on GCM as " + regid);
}
catch (final IOException ex) { ex.printStackTrace(); }
答案 1 :(得分:5)
有时Google会更改注册ID,您将拥有多个ID。发送通知的服务器(您的服务器)必须使用新ID更新数据库。
有关详细信息,请查看此文档:
http://developer.android.com/google/gcm/adv.html
他们说:这是Canonical ID
在服务器端,只要应用程序运行良好, 一切都应该正常工作。但是,如果应用程序中存在错误 触发同一设备的多次注册,可能很难 协调状态,你可能会得到重复的消息。
GCM可以轻松提供名为“规范注册ID”的工具 从这些情况中恢复。定义了规范注册ID 是您的申请所要求的最后一次注册的ID。 这是服务器在向邮件发送邮件时应使用的ID 设备
如果稍后您尝试使用其他注册发送消息 ID,GCM将照常处理请求,但它将包括 规范注册ID在registration_id字段中 响应。确保替换存储在您的注册ID 具有此规范ID的服务器,因为最终您正在使用的ID 停止工作。
答案 2 :(得分:2)
好吧,在添加注册码后,我可以看到你正在使用旧的注册方法。自去年年中以来,该方法已被取消。它可能不如新注册方法可靠。
您应该尝试通过Google Play服务库的GoogleCloudMessaging.register
方法进行注册。这是谷歌的推荐方式。请参阅官方演示here。