FirebaseInstanceIdService устарела - PullRequest
0 голосов
/ 01 июля 2018

Надеюсь, что все вы знаете об этом классе, который используется для получения токена уведомления всякий раз, когда обновляется токен уведомления 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


UPDATE

Эта проблема была исправлена.

Поскольку Google устарел FirebaseInstanceService,

Я задал вопрос, чтобы найти способ, и я узнал, что мы можем получить токен из FirebaseMessagingService ,

Как и раньше, когда я задавал вопрос, документы не обновлялись, но теперь документы Google обновлены, поэтому для получения дополнительной информации см. Этот документ Google: FirebaseMessagingService

СТАРЫЙ От: FirebaseInstanceService (устарело)

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);
}

NEW От: FirebaseMessagingService

@Override
public void onNewToken(String s) {
    super.onNewToken(s);
    Log.d("NEW_TOKEN",s);
}

Спасибо.

Ответы [ 6 ]

0 голосов
/ 15 декабря 2018

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);
    }
}
0 голосов
/ 28 ноября 2018

Kotlin допускает даже более простой код, чем показано в других ответах.

Чтобы получить новый токен всякий раз, когда он обновляется:

class MyFirebaseMessagingService: FirebaseMessagingService() {

    override fun onNewToken(token: String?) {
        Log.d("FMS_TOKEN", token)
    }
    ...
}

Чтобы получить токен из любого места во время выполнения:

FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener {
    Log.d("FMS_TOKEN", it.token)
}
0 голосов
/ 29 октября 2018

В KOTLIN: - Если вы хотите сохранить Токен в БД или общих настройках, переопределите onNewToken в FirebaseMessagingService

override fun onNewToken(token: String?) {
        super.onNewToken(token)
    }

Получить токен во время выполнения, используйте

FirebaseInstanceId.getInstance().instanceId
                        .addOnSuccessListener(this@SplashActivity) { instanceIdResult ->
                            val mToken = instanceIdResult.token
                            println("printing  fcm token: $mToken")
                        }
0 голосов
/ 10 июля 2018

А это:

FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken()

Предполагается, что решение устарело:

FirebaseInstanceId.getInstance().getToken()

EDIT

FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken() может вызвать исключение, если задача еще не выполнена, поэтому метод, описанный Nilesh Rathod (с .addOnSuccessListener), является правильным способом сделать это.

Котлин:

FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener(this) { instanceIdResult ->
        val newToken = instanceIdResult.token
        Log.e("newToken", newToken)
    }
0 голосов
/ 02 июля 2018

Да 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());
    }
}

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 проекта.

Это генерирует ID экземпляра, если он еще не существует, который начинает периодически отправлять информацию в серверную часть Firebase.

Returns

  • Задача, которую вы можете использовать, чтобы увидеть результат через 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())

    }
}
0 голосов
/ 01 июля 2018

пожарный здесь

Проверьте справочную документацию для FirebaseInstanceIdService:

Этот класс устарел.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...