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