onnewtoken - ontokenrefresh deprecated android




現在使用什麼FirebaseInstanceId.getInstance()。getToken()已被棄用 (2)

FirebaseInstanceIdService已棄用。

只需覆蓋 FirebaseMessagingService onNewToken()

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>

getToken() 這也是不推薦使用的。

如果您需要在活動中獲取令牌,請使用以下代碼。

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this,  new OnSuccessListener<InstanceIdResult>() {
     @Override
     public void onSuccess(InstanceIdResult instanceIdResult) {
           String mToken = instanceIdResult.getToken();
           Log.e("Token",mToken);
     }
 });

這個問題在這裡已有答案:

我想知道在不推薦使用getToken()的情況下,獲取Firebase令牌以發送推送通知的正確方法是什麼。


正如 documentation 所說:

此方法已棄用 。 贊成getInstanceId()。

getInstanceId() 將返回一個帶有InstanceIdResult的Task。 像這樣:

 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 
                }
});

更新 :雖然這種方法確實取代了 FirebaseInstanceId.getInstanceId()。getToken()的使用 ,但它並沒有解決 FirebaseInstanceIdService 也被棄用的事實,而是留下了另一個問題:在哪裡使用它? 它可以在任何活動上下文中使用,它將始終返回令牌。 但是,如果我們只想在創建時獲取令牌並且很少更新它,該怎麼辦? 為此,您應該從舊的 FirebaseMessagingService 實現覆蓋新方法 onNewToken :(是,“消息”,而不是“InstanceId”)

@Override
public void onNewToken(String s) {
    super.onNewToken(s);
    String deviceToken = s;
    // Do whatever you want with your token now
    // i.e. store it on SharedPreferences or DB
    // or directly send it to server 
}

這種方式代碼將保持更精簡,甚至不需要使用第一種方法。





firebase-cloud-messaging