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 изменения:

  1. Удалите службу FirebaseInstanceIdService, поскольку они объединили ее в FirebaseMessagingService.
  2. Используйте свой старый 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
        }
    }
    
  3. Чтобы получить токен во время выполнения, вы можете использовать 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();