setBackgroundMessageHandler не вызывается в завершенном состоянии

#firebase #react-native #push-notification #firebase-cloud-messaging

# #firebase #react-native #push-уведомление #firebase-cloud-обмен сообщениями

Вопрос:

Я использую firebase / messaging в своем приложении react-native для получения уведомлений только для данных от firebase.

При получении сообщения я обработаю данные, обновлю свое состояние и покажу локальное уведомление с помощью react-native-push-уведомления, если приложение находится в фоновом режиме или завершено.

 messaging().setBackgroundMessageHandler(async remoteMessage => {
  PushNotification.localNotification({...})
})
 

На устройстве Android все работает идеально на переднем плане, в фоновом режиме и в завершенном состоянии.

В iOS работает передний план и фон.

Когда приложение завершается, я могу зарегистрировать уведомление в консоли (см. Ниже), И появляется звуковой сигнал уведомления. Но локальное уведомление не отображается.

Когда я пытаюсь войти в систему устройства iOS, консоль выводит следующий вывод

 default 03:51:53.697535 0100 dasd Daemon Canceling Activities: {(
    com.apple.pushLaunch.de.myapp.app:D1FAA2
)}
default 03:51:53.697770 0100 dasd CANCELED: com.apple.pushLaunch.de.myapp.app:D1FAA2 at priority 10 <private>!
 

Мое сообщение от сервера:

 const message = {
      data: {
        body: JSON.stringify(msgBody),
        title: title,
      },
      contentAvailable: true,
      priority: "high",
      android: {
        priority: "high",
      },
      apns: {
        headers: {
          "apns-priority": "10",
          "apns-push-type": "alert", //already tried background too
          "apns-topic": "de.myapp.app",
        },
        payload: { aps: { sound: "default", contentAvailable: true } },
      },
 
      tokens: userTokens,
    };
 

Это сводит меня с ума уже несколько дней, и я не могу заставить его работать.
Приветствуется любая помощь

Комментарии:

1. Недавно я столкнулся с этой проблемой в одном из своих приложений и смог ее исправить, используя несколько пакетов (после множества проб и ошибок). Я использовал "@react-native-community/push-notification-ios": "^1.4.1", "@react-native-firebase/app": "^8.4.3", "@react-native-firebase/messaging": "^7.8.4"

2. Как вы могли бы это исправить? и теперь вы можете разрешать сообщения в завершенном состоянии?

3. В фоновом режиме и отключенном состоянии уведомление обрабатывается iOS. На переднем плане я использовал локальное уведомление. messaging().onMessage Выполняется обработчик на переднем плане и в фоновом messaging().setBackgroundMessageHandler режиме.

4. Формат сообщения, {"notification": { "body": "", "title": "" },"content_available": true,"data": { ... },"priority": 10}

5. итак, вы отправляете уведомления, верно? потому что мне нужно решение для сообщений только для данных

Ответ №1:

Нашел!

 Version 7.18.0 - August 13, 2020 Cloud Messaging
Deprecated setBackgroundMessageHandler. Use the new API onBackgroundMessage instead.
 

https://firebase.google.com/support/release-notes/js#cloud-messaging_2

Комментарии:

1. Его выдача ошибки undefined не является функцией

2. Я считаю, что это не для react-native. Это для серверной библиотеки.

Ответ №2:

Просматривая их документацию, они упоминают преднамеренные удержания системой при некоторых условиях, не ограничиваясь ими…

  • Когда система получает новое фоновое уведомление, она отбрасывает старое уведомление и сохраняет только самое новое.
  • Если что-то принудительно завершает работу или завершает работу приложения, система отбрасывает
    удерживаемое уведомление.
  • Если пользователь запускает приложение, система немедленно отправляет
    уведомление о задержке.

https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app

Комментарии:

1. Но как приложения, такие как Facebook и т. Д., Могут отправлять push-уведомления, Если приложение завершено