FirebaseInstanceId.getInstance().getToken()已经被弃用,现在应该使用什么方法?

133

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


简单 https://stackoverflow.com/a/52120871/6891563 - Khemraj Sharma
通过FirebaseInstanceId.getInstance().getId()快速访问。 - smj
2个回答

236

更新的答案

FirebaseInstanceId已经被弃用,但现在你可以使用FirebaseMessaging.getInstance().token

例如:

FirebaseMessaging.getInstance().token.addOnSuccessListener { result ->
        if(result != null){
            fbToken = result
            // DO your thing with your firebase token
        }
}

原回答已过时

根据文档所述:

此方法已过时,推荐使用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上下文中使用,它将始终返回token。但是如果我们只想在创建时和很少更新时获取token怎么办呢? 为此,您应该重写我们旧的`FirebaseMessagingService`实现中的新方法`onNewToken`: (是的,“Messaging”,而不是“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
抱歉,我不理解。我的英语不好吗?(如果我犯了错误,对不起) - Bhaskar Jyoti Dutta
7
当你需要在回调函数之外使用令牌时,这不是一个解决方案。这是不可行的。 - Pedro Paulo Amorim
2
@PedroPauloAmorim 我同意。newToken 似乎不会被100%调用,因此需要另一种方法来检索现有的令牌。 - behelit
1
这又被弃用了。 - DjongaNelson Lontrowski
2
FirebaseInstallations.getInstance().getToken(true) 不提供消息令牌,每次启动后都会更改。 - TootsieRockNRoll
显示剩余23条评论

37

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

5
现在FirebaseInstanceId已经被弃用了,耶! - mliu
@mliu,你找到任何解决方案了吗? - Hiraeths
6
FirebaseMessaging.getInstance().getToken()是获取当前注册令牌的新方法...来源: https://firebase.google.com/docs/cloud-messaging/android/client#retrieve-the-current-registration-token - Jeremiah Polo
因此,那已经过时了。 - zeroDivider
请注意:如果您没有像您想象的那样频繁地收到onNewToken,那么如果您有多用户支持,这将会很麻烦。 - Kibotu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接