当应用程序变为非活动状态时,不会触发Firebase设置功能

时间:2018-01-19 17:37:10

标签: firebase react-native firebase-realtime-database expo

我需要存储我的应用当前活动状态的指标。

我使用反应原生提供的AppState来跟踪应用的状态(参见here

  constructor(props) {
    super(props);

    this.state = {
      appState: AppState.currentState
    };
    this._handleAppStateChange = this._handleAppStateChange.bind(this);
  }      

  componentDidMount() {
    this.listenToAppState();
  }

  listenToAppState() {
     AppState.addEventListener("change", this._handleAppStateChange);
  }

  _handleAppStateChange(nextAppState) {
    const { currentUser } = firebase.auth();
    const userID = currentUser.uid;

    if (this.state.appState.match(/active|foreground/) && nextAppState === "background") {
      console.log("App inactive ...")
      firebase.database().ref(`users/${userID}/live`).set(0);
    }
    if (this.state.appState.match(/inactive|background/) && nextAppState === "active") {
      console.log("App active ...")
      firebase.database().ref(`users/${userID}/live`).set(1);
    }
    this.setState({appState: nextAppState});
  }

当应用程序在后台运行后处于活动状态时,行:

firebase.database().ref(`users/${userID}/live`).set(1);

工作只是发现值存储在数据库中。 问题是当应用程序变为非活动状态时:

firebase.database().ref(`users/${userID}/live`).set(0);
尽管日志语句显示在控制台中,但仍未执行

。 我使用本地化的反应世界,所以我尝试了应用程序的开发模式和发布版本,问题仍然存在。

任何帮助?

1 个答案:

答案 0 :(得分:1)

正如文件所说

  

不活动 - 这是在转换之间发生的状态   前景&背景,以及在不活动期间,如   进入多任务处理视图或来电时

因此,当您的应用转到后台时,它首先会 无效 ,您需要更改的是您的条件,nextAppState将是非活性

if (this.state.appState.match(/active|foreground/) && nextAppState === "inactive") {
  console.log("App inactive ...")
  firebase.database().ref(`users/${userID}/live`).set(0);
}