应用程序何时应在GCM中请求Instance ID和注册令牌?

3

背景

我正在开发一款Android应用程序,需要从Web应用程序服务器向该应用程序推送通知。为此,该应用程序需要使用Google的实例ID服务请求唯一的实例ID。

String iid = InstanceID.getInstance().getID();

问题

  1. 在被用户启动的主活动的onCreate()方法中调用getId()是否合适?这意味着每次都会返回一个新的实例ID,所以这似乎不正确。
  2. 如果我理解正确,每次调用getId()都会得到相同的实例ID,对吗?
  3. getId()需要从后台线程调用还是可以从主UI线程调用?文档没有指出必须从后台线程调用,但由于此方法涉及连接到云服务,因此可能会阻塞UI线程。
2个回答

1
1和2. ID的意思是在设备上应用程序的生命周期内保持稳定(不会改变),但有一个bug,所以我不会依赖它。由于它似乎还没有任何其他用途,所以我不会担心调用getID()。如果那个bug被修复了,它可能会作为您的应用程序安装的唯一标识符或在将来有其他用途。
3. getID()不会发出服务器请求,因此可以从主线程中调用,但我想它会从flash中读取/写入一些内容,所以最好的做法是在后台线程中调用它。
请注意,getToken()似乎在应用程序重新启动时是稳定的,并且必须在后台线程上调用,因为它会发出服务器请求。

我从这里https://github.com/googlesamples/google-services.git下载了GCM示例代码。它没有在任何地方使用getID()。 - Amit

0

在示例中,他们没有使用getId(),因为他们实际上不需要它来与GCM通信。

要与GCM通信,您真正需要的是通过方法getToken(Project_Id,“GCM”)获得的令牌和一个GCMHandler(广播接收器),它将从gcm api接收数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接