我们的Android应用程序最近已迁移到Firebase。在我们的服务器日志中,我们发现少数用户没有有效令牌。我们还确定这些用户会看到本地预定的通知,但实际上并未在升级后打开应用。
所以流程是:
我的问题是:这只是onTokenRefresh#FirebaseInstanceIdService
的限制,还是我们应该期望在该流程的某处生成令牌?
请注意,有一个每15分钟运行一次的AlarmManager服务(我不确定它对应用程序生命周期的影响)。
答案 0 :(得分:1)
我无法重现您描述的行为。您希望执行应用的任何组件:Activity
,Service
或BroadcastReceiver
,都会导致Firebase初始化,包括生成令牌,这是正确的。在您的情况下,您报告由定期警报调用的应用服务运行。这应该足以触发令牌的生成。我的测试(使用10.0.1)确认生成了一个令牌,onTokenRefresh()
调用了该案例。
在用户启动应用程序之前未提及处理的任何提及建议与应用程序Stopped State建立连接。如果用户使用设置强制停止了您的应用> AppManager> (您的应用)>强制停止,然后应用程序更新,应用程序保持在已停止状态,并且在用户启动应用程序之前不会生成令牌。但是您报告警报服务正在运行,如果应用程序处于“已停止”状态,则不会发生此情况。
您可以考虑使用在清单中注册的BroadcastReceiver
来接收ACTION_MY_PACKAGE_REPLACED。升级您的应用时会广播此操作。执行接收器将导致Firebase初始化和令牌生成。我的测试证实了这一点。
FWIW,在我的测试中,我使用此命令来模拟应用更新:
> adb install -r /path/to/apk/my-test-app.apk