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

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

127481 次浏览

更新答案

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

例如:

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

老答案

正如 文件所言:

这种方法是不赞成的。 支持 getInstanceId ()。

GetInstanceId () 将返回一个 Task with 和 InstanceIdResult,如下所示:

 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: (Yes, "Messaging", not "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
}

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

不推荐使用 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);
}}

InAndroidManifest.xml

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