我的应用程序只需要应用程序在后台时的FCM通知。出于这个原因,我实际上不需要Firebase MessagingService
。我只是将其添加到我的应用程序中以处理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,并且在用户未使用应用程序时更改了令牌,则您的服务器将向旧令牌发送消息,而设备将不会接收这些消息。
创建Firebase MessagingService
实际上可以确保您的应用程序代码在应用程序未被积极使用时收到令牌更改的通知。如果没有Firebase MessagingService
,就无法获得此类通知。
朋友 Jackson框架提供了基于注释的方法来在序列化过程中发出类型信息。 我不想在我的任何类中使用@JsonTypeInfo注释。 上述注释是否有替代方案。 如果是,请举例说明如何做到这一点。
问题内容: 我有一个超类的方法: 在其子类之一中,我想执行以下操作: 但这是行不通的。问题是我有一个超类的引用,并且我想只在其中一个子类中调用此方法。 问题答案: 您不能在重写方法中更改类型参数的数量。对于您的情况,返回类型显然会覆盖失败。但是,即使返回类型相同,您的方法仍然不会被覆盖等效,因为您应该覆盖的方法中的类型参数更少。 从JLS- 方法签名 : 如果两个方法具有相同的名称和参数类型,则它
我正在使用FCM通知。由于某些问题,当我使用FCM云控制台发送时,我没有收到通知。 这是我的两节课。 我注意到从未调用public void onTokenRefresh()。所以我用了它 字符串refreshedToken=FireBaseInstanceId.getInstance().getToken(); 在我的主要活动中我得到了标记。可能FirebaseInstanceIdService
但是,如果我在两个连续的'>'字符之间放置空格,则不会产生错误。ANTLR无法区分上述规则和用于识别移位表达式的规则,但我不知道如何修改语法来解决这种歧义。如有任何帮助,不胜感激。
我有很多图像在绘制,我希望放入一个数组。手动将它们放入数组会花费太长的时间和代码。我想知道是否有一种方法来循环,如下所示:
包装问题; 导入java.util.List;导入java.util.LinkedList; 公共类SinglyListSize{int size=0; }