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 docs обновляется так для получения дополнительной информации, обратитесь к этому google doc:FirebaseMessagingService
старый от: FirebaseInstanceService (устаревший)
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
}
NEW From : FirebaseMessagingService
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Log.d("NEW_TOKEN",s);
}
спасибо.
4 ответа:
огнемет здесь
Регистрация справочная документация
FirebaseInstanceIdService
:этот класс был устаревшим.
в пользу игнорирования
onNewToken
inFirebaseMessagingService
. После того, как это было реализовано, эта служба может быть безопасно удалена.как ни странно JavaDoc для
FirebaseMessagingService
не упоминаетonNewToken
метод пока нет. Похоже, что не вся обновленная документация еще не была опубликована. Я подал внутреннюю проблему, чтобы получить обновления для публикации справочных документов, а также для обновления образцов в руководстве.в то же время как старые/устаревшие вызовы, так и новые должны работать. Если у вас возникли проблемы с, размещаете код и я посмотрю.
да
FirebaseInstanceIdService
осуждаетсяИЗ ДОКУМЕНТОВ :- этот класс был устаревшим. В пользу
overriding onNewToken
наFirebaseMessagingService
. После того, как это было реализовано, эта служба может быть безопасно удалена.нет необходимости использовать
FirebaseInstanceIdService
сервис для получения токена FCM вы можете безопасно удалитьFirebaseInstanceIdService
сервистеперь нам нужно
@Override onNewToken
getToken
inFirebaseMessagingService
ПРИМЕР КОДА
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()); } }
EDIT
вам нужно зарегистрировать свою
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.
возвращает
- задач которые вы можете использовать, чтобы увидеть результат через
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); } });
EDIT 2
вот рабочий код для kotlin
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()) } }
и так:
FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken()
предположим, что решение устарело:
FirebaseInstanceId.getInstance().getToken()
EDIT
FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken()
может выдать исключение, если задача еще не выполнена, поэтому метод ведьмы Нилеш Ратод описан (с.addOnSuccessListener
) - это правильный способ сделать это.Котлин:
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener(this) { instanceIdResult -> val newToken = instanceIdResult.token Log.e("newToken", newToken) }
Очистить Ответа
С FirebaseInstanceIdService документация.
FirebaseInstanceIdService
этот класс является устаревшим. В пользу переопределения onNewToken в FirebaseMessagingService. После того, как это было реализовано, эта служба может быть безопасно удалена.
изменения, которые будут реализованы:
- удалить службу
FirebaseInstanceIdService
, а они слили его вFirebaseMessagingService
.- переопределить
onNewToken()
наFirebaseMessagingService
.просто используйте свой старый
FirebaseMessagingService
. и переопределить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); } });
вот и все, да!