Java 登录活动后FirebaseMessagingService如何启动
是否可以在某些活动后启动FirebaseMessagingService?因为当我的应用程序启动时,Java 登录活动后FirebaseMessagingService如何启动,java,android,firebase,firebase-cloud-messaging,Java,Android,Firebase,Firebase Cloud Messaging,是否可以在某些活动后启动FirebaseMessagingService?因为当我的应用程序启动时,FirebaseMessagingService调用onNewToken(字符串令牌)->sendRegistrationToServer(令牌),但我只需要在用户登录后发送令牌,这样我就可以映射用户和令牌。最好的选择是,FirebaseMessagingService跳过登录和注册活动,然后启动。但我不确定这是否可以做到?如何操作?如果您有其他活动,只需将发送注册到服务器(令牌)移动到下一个活动
FirebaseMessagingService
调用onNewToken(字符串令牌)->sendRegistrationToServer(令牌)
,但我只需要在用户登录后发送令牌,这样我就可以映射用户和令牌。最好的选择是,FirebaseMessagingService跳过登录和注册活动,然后启动。但我不确定这是否可以做到?如何操作?如果您有其他活动,只需将发送注册到服务器(令牌)
移动到下一个活动。通过Intent
传递值,然后发送
编辑:下面是按需生成令牌(KOTLIN)的示例代码
您可以忽略sendRegistrationToServer
。我不用它。如您所见,我将令牌保存在SharedReferences中。成功登录后,检索它(可以在下一个活动中),然后将其发送到服务器
相关链接供您阅读:让FirebaseMessagingService在应用程序启动时按预期运行。调用onNewToken时,将令牌保存到首选项中
登录后,从首选项获取本地令牌并发送到您的服务器。您可以使用类似于isLogin的标志处理并签入您的onNewToken()。即使您正在上传到服务器,您也需要在要添加令牌的用户中输入用户id。。但是,当您未登录时,您没有用户id,因此在这种情况下,您还可以检查用户id是否不为null或不为空。当您获得用户id时,您可以使用下面的kotlin方法向服务器添加令牌
fun getFirebaseDeviceToken(context: Context?) {
FirebaseInstanceId.getInstance().instanceId
.addOnCompleteListener(OnCompleteListener { task ->
if (!task.isSuccessful) {
return@OnCompleteListener
}
if (task.result != null) {
val token = task.result!!.token
if (context != null) {
uploadUserDeviceInfo(context, token)
}
}
})
}
这是不可能的,因为FirebaseMessagingService在应用程序启动时独立调用这些方法,或者我不理解我对SharedReferences的一些想法,但是当令牌过期或用户清除数据时会发生什么?当用户清除应用程序数据时,您没有任何控制权。如果发生这种情况,用户可能必须再次重新登录,然后按需再次生成instanceId,再次将其发送到服务器以便更新。FirebaseMessagingService在启动应用程序后触发一次登录后方法onNewToken()不被调用。您可以使用answerI中提到的方法随时获取令牌,但令牌过期或用户清除数据时会发生什么情况当令牌过期onNewToken将根据首选项更新令牌。如果您在应用程序打开时有“自动登录”或“签入”请求,您可以使用它发送最新令牌。最简单的方法是将FCM_令牌作为头发送到您的请求中。这样,它总是保持更新。
fun getFirebaseDeviceToken(context: Context?) {
FirebaseInstanceId.getInstance().instanceId
.addOnCompleteListener(OnCompleteListener { task ->
if (!task.isSuccessful) {
return@OnCompleteListener
}
if (task.result != null) {
val token = task.result!!.token
if (context != null) {
uploadUserDeviceInfo(context, token)
}
}
})
}