希望你们所有人都知道这个类,用来获取通知令牌,每当firebase通知令牌被刷新时,我们从这个类获得刷新令牌,从下面的方法。

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);
}

使用这个,因为我想实现FCM,我扩展MyClass从FirebaseInstanceIdService

但是,显示FirebaseInstanceIdService已弃用

有人知道吗?, 我应该使用什么方法或类,而不是这个来获得刷新令牌,因为这是不赞成的。

我正在使用:实现'com.google.firebase:firebase-messaging:17.1.0'

我检查了文件,没有提到这一点。: FCM设置文件


更新

此问题已修复。

由于谷歌已弃用FirebaseInstanceService,

我问了这个问题来找到方法,我知道我们可以从FirebaseMessagingService获得令牌,

像以前一样,当我问问题时,文档没有更新,但现在谷歌文档更新了,因此要了解更多信息,请参考谷歌文档:FirebaseMessagingService

From: FirebaseInstanceService(已弃用)

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);
}

NEW From: FirebaseMessagingService

@Override
public void onNewToken(String s) {
    super.onNewToken(s);
    Log.d("NEW_TOKEN",s);
}

当前回答

在这里重火力点

查看FirebaseInstanceIdService的参考文档:

这个类已弃用。 支持在FirebaseMessagingService中覆盖onNewToken。一旦实现了该功能,就可以安全地删除该服务。

奇怪的是,JavaDoc for FirebaseMessagingService还没有提到onNewToken方法。似乎还没有发布所有更新的文档。我已经提交了一个内部问题,以更新参考文档的发布,并更新指南中的示例。

与此同时,旧的/废弃的调用和新的调用都应该工作。如果你有任何问题,张贴代码,我会看一下。

其他回答

在KOTLIN:-如果你想保存Token到DB或共享首选项,然后覆盖onNewToken在FirebaseMessagingService

override fun onNewToken(token: String) {
        super.onNewToken(token)
    }

在运行时获取令牌,使用

FirebaseInstanceId.getInstance().instanceId
                        .addOnSuccessListener(this@SplashActivity) { instanceIdResult ->
                            val mToken = instanceIdResult.token
                            println("printing  fcm token: $mToken")
                        }

从com.google.firebase:firebase-bom:28.4.2,这样做的方法是:

.token.result FirebaseMessaging.getInstance ()

不过,由于这是一个Task,它不会以这种方式返回值。您需要使用回调来等待它。

一个很好的解决方法是:

@WorkerThread
fun <TResult> Task<TResult>.awaitForResult(): Task<TResult> {
    val countDownLatch = CountDownLatch(1)
    this.addOnCompleteListener {
        countDownLatch.countDown()
    }
    countDownLatch.await()
    return this
}

@WorkerThread
fun <TResult> Task<TResult>.awaitForResultOrNull(): Task<TResult>? {
    val task = awaitForResult()
    return if (task.isSuccessful)
        return task else null
}

举个用法的例子:

val regId : String? = FirebaseMessaging.getInstance().token.awaitForResultOrNull()?.result

Kotlin允许比其他答案中显示的代码更简单的代码。

每次刷新时获取新令牌:

class MyFirebaseMessagingService: FirebaseMessagingService() {

    override fun onNewToken(token: String?) {
        Log.d("FMS_TOKEN", token)
    }
    ...
}

要在运行时从任何地方获取令牌:

FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener {
    Log.d("FMS_TOKEN", it.token)
}

下面是c# /Xamarin的解决方案。Android:

var token = await FirebaseInstallations.Instance.GetToken(forceRefresh: false).AsAsync<InstallationTokenResult>();

新方式

FirebaseMessaging.getInstance().getToken().addOnCompleteListener(task -> Log.e(TAG, "Token: "+task.getResult()));