Я успешно использую Firebase Cloud Messaging с react-native-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
Я обнаружил этот пакет response-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, на которой подробнее о проблемах, с которыми я сталкиваюсь.