Android 现在FirebaseInstanceId.getInstance().getToken()已不推荐使用,使用什么

Android 现在FirebaseInstanceId.getInstance().getToken()已不推荐使用,使用什么,android,firebase,push-notification,firebase-cloud-messaging,Android,Firebase,Push Notification,Firebase Cloud Messaging,我想知道,现在getToken()已被弃用,获取Firebase令牌以发送推送通知的正确方法是什么。更新的答案 FirebaseInstanceId已弃用,但现在您可以使用FirebaseInstallations.getInstance().getToken()或FirebaseMessaging.getInstance().token 例如: FirebaseInstallations.getInstance().getToken(true).addOnCompleteListener {

我想知道,现在getToken()已被弃用,获取Firebase令牌以发送推送通知的正确方法是什么。

更新的答案

FirebaseInstanceId已弃用,但现在您可以使用FirebaseInstallations.getInstance().getToken()FirebaseMessaging.getInstance().token

例如:

FirebaseInstallations.getInstance().getToken(true).addOnCompleteListener {
        fbToken = it.result!!.token
        // DO your thing with your firebase token
}
或另一种选择:

FirebaseMessaging.getInstance().token.addOnCompleteListener {
        if(it.isComplete){
            fbToken = it.result.toString()
            // DO your thing with your firebase token
        }
}
旧答案

正如上面所说:

此方法已被弃用。 支持getInstanceId()

将返回带有和InstancedResult的任务。像这样:

 FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( new OnSuccessListener<InstanceIdResult>() {                    
                @Override
                public void onSuccess(InstanceIdResult instanceIdResult) {
                      String deviceToken = instanceIdResult.getToken();
                      // Do whatever you want with your token now
                      // i.e. store it on SharedPreferences or DB
                      // or directly send it to server 
                }
});

这样代码将保持精简,甚至不需要使用第一种方法。

FirebaseInstancedService已被弃用

只需覆盖
FirebaseMessagingService

public class LatestFirebaseMessagingService extends FirebaseMessagingService {

@Override
public void onNewToken(String mToken) {
    super.onNewToken(mToken);
    Log.e("TOKEN",mToken);
}

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
}} 
AndroidManifest.xml

<service
        android:name=".LatestFirebaseMessagingService"
        android:stopWithTask="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
</service>

对不起,我不明白。我不擅长英语吗?(抱歉,如果我犯了一些错误)当您需要回调外部的令牌时,这不是解决方案。“这是不起作用的。”我同意。newToken似乎没有100%被调用,因此另一种检索现有令牌的方法是required@behelit我的解决方案是一直尝试获取它,直到系统返回一个有效值(也称为递归)。@CarlosEduardoKiLee这应该不会有任何问题。这可能不是最佳做法,因为在刷新令牌之前,它将返回相同的值;现在FirebaseInstanceId已被弃用,您是否找到了任何解决方案@mliu?FirebaseMessaging.getInstance()。getToken()是新的方法。。。。来源:因此,这是不推荐的。注意:如果你没有像你想象的那样经常收到onNewToken,如果你有多个用户的支持,那就麻烦了
<service
        android:name=".LatestFirebaseMessagingService"
        android:stopWithTask="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
</service>
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this,  new OnSuccessListener<InstanceIdResult>() {
     @Override
     public void onSuccess(InstanceIdResult instanceIdResult) {
           String mToken = instanceIdResult.getToken();
           Log.e("Token",mToken);
     }
 });