我的应用程序有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")
}