如果用户更新应用程序但未打开它,是否会生成FCM令牌?

时间:2017-02-06 16:34:59

标签: android firebase firebase-cloud-messaging

我们的Android应用程序最近已迁移到Firebase。在我们的服务器日志中,我们发现少数用户没有有效令牌。我们还确定这些用户会看到本地预定的通知,但实际上并未在升级后打开应用。

所以流程是:

  1. 用户拥有未使用FCM的应用版本。
  2. 用户将其应用更新为使用FCM的版本,但不会打开该应用。
  3. 用户正在获取之前活动安排的本地通知,但未打开应用或点击这些通知。
  4. 我的问题是:这只是onTokenRefresh#FirebaseInstanceIdService的限制,还是我们应该期望在该流程的某处生成令牌?

    请注意,有一个每15分钟运行一次的AlarmManager服务(我不确定它对应用程序生命周期的影响)。

1 个答案:

答案 0 :(得分:1)

我无法重现您描述的行为。您希望执行应用的任何组件:ActivityServiceBroadcastReceiver,都会导致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