Firebase не отправляет уведомление после генерации нового токена - PullRequest
0 голосов
/ 26 октября 2019

Я использую Firebase для получения push-уведомлений. Я получаю токен FCM при первой установке. Выйдя из приложения, я удаляю токен FCM и создаю новый при следующем входе в систему.

Все работает нормально, firebase предоставляет мне новый токен. но я не могу получить уведомление от firebase.

Ниже приведен код, который я использую.

Удалить токен

FirebaseInstanceId.getInstance().deleteInstanceId();

Создать новый токен

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
                            @Override
                            public void onSuccess(InstanceIdResult instanceIdResult) {
                                token=instanceIdResult.getToken();
                            }
                        });

AndroidManifest.xml

 <service
            android:name="FirebaseMessaging.EDOFirebaseService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>

     </service>

Пожалуйста, помогите мне выяснить, в чем проблема. Я выполняю все шаги, описанные в документации по Firebase.

1 Ответ

0 голосов
/ 26 октября 2019

Документация гласит, что 'deleteInstanceId' является блокирующей функцией и ее не следует вызывать в главном потоке. Вы можете вызвать его в фоновом потоке и после завершения создать новый токен.

public void logoutFromFCM() {

        // Disable auto initilization
        FirebaseMessaging.getInstance().setAutoInitEnabled(false);

        //Delete instance
        new Thread(() -> {
            try {

                FirebaseInstanceId.getInstance().deleteInstanceId();
                 //TODO Generate new token after this

            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
    }

Также вы можете установить правильный статус для автоматической инициализации

FirebaseMessaging.getInstance().setAutoInitEnabled(false);

Вы также можете установить егочерез файл манифеста

  <meta-data android:name="firebase_messaging_auto_init_enabled"
             android:value="false" />

Также убедитесь, что (1) вы отправляете тело сообщения в правильном формате (тип данных или тип уведомления) и обрабатываете правильное состояние переднего плана / фона. (2) Вы отправляете правильные токены. (3) Отправил сообщение в правильном формате (данные или полезные данные уведомления) с сервера. Получить его в правильном формате от Android-клиента. См. этот ответ

Кроме того, на практике нет необходимости удалять токен для выхода из системы. Просто отписаться или отключить при выходе. И вы можете переназначить токен новому или старому пользователю при следующем входе в систему.

...