【问题标题】:Is there an alternative to onNewToken if I don't want to implement a FirebaseMessagingService?如果我不想实现 FirebaseMessagingService,是否有替代 onNewToken 的方法?
【发布时间】:2021-04-04 10:59:50
【问题描述】:

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

【问题讨论】:

    标签: android firebase firebase-cloud-messaging


    【解决方案1】:

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

    创建FirebaseMessagingService 实际上可确保您的应用程序代码在未主动使用应用程序时收到有关令牌更改的通知。如果没有FirebaseMessagingService,就无法获得这样的通知。

    【讨论】:

    • 感谢您的澄清。 FirebaseMessagingService 只实现onNewToken 而没有其他功能是否很常见?对于仅在应用处于后台时需要通知的应用。
    • 拥有FirebaseMessagingService 的主要原因是检测令牌更改,因此onNewToken 是其中实现的唯一方法很常见。
    猜你喜欢
    • 2020-04-17
    • 2012-06-05
    • 2022-01-22
    • 2020-06-07
    • 2019-08-31
    • 1970-01-01
    • 2021-11-06
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多