我想知道在getToken()被弃用后,获取Firebase令牌以发送推送通知的正确方法是什么。
我想知道在getToken()被弃用后,获取Firebase令牌以发送推送通知的正确方法是什么。
更新的答案
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
}
这样一来,代码就会更加精简,甚至不需要使用第一种方法。
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);
}
});