У меня есть приложение React Native, которое использует response-native-firebase для отображения уведомлений, когда приложение находится в фоновом режиме. Поскольку я не могу заставить действия Redux отправлять, когда приложение находится в фоновом режиме, я храню информацию уведомления (т. Е. Идентификатор ресурса, который мне нужно получить, когда приложение находится на переднем плане) в массиве notificationsToProcess
. Затем я использую AppState
, чтобы определить, находится ли приложение на переднем плане, если это так, а затем обработать элементы в массиве notificationsToProcess
, то есть направить избыточное действие, чтобы извлечь данные из API и обновить хранилище Redux в приложении. .
Теперь проблема в том, что в XCode, когда я использую конфигурацию сборки Debug и загружаю ее на свой iPhone, этот код работает нормально - уведомления принимаются и отображаются, запускается прослушиватель событий onNotificationDisplayed
и notificationsToProcess
массив обновляется - тогда, когда приложение находится на переднем плане, действия отправляются, и все хорошо. Однако, когда я изменяю свою схему в XCode, чтобы использовать конфигурацию сборки 'Release', слушатель Firebase больше не работает. Нужно ли настраивать что-то еще для прослушивателей уведомлений firebase для работы с конфигурацией сборки «Release» в Xcode на устройствах iOS?
Вот соответствующие фрагменты из моего кода:
class InitFirebaseListeners extends React.Component {
notificationsToProcess = [];
state = {
appState: AppState.currentState,
}
componentWillMount() {
AppState.addEventListener('change', this.handleAppStateChange);
this.startFirebaseListeners();
}
handleAppStateChange = (nextAppState) => {
const { appState } = this.state;
if (
appState.match(/inactive|background/)
&& nextAppState === 'active'
) {
const { myReduxAction } = this.props;
while (let msgId = this.notificationsToProcess.shift()) {
myReduxAction(msgId);
}
}
this.setState({ appState: nextAppState });
};
startFirebaseListeners = async () => {
this.notificationDisplayedListener = firebase.notifications().onNotificationDisplayed((notification) => {
const { _data: { type, message: messageId } } = notification;
this.notificationsToProcess.push(messageId);
});
}
render() {
return null;
}
}