android - 如果我不想实现 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
回调是不可避免的?
解决方案
如果您的应用没有 aFirebaseMessagingService
并且在用户未使用该应用时更改了令牌,则您的服务器会将消息发送到旧令牌,而设备将不会接收它们。
创建一个FirebaseMessagingService
实际可确保您的应用程序代码在未主动使用应用程序时收到令牌更改的通知。如果没有FirebaseMessagingService
.
推荐阅读
- java - Kafka 中消息的大小开销是多少?
- mysql - 前天SQL成交量
- excel - 如果数字在列中,则给出值
- excel - 有没有办法使用 VBA 从 ASC 文档导入数据并根据上次修改日期调整时间数据?
- php - PHP 智能感知
- lodash - Lodash 使用 Alphanumberic 排序不正确?
- amazon-web-services - 如何在 Terraform 中为 SQS 使用 aws 提供的 kms 加密密钥
- python - PyQT5:为什么我的文件窗口会立即打开?
- python - Kafka:消息不以魔术字节开头
- javascript - 完成后再刮一次的最佳方法