我想知道既然不赞成使用getToken(),那么获取Firebase令牌以发送推送通知的正确方法是什么。
答案 0 :(得分:99)
不推荐使用此方法。 支持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);
}
});