FirebaseInstanceId.getInstance()。getToken()已被弃用,现在该使用什么

时间:2018-07-01 16:44:33

标签: android firebase push-notification firebase-cloud-messaging

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

2 个答案:

答案 0 :(得分:99)

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 的事实。另一个问题是:在哪里使用? 它可以在任何Activity上下文中使用,它将始终返回令牌。但是,如果我们只想在创建时以及很少更新令牌时获取令牌怎么办? 为此,您应该覆盖旧的 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 
}

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

答案 1 :(得分:24)

FirebaseInstanceIdService已弃用。

只需覆盖onNewToken()中的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>

getToken()也已弃用。!

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

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