Вывести собственное приложение Android React на передний план после получения только облачного сообщения Firebase - PullRequest
5 голосов
/ 27 октября 2019

Я успешно использую Firebase Cloud Messaging с реагировать-нативный-firebase для отправки и получения сообщений только данных между устройствами Android.

Когда устройство получает сообщение, если приложениев фоновом режиме или был убит, я хотел бы вывести приложение на передний план. Я получаю уведомления, которые будут отображать console.log() при обоих обстоятельствах, но мне сложно понять, как лучше всего «пробудить» приложение / вывести его на передний план:

  firebase.messaging().onMessage((message) => {
    // Process your message as required
    console.log('You got a message!', message);
  });
}

Приведенный выше код выполняется, как и ожидалось, при обоих обстоятельствах.

Существуют ли пакеты React Native, на которые я могу обратить внимание, чтобы помочь достичь того, что я пытаюсь сделать, или я должен подумать о том, чтобы написать несколько Java?!

Заранее спасибо.

Обновление

Я пытаюсь достичь чего-то вроде this , но не уверен, возможно ли добавить код, подобный этому, прямо вмое приложение React Native?

Обновление 2

Я обнаружил этот пакет Reaction-native-invoke-app , использующий HeadlessJS .

HeadlessJS требует, чтобы вы использовали этот код в вашем index.js:

AppRegistry.registerHeadlessTask('SomeTaskName', () => require('SomeTaskName'));

Однако Firebase Cloud Messaging уже требует, чтобы вы предоставили эту строку кода в том же месте, чтоЯ предполагаю, делает то же самое, что и выше:

AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage', () => backgroundMessaging);

Следуя документам react-native-invoke-app, я выполняю вызов для вызова моего приложения в обратном вызове firebase.messaging().onMessage((message)) следующим образом:

firebase.messaging().onMessage((message) => {
    // Process your message as required
    invokeApp();
    console.log('You got message!', message);
  });
}

Однакоэто не выводит мое приложение на передний план.

Опять же, любая помощь с этим очень ценится.

Обновление 3

Теперь я переместил вызов invokeApp() внутри функции Firebase backgroundNotificationListener, которая является задачей без головы и выглядит как правильный подход:

import invokeApp from 'react-native-invoke-app';

const incomingMessage = async (message) => {
  // handle your message
  invokeApp();
  return Promise.resolve();
}
export default incomingMessage;

Но приложение все равно не выйдет на передний план при вызове функции incomingMessage.

Обновление 4

Я поднял эту проблему на react-native-invoke-app GitHub страница, которая содержит более подробную информацию о проблемах, с которыми я сталкиваюсь.

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

Причина, по которой это не работает, заключается в том, что react-native-invoke-app не поддерживает версии Android> 8. Если кто-нибудь знает альтернативу этому пакету, пожалуйста, прокомментируйте ниже, спасибо.

0 голосов
/ 02 ноября 2019

Использование react-native-invoke-app должно завершить работу.

  1. Убедитесь, что у вас есть AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage', () => backgroundMessaging); в корневом компоненте приложения.
  2. экспортируйте backgroundMessaging из любого дочернего элементаКомпонент, в котором он находится, и импортируйте его в корневой компонент вашего приложения.
  3. имеет вызов invokeApp () внутри функции вашего дочернего компонента, очень похоже на то, что вы сделали.
  4. Не забывайте это для случая, когда приложение не запущено.

Я не проверял это, но не вижу причины, по которой оно не должно работать.

Надеюсь, это поможет!

...