Как мне удалить действие щелчка уведомления react native firebase на Android?

#android #react-native #push-notification #foreground #react-native-firebase

#Android #react-native #push-уведомление #передний план #react-native-firebase

Вопрос:

Я использую react-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 прослушиватель

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

Ответ №1:

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

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

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