Как я могу удалить реагировать родной FireBase уведомления о нажатии на Android? - PullRequest
1 голос
/ 15 апреля 2019

Я использую response-native-firebase для настройки push-уведомлений переднего плана и фона в моем приложении.Я настроил его в соответствии с документацией: https://rnfirebase.io/docs/v4.3.x/notifications/receiving-notifications#App-in-Foreground-and-background

К приложению подключен firebase.messaging().onMessage() прослушиватель, и когда он получает уведомление на переднем плане, я использую firebase.notifications.displayNotification(notification) для отображения уведомления.

Затем слушатель onNotificationOpened получает уведомление и перемещает пользователя на другой экран.

Проблема заключается в том, что объект уведомления, полученный от onNotificationOpened, имеет действие android.intent.action.VIEW, которое запускает MainActivity каждый раз.время щелкнуло.Я понятия не имею, откуда берется эта строка действия, поскольку ни клиентское приложение, ни серверная часть не устанавливают никаких действий щелчка.Кроме того, android.intent.action.VIEW является фильтром намерений для моего MainActivity.

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

Также существует проблема, которая заключается в том, что нажатие на уведомление размонтирует и перемонтирует мой основной компонент и приводит к удалению прослушивателей уведомлений.

Я попытался установить MainActivity android:launchMode=singleTop в AndroidManifestно активность все еще возобновляется.Я также пытался использовать singleTask, singleInstance и standard

Это моя функция уведомления на дисплее, которая называется onMessage

export async function displayNotification(message: RemoteMessage) {
  try {
    const notification = new firebase.notifications.Notification();

    const { title, message: messageBody, ...messageData } = message.data;

    notification
      .setNotificationId(message.messageId)
      .setTitle(title)
      .setBody(messageBody)
      .setData({
        ...messageData
      })
      .setSound('default');

    if (isAndroid) {
      // Build a channel for notifications on Android

      const channel = await createAndroidChannel();

      notification.android
        .setBigText(messageBody)
        .android.setChannelId(channel.channelId)
        .android.setAutoCancel(true) // Remove on press
    }

    await notifications.displayNotification(notification);
    return notification;
  } catch (error) {

  }
}

Ожидаемый результат: у пользователя есть приложениена переднем плане> пользователь получает push-уведомления> щелчки по уведомлению> НЕ перезапускает основное действие, но перенаправляет на определенный экран при необходимости через onNotificationOpened listener

Фактический результат: после нажатия пользователем на уведомление переднего плана> Основное действие перезапускаетсяи главный экран перемонтируется, в результате чего слушатели уведомлений удаляются.

1 Ответ

0 голосов
/ 15 апреля 2019

Проблема здесь в том, что уже есть экземпляр вашего приложения, работающего, когда оно находится на переднем плане или на фоне чернил. Поэтому, когда вы нажимаете на уведомление, оно снова создает другой экземпляр mainActivity и перезапускает его. Чтобы решить эту проблему, вы должны понимать, какие режимы запуска android

Пожалуйста, обратитесь к этой ссылке для описания

Попробуйте установить launchMode как singleTop в файле AndroidManifest.xml. Затем переустановите и протестируйте приложение. И это должно решить вашу проблему.!

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