首页 > 解决方案 > 如果我不想实现 FirebaseMessagingService,是否有替代 onNewToken 的方法?

问题描述

我的应用程序在后台运行时只需要 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回调是不可避免的?

标签: androidfirebasefirebase-cloud-messaging

解决方案


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

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


推荐阅读