希望你们所有人都知道这个类,用来获取通知令牌,每当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);
}

当前回答

在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")
                        }

其他回答

你可以在你的活动中使用这个方法,这对我很有用。

private void registerInBackground() {
    FirebaseApp.initializeApp(SplashActivity.this);
    FirebaseMessaging.getInstance().getToken().addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
            String token = task.getResult();
        }
    });
}

在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")
                        }

这:

FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken()

假定为已弃用的解决方案:

FirebaseInstanceId.getInstance().getToken()

EDIT

.getToken .getResult .getInstanceId FirebaseInstanceId.getInstance () () () () 如果任务还没有完成,可以产生异常,所以Nilesh Rathod描述的方法(使用. addonsuccesslistener)是正确的方法。

科特林:

FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener(this) { instanceIdResult ->
        val newToken = instanceIdResult.token
        Log.e("newToken", newToken)
    }

对于kotlin,我使用以下方法

val fcmtoken = FirebaseMessaging.getInstance().token.await()

对于扩展函数

public suspend fun <T> Task<T>.await(): T {
    // fast path
    if (isComplete) {
        val e = exception
        return if (e == null) {
            if (isCanceled) {
                throw CancellationException("Task $this was cancelled normally.")
            } else {
                @Suppress("UNCHECKED_CAST")
                result as T
            }
        } else {
            throw e
        }
    }

    return suspendCancellableCoroutine { cont ->
        addOnCompleteListener {
            val e = exception
            if (e == null) {
                @Suppress("UNCHECKED_CAST")
                if (isCanceled) cont.cancel() else cont.resume(result as T)
            } else {
                cont.resumeWithException(e)
            }
        }
    }
}

新方式

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