Я хотел бы знать, что было бы правильным способом получить токен Firebase для отправки push-уведомления теперь, когда getToken() устарел.
Что использовать теперь, когда FirebaseInstanceId.getInstance(). GetToken() устарел
Ответ 1
Добавляя к Facundo ответ, у службы FirebaseMessagingService
теперь есть метод onNewToken(String token)
переопределить его, чтобы получить новый токен.
Примечание: я не могу опубликовать комментарий из-за недостаточной репутации
Ответ 2
Как говорится в документации:
Этот метод устарел. В пользу getInstanceId().
Используйте getInstanceId(). Он вернет Task с и 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
}
});
UPDATE: хотя верно, что этот подход буквально заменит использование FirebaseInstanceId.getInstanceId(). GetToken(), он не решает тот факт, что FirebaseInstanceIdService также устарел, оставив нам другой вопрос: где его использовать? Он может использоваться в любом контексте Activity, чтобы он всегда возвращал токен. Но что, если мы хотим получить токен только при создании и когда он редко обновляется? Для этого вы должны переопределить новый метод onNewToken из нашей старой реализации FirebaseMessagingService: (Да, "Сообщения", а не "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
}
Таким образом, код будет оставаться более компактным и даже не понадобится для использования первого подхода.
Ответ 3
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);
}
});
Ответ 4
вы можете расширить FirebaseInstanceIdService и реализовать onTokenRefresh(), и в этом методе либо отправить его на ваш серверный сервер, либо сохранить его в Prefs для последующего использования.
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// If you want to send messages to this application instance or
// manage this apps subscriptions on the server side, send the
// Instance ID token to your app server.
sendRegistrationToServer(refreshedToken);
//or if you want to wait until your user is logged in
//save it in your preferences
saveTokenInPreferences(refreshedToken);
}