问题 Android重复注册ID为不同的设备


我在推送通知服务器上看到此问题 - 不同的Android设备(由其IMEI标识)从Google的GCM服务接收SAME注册ID。 注册ID不应该是唯一的吗?在东部为相同的应用程序或GCM API密钥?

我看到了这个帖子,但似乎没有答案: 两个不同的设备可以具有相同的GCM注册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);

5190
2018-02-28 17:04


起源

这两种设备都是虚拟的,物理的还是混合的? - nKn
所有设备都是物理真实设备 - Orr
您是否可以包含您在GCM服务注册的代码段以及如何测试获得的ID? - nKn
你使用哪个助手库?设备取消注册时您在做什么可以发布代码吗? - Anirudha Agashe
现在添加,谢谢 - Orr


答案:


我想到的唯一想法是,如果额外的值,这个已弃用的方法将在不同的设备上分配相同的ID sender 所有这些都是一样的。这与你不知道自己是谁的当前版本不同,你甚至不发送 Intent,你打电话 register() 谷歌确定你是谁以及你应该给出什么ID。

如果你最终使用这个新库,那么有一个如何注册的示例片段(在一个 AsyncTask 或者a 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(); }

6
2018-03-09 15:52



nKn-这里你也使用gcm.register中的发件人ID(YOUR_SENDER_ID_OBTAINED_FROM_YOUR_PROJECT);不要认为这是issus - Orr


有时谷歌会更改注册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将是   停止工作。


5
2018-02-28 17:10



谢谢 - 但对我来说情况并非如此。我看到完全不同的设备正在从GCM接收SAME注册ID,我已经验证它不是服务器端问题 - Orr
这就是我想要的。谢谢你明白的解释@M D. - Sash_KP


好吧,在添加您的注册码后,我可以看到您正在使用旧的注册方法。自去年年中以来,该方法已被取消。它可能不如新注册方法可靠。

你应该尝试通过注册 GoogleCloudMessaging.register Google Play服务库的方法。这是谷歌的推荐方式。查看官方演示 这里


2
2018-03-09 13:22



谢谢伊兰。但是使用播放服务lib迫使设备拥有Google播放服务,如果我们将图书馆提供给开发人员,它也会迫使他在他的项目中包含播放服务库项目......我仍然不明白为什么是可以接受的是,Google会向不同的设备提供相同的注册ID。如果不推荐使用此API,则会有许多应用仍在使用它 - Orr