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。
只需覆盖
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); }} |
在
1 2 3 4 5 6 7 | <service android:name=".LatestFirebaseMessagingService" android:stopWithTask="false"> <intent-filter> </intent-filter> </service> |
如果您需要在活动中获取令牌,请使用以下代码。
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); } }); |