关于android:不推荐使用FirebaseInstanceId.getInstance()。getToken()

What to use now that FirebaseInstanceId.getInstance().getToken() is deprecated

本问题已经有最佳答案,请猛点这里访问。

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


如文档所述:

This method was deprecated.
In favour of getInstanceId().

getInstanceId()将返回带有和InstanceIdResult的Task。像这样:

1
2
3
4
5
6
7
8
9
 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也已被弃用的事实,这给我们带来了另一个问题:在哪里使用它?
它可以在任何Activity上下文中使用,它将始终返回令牌。但是,如果我们只想在创建时以及很少更新令牌时获取令牌怎么办?
为此,您应该从旧的FirebaseMessagingService实现中重写onNewToken的新方法:
(是的,"消息传递",而不是" InstanceId")

1
2
3
4
5
6
7
8
@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
}

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


不推荐使用FirebaseInstanceIdService。

只需覆盖FirebaseMessagingService中的onNewToken()

1
2
3
4
5
6
7
8
9
10
11
12
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

1
2
3
4
5
6
7
<service
        android:name=".LatestFirebaseMessagingService"
        android:stopWithTask="false">
        <intent-filter>
           
        </intent-filter>
</service>

getToken()也已弃用。

如果您需要在活动中获取令牌,请使用以下代码。

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