繁体   English   中英

如何知道我的应用是否具有实例ID /是否已在GCM中注册?

[英]How to know if my app has an instance id/is registered with GCM?

我需要确定用户登录应用程序时是否有实例ID。 除了尝试获取实例ID和处理可能的异常之外,还有其他方法可以知道吗? -这种方法很容易失败,因为文档仅提到IOException,它可能是由于网络异常或其他IO错误而引发的。

我自己使用SharedPreferences跟踪值,但这似乎有些变幻莫测,因为该应用程序可能没有使用一段时间,并且该值可能不同步。

在移动设备上运行的Android应用程序通过调用Google Cloud Messaging方法注册器进行注册以接收消息。 此方法注册GCM的申请并返回注册ID。

他们基于此演示应用程序 ,通过在应用程序本地保留的值上设置一个过期日期来刷新注册ID。 他们加载其本地存储的注册ID。 如果expired则调用gcm.register()

这不适用于假设的情况,在这种情况下,Google会为长时间未启动的应用刷新注册ID。

您的应用程序可以根据需要使用getToken()方法从实例ID服务请求令牌,并且像InstanceID一样,您的应用程序还可以将令牌存储在您自己的服务器上。 发行给您应用的所有令牌均属于该应用的InstanceID。

令牌是唯一且安全的,但是如果出现安全问题或在设备还原期间用户卸载并重新安装您的应用程序,则您的应用程序或实例ID服务可能需要刷新令牌。 您的应用必须实现一个侦听器,以响应来自实例ID服务的令牌刷新请求。

您可以查看此文档以了解如何正确实施:

这是相关的SO凭单,讨论如何检查设备是否已注册:

使用InstanceID时,您可以调用getToken从本地缓存(在Google Play服务中)检索令牌(如果已存在),或者进行网络调用以检索新令牌。 因此,如果您的应用程序已经具有令牌,则对getToken的调用应立即返回,因为它是本地调用。 如果您收到IOException,则表明您的应用当前没有令牌。

您应该考虑的另一种选择是使用新的FCM客户端库。 它为您处理请求和刷新的令牌,因此您需要的是对FirebaseInstanceId.getToken()的调用,如果存在一个令牌,它将返回一个令牌;如果不存在,则返回null。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM