response-native-firebase - сборка релиза Xcode iOS не работает как отладочная сборка - PullRequest
1 голос
/ 19 марта 2019

У меня есть приложение 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;
  }
}
...