InstanceIDListenerService什么时候调用,如何测试?

When will InstanceIDListenerService be called and how to test it?

随着对 Android GCM 的最后更改,现在提供了一个 InstanceIDListenerService,以便能够通过覆盖 onTokenRefresh 方法来侦听令牌刷新。

但是这个方法什么时候调用呢?有什么办法可以手动测试吗?

如果实例 ID 服务更新了应用程序的令牌,将调用 onTokenRefresh()。调用 onTokenRefresh() 的主要原因是允许您使用新令牌更新您的应用服务器,以便它可以向您的应用发送消息。

您不必手动测试令牌值。该令牌主要由您的应用程序服务器用于向您的应用程序发送消息。因此,当您的应用程序首次运行时,您应该调用 InstanceID.getToken() 并将令牌发送到您的服务器。然后,如果令牌更新,您再次调用 InstanceID.getToken() 并将新值再次发送到您的服务器。

在此处查看example

从命令行手动测试运行:

adb shell am startservice -a com.google.android.gms.iid.InstanceID --es "CMD" "RST" -n your.package.name/your.own.MyInstanceIDListenerService

其中:

  • 您的应用程序包是 your.package.name
  • 您的 InstanceIDListenerService 实现的 class 名称是 your.own.MyInstanceIDListenerService

这将向服务发送一个意图,其中包含基础 class 所期望的额外内容。

为此,服务需要暂时设置为 exported :

<service
    android:name="your.own.MyInstanceIDListenerService"
    android:exported="true">
    <intent-filter>
        <action android:name="com.google.android.gms.iid.InstanceID"/>
    </intent-filter>
</service>

注意:这应该只能暂时完成并且永远不要在生产中导出或否则其他应用程序可以访问您的服务。