天天看點

Cordova熱更新cordova-plugin-code-push

原文位址聲明:https://blog.csdn.net/qq_23179075/article/details/91985000

1. 搭建自己的

code-push-server

以及安裝

CodePush CLI

用戶端

傳送門:windows伺服器搭建code-push-server

登入自己的

code-push-server

伺服器,建立提供

Cordova

熱更新的應用。

Andoird:

code-push add app <應用名-android> android cordova

IOS :

code-push add app <應用名-ios> ios cordova

Cordova熱更新cordova-plugin-code-push

2. 配置

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

Cordova熱更新cordova-plugin-code-push

${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