#javascript #typescript #firebase #react-native #firebase-cloud-messaging
#javascript #typescript #firebase #react-native #firebase-облако-обмен сообщениями
Вопрос:
Прямо сейчас я могу обрабатывать сообщения, когда приложение открыто, свернуто или закрыто, но когда я нажимаю на уведомление. Как обработать сообщение, если пользователь входит в приложение без уведомления?
useEffect(() => {
messaging().setBackgroundMessageHandler(async remoteMessage => {
handlerMessage(remoteMessage)
setInitialRoute('Messenger')
});
messaging().onMessage(async remoteMessage => {
handlerMessage(remoteMessage);
});
messaging()
.getInitialNotification()
.then(remoteMessage => {
if (remoteMessage) {
handlerMessage(remoteMessage);
setInitialRoute('Messenger')
}
});
}, []);
Ответ №1:
прежде всего, ваш «setBackgroundMessageHandler» должен быть расположен в вашем index.js
подобии, упомянутом в документах react-native-firebase. Вы должны еще раз взглянуть на это. Теперь к вашему вопросу: вы хотите обрабатывать данные из fcmNotification, которые были отправлены, когда ваше приложение находится в фоновом режиме или в состоянии выхода. Вашему setBackgroundMessageHandler не разрешено обновлять какой-либо пользовательский интерфейс (например, через состояние, как указано в документах). Однако он может выполнять сетевые запросы или обновлять localStorage. И это то, что вы должны делать. Когда сообщение поступает через backgroundHandler, обновите свой localStorage. При следующем запуске вашего приложения вы можете проверить, содержит ли localStorage данные из сообщения, обработанного backgroundHander. Если да, сделайте что-нибудь с ним и удалите его после, чтобы при следующем запуске приложения не запускалось действие со старыми данными. Если нет, -хорошо — ничего не делайте.