原文位址聲明:https://blog.csdn.net/qq_23179075/article/details/91985000
1. 搭建自己的 code-push-server
以及安裝 CodePush CLI
用戶端
code-push-server
CodePush CLI
傳送門:windows伺服器搭建code-push-server
登入自己的
code-push-server
伺服器,建立提供
Cordova
熱更新的應用。
Andoird:IOS :
code-push add app <應用名-android> android cordova
code-push add app <應用名-ios> ios cordova

2. 配置 Cordova
項目
Cordova
建立完Cordova項目後,項目中添加:cordova-plugin-code-push 插件。
在
index.html
中加入
<meta http-equiv="Content-Security-Policy"
content="default-src https://codepush.azurewebsites.net ${code-push-server域名} 'self' data: gap: cdvfile: https://ssl.gstatic.com ${code-push-server域名} 'unsafe-eval' 'unsafe-inline' https: http: wss: ws:; style-src 'self' 'unsafe-inline'; img-src * filesystem: cdvfile: data:; media-src * blob:"/>
将代碼中的
${code-push-server域名}
替換成自己的剛剛搭建的
code-push-server
域名或者ip,不用帶端口号。(如:http://192.168.0.245 或者 http://www.xx.xx)
在
config.xml
中添加
<platform name="android">
...
<preference name="CodePushDeploymentKey" value="${Deployment Key}" />
<preference name="CodePushServerUrl" value="${code-push-server域名}" />
</platform>
<platform name="ios">
...
<preference name="CodePushDeploymentKey" value="${Deployment Key}" />
<preference name="CodePushServerUrl" value="${code-push-server域名}" />
</platform>
${Deployment Key}
:替換成上面建立成功的 Deployment Key 。打包時添加
Production
參數就替換
Production
的 Deployment Key
${code-push-server域名}
替換成自己的剛剛搭建的
code-push-server
域名或者ip,【帶端口号】(如:http://192.168.0.245:3000/ 或者 http://www.xx.xx/ ) 一定要以
/
結尾 。
在
index.js
中代碼:
var app = {
initialize: function () {
this.bindEvents();
},
bindEvents: function () {
window.document.addEventListener('deviceready', this.onDeviceReady, false);
},
onDeviceReady: function () {
app.notifyApplicationReadys();
app.checkForUpdates();
},
notifyApplicationReadys: function () {
var onNotifySucceeded = function () {
console.log("通知成功。");
};
var onNotifyFailed = function (error) {
console.log("通知失敗:" + error);
};
window.codePush.notifyApplicationReady(onNotifySucceeded, onNotifyFailed);
},
checkForUpdates: function () {
var onInstallSuccess = function () {
console.log("安裝成功。");
};
var onUpdateCheck = function (remotePackage) {
if (!remotePackage) {
console.log("該應用程式是最新的。");
} else {
// The hash of each previously reverted package is stored for later use.
// This way, we avoid going into an infinite bad update/revert loop.
if (!remotePackage.failedInstall) {
console.log("有可用的更新遠端包:" + JSON.stringify(remotePackage));
console.log("CodePush更新可用。包哈希值:" + remotePackage.packageHash);
remotePackage.download(onPackageDownloaded, app.onError, onProgress);
} else {
console.log("之前嘗試了可用的更新,但失敗了。");
}
}
};
var onPackageDownloaded = function (localPackage) {
console.log("包下載下傳位址:" + localPackage.localPath);
console.log("本地包 appVersion: " + localPackage.appVersion);
console.log("本地包 description: " + localPackage.description);
console.log("本地包 failedInstall: " + localPackage.failedInstall);
console.log("本地包 isFirstRun: " + localPackage.isFirstRun);
console.log("本地包 isMandatory: " + localPackage.isMandatory);
console.log("本地包 packageSize: " + localPackage.packageSize);
// InstallMode.IMMEDIATE: 立即更新APP
// InstallMode.ON_NEXT_RESTART: 到下一次啟動應用時更新
// InstallMode.ON_NEXT_RESUME: 當應用從背景傳回時更新
localPackage.install(onInstallSuccess, app.onError, {
installMode: InstallMode.IMMEDIATE,
mandatoryInstallMode: InstallMode.IMMEDIATE
});
};
var onProgress = function (downloadProgress) {
console.log("下載下傳中: " + downloadProgress.receivedBytes + " 共: " + downloadProgress.totalBytes + " bytes.");
};
window.codePush.checkForUpdate(onUpdateCheck, app.onError);
},
onError: function (error) {
console.log("更新發生錯誤: " + error);
},
};
app.initialize();
3. 釋出更新
code-push release-cordova <應用名稱>-android android -m --des "更新描述" Staging #預設是打包Staging環境的,正式環境打包方式如下
code-push release-cordova <應用名稱>-android android -m --des "更新描述" Production #打包正式環境
-m
: 表示是否強制更新
code-push
還有很多常用指令
code-push login 登陸
code-push loout 登出
code-push access-key ls 列出登陸的token
code-push access-key rm 删除某個 access-key
code-push app add 在賬号裡面添加一個新的app
code-push app remove 或者 rm 在賬号裡移除一個app
code-push app rename 重命名一個存在app
code-push app list 或則 ls 列出賬号下面的所有app
code-push deployment ls <應用名>-android -k 檢視:<應用名>-android的deployment key