如果我不想实施 FirebaseMessagingService,是否有 onNewToken 的替代方案?

Is there an alternative to onNewToken if I don't want to implement a FirebaseMessagingService?

我的应用仅在应用处于后台时需要 FCM 通知。因此,我实际上不需要 FirebaseMessagingService。我只是将它添加到我的应用程序中以处理 onNewToken 回调,以防令牌在应用程序处于 运行:

时发生变化
@AndroidEntryPoint
class ChatFirebaseMessagingService : FirebaseMessagingService() {

    @Inject
    lateinit var userRepository: UserRepository

    @Inject
    lateinit var sessionManager: SessionManager

    override fun onNewToken(token: String) {
        sessionManager.currentChatUser?.let {
            userRepository.persistCurrentFcmToken(it)
        }
    }
}

persistCurrentFcmToken 位于存储库中:

我也是在用户登录的时候调用这个方法

fun persistCurrentFcmToken(user: ChatUser) {
    applicationScope.launch {
        val token = messaging.awaitToken() ?: return@launch

        val tokenList = user.fcmTokens?.toMutableList() ?: mutableListOf()

        if (!tokenList.contains(token)) {
            tokenList.add(token)
            val userUpdate = user.copy(fcmTokens = tokenList)

            userCollection.document(user.uid!!).set(userUpdate)
        }
    } 
}

FirebaseMessagingService 感觉有点毫无意义,因为我不需要前台通知。有没有办法摆脱它或者 onNewToken 回调是不可避免的?

如果您的应用没有 FirebaseMessagingService 并且令牌在用户未使用该应用时更改,您的服务器会将消息发送到旧令牌,并且设备不会收到他们。

创建 FirebaseMessagingService 实际上可以确保您的应用程序代码在应用未被主动使用时收到令牌更改通知。没有 FirebaseMessagingService.

就无法获得这样的通知