如果安装旧版本的应用程序,则 FirebaseMessagingService 不会启动

FirebaseMessagingService not started if install over old version of application

我的应用有 class FirebaseService : FirebaseMessagingService() 今天我发现了奇怪的行为。当我安装没有 FirebaseService 的旧版本应用程序,然后在旧版本下使用 FirebaseService 安装新版本(不卸载旧版本)时,我的 FirebaseService 没有启动(没有调用 onStart())。但是,如果我在卸载以前版本的 FirebaseService 后安装带有 FirebaseService 的版本。这种行为存在于模拟器和真实设备上。 所以我的问题是,它是否是预期的行为(似乎没有),当用户通过 Google Play 更新新版本时它会重现吗? 我的 FirebaseService 看起来像这样:

class FirebaseService : FirebaseMessagingService() {
    private val pushRegistrationHandler: PushRegistrationHandler by inject()
    private val notificator: Notificator by inject()

    override fun onCreate() {
        super.onCreate()
        Log.d(TAG, "FirebaseService created")
        notificator.createNotificationChannel(applicationContext)
    }

    override fun onNewToken(token: String) {
        Log.d(TAG, "Refreshed token: $token")
        pushRegistrationHandler.onNewFbToken(token)
    }

    override fun onMessageReceived(message: RemoteMessage) {
        Log.d(TAG, "push data received: ${message.data}")
        notificator.showNotification(applicationContext, message.data)
        super.onMessageReceived(message)
    }

    companion object {
        val TAG = FirebaseService::class.java.simpleName
    }
}

似乎指定的行为不仅在我的测试环境中而且在从市场更新发布版本的真实设备的重要部分上确实重现了。因此,如果用户在安装新版本之前不卸载以前的版本,则无法保证在 应用程序更新后 立即启动 firebase 服务,这可能会导致一种情况当您错过一个新令牌时。 为了确保您能够在更新后尽快获得令牌,您必须明确请求它:

FirebaseMessaging.getInstance().token.addOnCompleteListener {
                val resultToken: String = it.result ?: ""
                Log.d(tag, "FirebaseMessaging token: $resultToken")
}