【问题标题】:Is FirebaseInstanceIdService onTokenRefresh() only called when the app is running?FirebaseInstanceIdService onTokenRefresh() 是否仅在应用程序运行时调用?
【发布时间】:2017-05-25 17:21:13
【问题描述】:

正如标题所暗示的那样,如果我有一个 Android 应用程序注册了 FCM 通知,并且该应用程序处于后台或有一段时间没有启动并且令牌发生变化,那么何时调用 onTokenRefresh()

它会唤醒应用程序调用onTokenRefresh(),还是会在下次启动应用程序时调用它?

谢谢

【问题讨论】:

    标签: android firebase firebase-cloud-messaging


    【解决方案1】:

    onTokenRefresh()触发时的事件已经包含在FirebaseInstanceIdService documentation中:

    当系统确定令牌需要刷新时调用。应用程序应调用 getToken() 并将令牌发送到所有应用程序服务器。

    这不会被非常频繁地调用,它是密钥轮换和处理实例 ID 更改所必需的:

    • 应用删除实例 ID
    • 应用已在新设备上恢复
    • 用户卸载/重新安装应用程序
    • 用户清除应用数据

    系统将限制所有设备的刷新事件,以避免令牌更新导致应用服务器过载。

    同样指定,FirebaseInstanceIdService 类扩展了 Service 类,无论应用程序是在前台还是后台,它都可以运行。

    【讨论】:

    • 当用户将应用程序从 gcm 更新到 fcm 后又无法打开应用程序时会发生什么情况。消息会传递给用户还是无法访问?
    • @ronakPoriya 将您的应用从 GCM 迁移到 FCM 不会对消息传递的行为产生任何变化。
    • 消息传递代码被迁移到 MyFirebaseMessagingService 类。由于未调用 FirebaseInstanceIdService 中的 onTokenRefresh(),这将不起作用。我理解正确吗?
    • @RonakPoriya 对不起。我无法理解你的陈述。我建议发布一个包含您所拥有的详细信息的问题。从那里开始,我认为社区将能够更好地帮助你。干杯!
    【解决方案2】:

    这是onTokenRefresh() 的调用方式。

    1. 应用已安装。
    2. 令牌已泄露。
    3. 令牌已更改。

    所以对你来说,简短的回答是onTokenRefresh() 方法将触发,无论你的应用是在前台还是后台。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      相关资源
      最近更新 更多