我需要存储我的应用当前活动状态的指标。
我使用反应原生提供的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);
尽管日志语句显示在控制台中,但仍未执行。 我使用本地化的反应世界,所以我尝试了应用程序的开发模式和发布版本,问题仍然存在。
任何帮助?
答案 0 :(得分:1)
正如文件所说
不活动 - 这是在转换之间发生的状态 前景&背景,以及在不活动期间,如 进入多任务处理视图或来电时
因此,当您的应用转到后台时,它首先会 无效 ,您需要更改的是您的条件,nextAppState
将是非活性强>
if (this.state.appState.match(/active|foreground/) && nextAppState === "inactive") {
console.log("App inactive ...")
firebase.database().ref(`users/${userID}/live`).set(0);
}