描述
我将代码放置在空气更新上,看来代码确实会推动,但是每次运行时: code-push deployment ls XXXXX
我得到:
活动:0%(xxx的1(总计:0(xxx待处理(
"待处理"永远不会切换到成功(但我确实看到了应用程序更新?(
繁殖
我正在使用一个离子应用( redux(放入我的app.component.ts:
platform.ready().then(() => { this.ngRedux.dispatch(update()); });
update((在另一个文件中:
const changeUpdateStatus = status => ({
type: 'UPDATE_STATUS',
payload: status
});
export const update = () => dispatch => {
dispatch(changeUpdateStatus('INIT'));
let sync = () => {
let codePush = (<any>window).codePush;
let SyncStatus = (<any>window).SyncStatus;
if(!codePush){
throw new Error('Code push not installed');
};
const keys = {
'iOS': env.codePushKeys.ios,
'Android': env.codePushKeys.android
};
const deploymentKey = keys[(<any>window).device.platform];
console.log('Trying to sync code push using key: ', deploymentKey);
codePush.sync(
(status) => {
console.log('status:', status);
switch (status) {
case SyncStatus.UPDATE_INSTALLED:
dispatch(changeUpdateStatus('DONE'));
break;
case SyncStatus.CHECKING_FOR_UPDATE:
dispatch(changeUpdateStatus('CHECKING'));
break;
case SyncStatus.DOWNLOADING_PACKAGE:
dispatch(changeUpdateStatus('DOWNLOADING'));
break;
case SyncStatus.INSTALLING_UPDATE:
dispatch(changeUpdateStatus('INSTALLING'));
break;
default: //ERROR, UP_TO_DATE
dispatch(changeUpdateStatus('DONE'));
break;
}
},
{
deploymentKey,
installMode: (<any>window).InstallMode.IMMEDIATE,
mandatoryInstallMode: (<any>window).InstallMode.IMMEDIATE
},
(downloadProgress) => {
// TODO: Add progress to state.
if (downloadProgress) {
console.log("Downloading " + downloadProgress.receivedBytes + " of " + downloadProgress.totalBytes);
}
}
);
}
sync() && onEvent("resume").then(sync).catch( (e) => {
dispatch(changeUpdateStatus('DONE'));
analytics.logError(e);
});
};
其他信息Cordova-Plugin-Code-Push版本:1.11.0
已安装插件的列表:
<plugin name="cordova-plugin-camera" spec="^3.0.0" />
<plugin name="cordova-plugin-splashscreen" spec="^4.0.3" />
<plugin name="cordova-plugin-whitelist" spec="^1.3.3" />
<plugin name="cordova-plugin-device" spec="^1.1.7" />
<plugin name="cordova-plugin-ionic-webview" spec="^1.1.16" />
<plugin name="cordova-plugin-contacts" spec="^3.0.0" />
<plugin name="cordova-plugin-camera-preview" spec="^0.9.0" />
<plugin name="cordova-plugin-file-transfer" spec="^1.7.0" />
<plugin name="cordova-plugin-background-upload" spec="^1.0.6" />
<plugin name="cordova-plugin-media-capture" spec="^3.0.0" />
<plugin name="cordova-sms-plugin" spec="^0.1.11" />
<plugin name="cordova-plugin-statusbar" spec="^2.4.1" />
<plugin name="cordova-plugin-code-push" spec="~1.11.0" />
<plugin name="ionic-plugin-keyboard" spec="^2.2.1" />
<plugin name="phonegap-plugin-push" spec="^2.1.2">
<variable name="FCM_VERSION" value="11.0.1" />
</plugin>
<plugin name="cordova-android-support-gradle-release" spec="^1.2.0">
<variable name="ANDROID_SUPPORT_VERSION" value="26.+" />
</plugin>
<plugin name="cordova-plugin-globalization" spec="^1.0.7" />
<plugin name="cordova-plugin-android-permissions" spec="^1.0.0" />
Cordova版本:7.1.0
ios/android/windows版本:all
这是在调试构建或发布构建上复制的吗?是
这是在模拟器上或仅在物理设备上复制的吗?是
当您无法在代码推送SDK上调用notifyApplicationReady()
时,这可能会发生。该方法应在应用程序启动附近的某个地方调用。它有效地将其报告为代码推动,表明更新成功。没有此操作,下次应用程序开始时,代码推动可能会触发回滚(取决于您部署更新的详细信息(。
https://github.com/microsoft/cordova-plugin-code-push
notifyapplicationready:通知CodePush运行时,已安装的更新被认为是成功的。如果您正在手动检查和安装更新(即不使用同步方法为您处理所有内容(,则必须调用此方法;否则,CodePush将把更新视为失败,并在应用程序下一个重新启动时回滚至上一个版本。
空气更新现在正在工作。解决方案是进行重构,并确保sync
实际上是所谓的第一件事。这样,当新的构建启动时,它可以立即将构建"盖章"为成功。
我相信问题是我在此之前执行了一堆代码(包括一些可能需要一两秒钟的API调用(。