如何强制设备获取新的GCM ID?

时间:2014-07-24 21:41:19

标签: android google-cloud-messaging

我的应用程序遇到了一个奇怪的问题 - 我有两个设备可以测试它。一个是4.4.4,第二个是4.0.4。我制作了一个使用GCM的应用程序。它在两部手机上都没有问题。然后我做了第二个,其中GCM模块从第一个复制粘贴,没有任何更改。

现在,当我向KitKat手机发送GCM消息时,它会毫无问题地接收它。但我无法在第二部手机上得到它。它根本没有注册(BroadcastReceiver没有收到任何东西)。第一个应用程序仍然正常工作。这两款手机都通过adb安装了确切的apk。

我将GCM注册ID存储在手机中,但是当我在KitKat上运行应用程序时,会收到一个ID,关闭应用程序,删除数据,再次运行它 - 我第二次得到一个不同的ID。第二部手机不会发生这种情况,这让我相信谷歌方面存在某种错误。

我偶然发现了这个问题,可能处理同样的问题 - GCM not working on Gingerbread, but is working on Ice Cream Sandwich。我尝试重新安装应用程序,但这没有帮助,我仍然得到旧的(不工作的)GCM ID。


tl; dr 我无法在一部手机上收到GCM消息,而同一个应用在另一部手机上播放。可能是注册GCM的问题。重新安装后,我仍然获得相同的GCM ID。如何强迫谷歌给我一个新的?


编辑:以下答案提供了所需的信息,但它没有解决问题。我将打开另一个帖子以避免误导标题。

2 个答案:

答案 0 :(得分:3)

我把头发拉了两天......如果你正在使用设备进行测试,你需要在获取令牌之前删除InstanceID,因为一旦你覆盖你的APK,它就会因某种原因取消注册InstanceId ......或者沿着这些方向的东西,它最终为我工作。因此,在您的RegisterIntentService类中,在onHandleIntent函数中执行以下操作:

InstanceID instanceID = InstanceID.getInstance(this);
try
{
    instanceID.deleteInstanceID();
} catch(IOException e) 
{
    e.printStackTrace();
}
instanceID = InstanceID.getInstance(this);

答案 1 :(得分:0)

我认为获取新的注册ID不会解决您的问题,但这是我用来获取新注册ID的方式:

  1. 卸载该应用。
  2. 向旧注册ID发送GCM消息。重复此步骤,直到您在Google的回复中出现NotRegistered错误。
  3. 再次安装应用程序,该应用程序应重新注册到GCM,这次您应该获得新的注册ID。