Я использую push-push, чтобы обновить свое приложение, ориентированное на реакцию. Я не хочу загружать его в App Store каждый раз, когда делаю обновление, я хочу отправить его прямо на устройство пользователя.
Он работает нормально, приложение обновлено, но я пытаюсь показать уведомление, если обновление прошло успешно.
В документах они делают это следующим образом:
codePush.sync({ updateDialog: true },
(status) => {
switch (status) {
case codePush.SyncStatus.DOWNLOADING_PACKAGE:
// Show "downloading" modal
break;
case codePush.SyncStatus.INSTALLING_UPDATE:
// Hide "downloading" modal
break;
}
},
({ receivedBytes, totalBytes, }) => {
/* Update download modal progress */
}
);
Я пытаюсь обновить состояние, если обновление прошло успешно, и показать модальное окно с кнопкой, чтобы скрыть его при нажатии. Таким образом, мой код выглядит следующим образом:
constructor() {
super();
this.state = {
modalVisible: false,
status: ""
}
}
componentDidMount() {
let self = this;
codePush.sync({
updateDialog: true,
installMode: codePush.InstallMode.IMMEDIATE
}, (status) => {
switch (status) {
case codePush.SyncStatus.UPDATE_INSTALLED:
self.setState({modalVisible: true});
break;
}
},
({receivedBytes, totalBytes,}) => {
/* Update download modal progress */
self.setState({status: "Downloaded " + receivedBytes + " of " + totalBytes});
}
);
}
renderUpdateNotificationModal(){
return (
<Modal
animationType={"slide"}
transparent={false}
visible={this.state.modalVisible}
onRequestClose={() => {alert("Modal has been closed.")}}
>
<View style={{marginTop: 22}}>
<View>
<Text>Updated</Text>
<TouchableHighlight onPress={() => {this.setState({modalVisible: false})}}>
<Text>OK</Text>
</TouchableHighlight>
</View>
</View>
</Modal>
)
}
render() {
return (
<View style={styles.container}>
{this.renderUpdateNotificationModal()}
<Text style={styles.welcome}>
Welcome!
</Text>
<Text style={styles.instructions}>
To get started, edit index.ios.js
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</Text>
<Text style={{fontSize: 18, marginTop: 15, color: "blue", textAlign: "center"}}>{this.state.status}</Text>
</View>
);
}
Но проблема в том, что модальное окно отображается в течение нескольких секунд, а затем исчезает без нажатия на кнопку.
Поскольку состояние установлено в значение true, а затем через несколько секунд в значение false в
case codePush.SyncStatus.UPDATE_INSTALLED:
self.setState({modalVisible: true});
break;
Есть идеи, как это решить?
installMode: codePush.InstallMode.IMMEDIATE
это должно вызывать принудительный перезапуск приложения в соответствии с github.com/Microsoft/react-native-code-push/blob/master/docs/. Вы уверены, что он не перезапускается и не инициализируется так быстро (приложение довольно минимально выше!), Что вы ошибочно принимаете это за модальное закрытие и сброс состояния? Кажется, указывает на это. Решение будетcodePush.InstallMode.ON_NEXT_RESTART
илиcodePush.InstallMode.ON_NEXT_RESUME
- person G0dsquad   schedule 16.06.2017