FirebaseInstanceIdService устарел
Надеюсь, что вы все знаете об этом классе, который использовался для получения токена уведомлений всякий раз, когда обновлялся токен для базы данных firebase, мы получаем обновленный токен из этого класса. Из следующего метода.
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
}
Чтобы использовать это, поскольку я хочу реализовать FCM, я расширил MyClass из FirebaseInstanceIdService
Но, показывая, что FirebaseInstanceIdService устарел
Кто-нибудь знает это? Какой метод или класс я должен использовать вместо этого, чтобы получить обновленный токен, поскольку это устарело.
Я использую: implementation 'com.google.firebase:firebase-messaging:17.1.0'
Я проверил документ, потому что об этом ничего не сказано. : ДОКУМЕНТ НАСТРОЙКИ FCM
ОБНОВИТЬ
Эта проблема исправлена.
Поскольку Google не рекомендовал FirebaseInstanceService
,
Я задал вопрос, чтобы найти способ, и я узнаю, что мы можем получить токен из FirebaseMessagingService,
Как и раньше, когда я спросил, что документы вопроса не были обновлены, но теперь обновлены документы Google, поэтому для получения дополнительной информации см. Этот документ google: FirebaseMessagingService
OLD От: FirebaseInstanceService (Устаревший)
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
}
НОВОЕ От: FirebaseMessagingService
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Log.d("NEW_TOKEN",s);
}
Благодарю.
Ответы
Ответ 1
firebaser здесь
Проверьте справочную документацию для FirebaseInstanceIdService
:
Этот класс устарел.
В пользу переопределения onNewToken
в FirebaseMessagingService
. Как только это будет реализовано, эту услугу можно безопасно удалить.
Как ни странно, JavaDoc для FirebaseMessagingService
пока не упоминает метод onNewToken
. Похоже, что не вся обновленная документация еще не была опубликована. Я опубликовал внутреннюю проблему, чтобы получить обновления для опубликованных ссылочных документов, а также обновить образцы в руководстве.
Тем временем и старые/устаревшие вызовы, и новые должны работать. Если у вас возникли проблемы с этим, отправьте код, и я посмотрю.
Ответ 2
Да FirebaseInstanceIdService
устарела
ОТ ДОКУМЕНТОВ: - Этот класс устарел. В пользу overriding onNewToken
в FirebaseMessagingService
. Как только это будет реализовано, этот сервис может быть безопасно удален.
Нет необходимости использовать службу FirebaseInstanceIdService
для получения токена FCM. Вы можете безопасно удалить службу FirebaseInstanceIdService
Теперь нам нужно @Override onNewToken
получить Token
в FirebaseMessagingService
ОБРАЗЕЦ КОДА
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
Log.e("NEW_TOKEN", s);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> params = remoteMessage.getData();
JSONObject object = new JSONObject(params);
Log.e("JSON_OBJECT", object.toString());
String NOTIFICATION_CHANNEL_ID = "Nilesh_channel";
long pattern[] = {0, 1000, 500, 1000};
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "Your Notifications",
NotificationManager.IMPORTANCE_HIGH);
notificationChannel.setDescription("");
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.setVibrationPattern(pattern);
notificationChannel.enableVibration(true);
mNotificationManager.createNotificationChannel(notificationChannel);
}
// to diaplay notification in DND Mode
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = mNotificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID);
channel.canBypassDnd();
}
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
notificationBuilder.setAutoCancel(true)
.setColor(ContextCompat.getColor(this, R.color.colorAccent))
.setContentTitle(getString(R.string.app_name))
.setContentText(remoteMessage.getNotification().getBody())
.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.ic_launcher_background)
.setAutoCancel(true);
mNotificationManager.notify(1000, notificationBuilder.build());
}
}
РЕДАКТИРОВАТЬ
Вам необходимо зарегистрировать ваш FirebaseMessagingService
в файле манифеста, как это
<service
android:name=".MyFirebaseMessagingService"
android:stopWithTask="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
как получить токен в своей деятельности
.getToken();
также не рекомендуется использовать, если вам нужно получить токен в своей деятельности, чем использовать getInstanceId()
Теперь нам нужно использовать getInstanceId()
для генерации токена.
getInstanceId()
Возвращает ID
и автоматически сгенерированный токен для этого проекта Firebase
.
Это генерирует ID экземпляра, если он еще не существует, который начинает периодически отправлять информацию в серверную часть Firebase.
Возвращает
- Задача, которую вы можете использовать, чтобы увидеть результат через
InstanceIdResult
который содержит ID
и token
.
ОБРАЗЕЦ КОДА
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this, new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
String newToken = instanceIdResult.getToken();
Log.e("newToken",newToken);
}
});
РЕДАКТИРОВАТЬ 2
Вот рабочий код для котлина
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(p0: String?) {
}
override fun onMessageReceived(remoteMessage: RemoteMessage?) {
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val NOTIFICATION_CHANNEL_ID = "Nilesh_channel"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationChannel = NotificationChannel(NOTIFICATION_CHANNEL_ID, "Your Notifications", NotificationManager.IMPORTANCE_HIGH)
notificationChannel.description = "Description"
notificationChannel.enableLights(true)
notificationChannel.lightColor = Color.RED
notificationChannel.vibrationPattern = longArrayOf(0, 1000, 500, 1000)
notificationChannel.enableVibration(true)
notificationManager.createNotificationChannel(notificationChannel)
}
// to diaplay notification in DND Mode
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = notificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID)
channel.canBypassDnd()
}
val notificationBuilder = NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
notificationBuilder.setAutoCancel(true)
.setColor(ContextCompat.getColor(this, R.color.colorAccent))
.setContentTitle(getString(R.string.app_name))
.setContentText(remoteMessage!!.getNotification()!!.getBody())
.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.ic_launcher_background)
.setAutoCancel(true)
notificationManager.notify(1000, notificationBuilder.build())
}
}
Ответ 3
И это:
FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken()
предположим, что это решение устарело:
FirebaseInstanceId.getInstance().getToken()
РЕДАКТИРОВАТЬ
FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken()
может создавать исключение, если задача еще не завершена, поэтому метод, описанный Нилешем Ратодом (с .addOnSuccessListener
), является правильным способом его выполнения.
Котлин:
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener(this) { instanceIdResult ->
val newToken = instanceIdResult.token
Log.e("newToken", newToken)
}
Ответ 4
3 изменения:
- Удалите службу
FirebaseInstanceIdService
, поскольку они объединили ее в FirebaseMessagingService
. -
Используйте свой старый FirebaseMessagingService
. и переопределить onNewToken()
как onNewToken()
ниже.
public class FCMService extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
Log.d("FCM_TOKEN", s);
// save in SharedPreference for future use
}
}
-
Чтобы получить токен во время выполнения, вы можете использовать FirebaseInstanceId.getInstance().getInstanceId()
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this, new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
String token = instanceIdResult.getToken();
Log.d("FCM_TOKEN",token);
}
});
Все это!
Из документации FirebaseInstanceIdService.
FirebaseInstanceIdService
Этот класс устарел. В пользу переопределения onNewToken в FirebaseMessagingService. Как только это будет реализовано, этот сервис может быть безопасно удален.
Ответ 5
В KOTLIN: - Если вы хотите сохранить токен в БД или общие настройки, переопределите onNewToken в FirebaseMessagingService.
override fun onNewToken(token: String?) {
super.onNewToken(token)
}
Получить токен во время выполнения, использовать
FirebaseInstanceId.getInstance().instanceId
.addOnSuccessListener([email protected]) { instanceIdResult ->
val mToken = instanceIdResult.token
println("printing fcm token: $mToken")
}
Ответ 6
Kotlin допускает даже более простой код, чем тот, который показан в других ответах.
Чтобы получить новый токен всякий раз, когда он обновляется:
class MyFirebaseMessagingService: FirebaseMessagingService() {
override fun onNewToken(token: String?) {
Log.d("FMS_TOKEN", token)
}
...
}
Чтобы получить токен из любой точки во время выполнения:
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener {
Log.d("FMS_TOKEN", it.token)
}
Ответ 7
FirebaseinstanceIdService
устарела. Так что придется использовать "FirebaseMessagingService"
Море изображение пожалуйста:
![enter image description here]()
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Log.e("NEW_TOKEN",s);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
}
}
Ответ 8
FirebaseInstanceId.getInstance().getId();