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 76

4 ответа:

огнемет здесь

Регистрация справочная документация FirebaseInstanceIdService:

этот класс был устаревшим.

в пользу игнорирования onNewToken in FirebaseMessagingService. После того, как это было реализовано, эта служба может быть безопасно удалена.

как ни странно JavaDoc для FirebaseMessagingService не упоминает onNewToken метод пока нет. Похоже, что не вся обновленная документация еще не была опубликована. Я подал внутреннюю проблему, чтобы получить обновления для публикации справочных документов, а также для обновления образцов в руководстве.

в то же время как старые/устаревшие вызовы, так и новые должны работать. Если у вас возникли проблемы с, размещаете код и я посмотрю.

даFirebaseInstanceIdService осуждается

ИЗ ДОКУМЕНТОВ :- этот класс был устаревшим. В пользу overriding onNewToken на FirebaseMessagingService. После того, как это было реализовано, эта служба может быть безопасно удалена.

нет необходимости использовать FirebaseInstanceIdService сервис для получения токена FCM вы можете безопасно удалить FirebaseInstanceIdService сервис

теперь нам нужно @Override onNewToken get Token in 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());
    }
}

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. После того, как это было реализовано, эта служба может быть безопасно удалена.

изменения, которые будут реализованы:

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

вот и все, да!