何时调用InstanceIDListenerService以及如何测试它?

Eyl*_*len 32 token google-cloud-messaging

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

但什么时候会调用这种方法?有没有办法手动测试?

Her*_*mit 42

要从命令行运行手动测试:

adb shell am startservice -a com.google.android.gms.iid.InstanceID --es "CMD" "RST" -n your.package.name/your.own.MyInstanceIDListenerService
Run Code Online (Sandbox Code Playgroud)

哪里:

  • 你的应用程序包是your.package.name
  • InstanceIDListenerService实现的类名是your.own.MyInstanceIDListenerService

这将使用基类预期的额外内容向服务发送意图.

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

<service
    android:name="your.own.MyInstanceIDListenerService"
    android:exported="true">
    <intent-filter>
        <action android:name="com.google.android.gms.iid.InstanceID"/>
    </intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)

注意:这应该只是临时完成,永远不会在生产中导出,否则其他应用程序可以访问您的服务.

  • 如果有人得到"错误:需要不从uid导出的权限" - 你需要**临时**来改变你的清单`android:exported ="true"`为你的服务(并且不要忘记在以后更改它完成测试). (13认同)
  • 有一个例外:错误:未找到; 没有服务开始:/ (8认同)
  • 如果您发现错误:未找到; 没有服务开始.然后就做`adb shell am startservice -a com.google.android.gms.iid.InstanceID --es"CMD""RST"your.package.name` (3认同)