gpt4 book ai didi

android - 检测何时从服务外部生成新的FCM token

转载 作者:行者123 更新时间:2023-12-02 13:33:57 25 4
gpt4 key购买 nike

当用户注销时,我需要清理firebase token ,并且需要阻止他从后端获取推送通知。
到目前为止,我所做的是
我已经创建了firebase服务,并通过以下代码控制自动 token 的生成
在 list 中

<!-- FCM: Disable auto-init -->
<meta-data android:name="firebase_messaging_auto_init_enabled"
android:value="false" />
<meta-data android:name="firebase_analytics_collection_enabled"
android:value="false" />

在注销 Activity 中,
 Thread {
try {
FirebaseInstanceId.getInstance().deleteInstanceId()
FirebaseMessaging.getInstance().isAutoInitEnabled = true
FirebaseMessaging.getInstance().isAutoInitEnabled = false
} catch (e: IOException) {
e.printStackTrace()
}
}.start()

然后通过以下代码在“登录 Activity ”中获取新 token ,
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener {
devicePushToken = it.token
sharedPreferences.setValue(Constant.FCM_PUSH, devicePushToken)
Log.e(TAG + '2', it?.token.toString())
}

但是问题是,它返回已删除的旧FCM token 。生成新 token 需要一些时间。它是在服务OnNewToken方法中正确生成的,但是我找不到使用从服务到Login Activity的回调来获取新 token 的方法。此外,如果我等待一段时间并再次使用上述请求(FirebaseInstanceId.getInstance ().instanceId.addOnSuccessListener)方法它返回正确的 token

最佳答案

我自己找到了这个问题的答案,
因此,我将把它发布给像我这样面临此问题的任何人...

我已经使用rxJava observable实现了
首先,您需要在Firebase服务中添加一个可观察对象

companion object{
private var tokenData: PublishSubject<String> = PublishSubject.create()

fun getObservable(): PublishSubject<String> {
return tokenData
}
}

在onNewToken方法中,您可以在生成新 token 时设置可观察值,
override fun onNewToken(token: String) {
super.onNewToken(token)
tokenData.onNext(token)
}

然后,您可以通过以下方法获取新生成的 token ,
val tokenObservable: Observable<String> =PushNotificationService.getObservable()    
val tokenSubscriber = object: io.reactivex.Observer<String> {
override fun onNext(token: String) {
println("**********$token")
sharedPreferences.setValue(Constant.FCM_PUSH, token)
activity?.setResult(RequestCodes.RESULT_NAV_LOGOUT).also {
activity?.finish()
}
hideProgress()//Display a progressbar so that user can wait untill new token is generated and hide it here on success

}

override fun onComplete() {
println("onComplete")

}

override fun onError(e: Throwable) {
e.printStackTrace()
activity?.setResult(RequestCodes.RESULT_NAV_LOGOUT).also {
activity?.finish()
}
hideProgress()
}

override fun onSubscribe(s: Disposable) {
println("onSubscribe")
}
}

tokenObservable.subscribe(tokenSubscriber)

关于android - 检测何时从服务外部生成新的FCM token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59643624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com