Есть ли способ удалить push-уведомления в FCM? - PullRequest
0 голосов
/ 03 февраля 2019

В моем приложении я предлагаю видео и голосовые звонки между пользователями.Для этого я использую базу данных Firebase Realtime и FCM.

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

data: { 
    channel_id: channel_id,
    user_id: user_id
}

В моем классе FirebaseMessagingService я получаю данные иоткройте видео / вызов, например, так:

if(remoteMessage.getData().size > 0) {
        Intent intent = new Intent(this, VideoCallActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.putExtra("channel_id", remoteMessage.getData().get("channel_id"));
        intent.putExtra("user_id", remoteMessage.getData().get("user_id"));
        getApplicationContext().startActivity(intent);

    }

Все работает отлично, даже когда приложение находится в фоновом режиме.Тем не менее, я сталкиваюсь с этой проблемой:

Если у пользователя не было подключения к Интернету, когда он вызывался, при подключении к Интернету его телефон автоматически запускает VideoCallActivity, даже если вызов был прерван (повызывающего абонента) и уведомление удалено из базы данных Firebase в реальном времени.

Так, пожалуйста, есть ли способ отменить отправленные уведомления, или узнать состояние доставки этих уведомлений, или другой способ сделать это?Это позволит мне добавить список пропущенных звонков для пользователей.

Спасибо!

1 Ответ

0 голосов
/ 03 февраля 2019

В подобном сценарии мне известны два варианта:

  1. Отправить еще одно сообщение FCM при отмене вызова
  2. Использовать FCM только для отправки сообщения

Отправить еще одно сообщение FCM при отмене вызова

Одним из свойств, которое вы можете дать сообщению FCM, является collapse_key.Когда вы отправляете сообщение с collapse_key, это сообщение заменяет любое предыдущее сообщение тем же значением collapse_key.

Вы можете использовать это для отправки сообщения «Нет, забудь об этом», когда пользовательОтменяет вызов.

Используйте только FCM для отправки тикла

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

Таким образом: если вызов все еще находится в базе данных, приложение может его забрать.Но если в базе данных нет вызова, он ничего не может сделать.

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

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