ionic app 安卓版自动更新

来源:互联网 发布:巴宝莉女士香水知乎 编辑:程序博客网 时间:2024/04/28 09:10

准备工作

ngcordova 插件:

  1. 文件管理插件:cordova plugin add cordova-plugin-file
  2. 文件传输插件:cordova plugin add cordova-plugin-file-transfer
  3. 文件打开插件:cordova plugin add https://github.com/pwlin/cordova-plugin-file-opener2.git
  4. app版本获取插件:cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.git

获取服务器上的版本号

得到服务器上的apk的versionCode后,使用$cordovaAppVersion获取当前运行的apk的versionCode后,将两者进行比较。

$http.get(url)   .then(function (success) {     var data = success.data;     var serverCode = data.versionCode;     $cordovaAppVersion.getVersionCode()       .then(function (version) {         // 返回服务器上的versionCode与本地versionCode是否一致         deferred.resolve(version != serverCode);       }, false)   }, function (error) {     deferred.reject(error);   });

下载apk,并更新安装

提示是否更新

var confirmPopup = $ionicPopup.confirm({    title: '<strong>提示</strong>',     template: '发现新版本,是否更新?',     okText: '确认',     cancelText: '取消'   });   confirmPopup     .then(function (res) {       if (res) {         Download.updateAPK();       }     }); }

文件下载服务,我的安卓项目的包路径中包含了数字,不知道是不是因为这个原因,将apk下载到 cordova.file.dataDirectory下,一运行就报:”解析软件包时出现问题”,后面,将apk下载至其他目录成功升级。

.factory('Download', [    '$cordovaFile',    '$cordovaFileTransfer',    '$cordovaFileOpener2',    '$q',    'Util',    '$timeout',    'Android_MIME_MapTable',    'SystemConstant',    '$ionicLoading',    function ($cordovaFile, $cordovaFileTransfer, $cordovaFileOpener2, $q, Util, $timeout, Android_MIME_MapTable, SystemConstant, $ionicLoading) {      // 下载目录      var downloadPath;      return {        /**         * 初始化app的下载目录         */        initDownloadDirectory: function () {          /**           * cordova.file.dataDirectory 不同平台对应位置如下           *  android:'data/data/<app-id>/files/'           *  IOS:'/var/mobile/Applications/<UUID>/Library/NoCloud/'           */          /**           * 因android平台,apk类型的文件放到cordova.file.dataDirectory下,将无法正常安装           * 因此,针对不同平台,使用不同的下载目录           */          if (ionic.Platform.isAndroid()) {            // 初始化android平台的下载目录            downloadPath = cordova.file.externalRootDirectory + ''app_download_path'';            this.createDir(cordova.file.externalRootDirectory, 'app_download_path')              .then(function (success) {                downloadPath = success.nativeURL;              }, false);          } else {            // 初始化IOS平台的下载目录            downloadPath = cordova.file.dataDirectory + 'app_download_path';            this.createDir(cordova.file.dataDirectory, 'app_download_path')              .then(function (success) {                downloadPath = success.nativeURL;              }, false);          }        },        /**         * 创建目录         * @param path 目录         * @param directory 目录名称         */        createDir: function (path, directory) {          var deferred = $q.defer();          $cordovaFile.createDir(path, directory, false)            .then(function (success) {              deferred.resolve(success);              console.log("目录创建成功!" + angular.toJson(success));            }, function (error) {              deferred.reject(error);              console.log("目录创建失败!" + angular.toJson(error));            });          return deferred.promise;        },        /**         * 文件下载         * @param url 资源定位         * @param targetPath 文件存储位置         * @returns {Promise}         */        download: function (url, targetPath) {          var deferred = $q.defer();          // 允许所有安全证书          var trustAllHosts = true;          // 选项          var options = {};          $ionicLoading.show({template: "已经下载0%"});          $cordovaFileTransfer.download(url, targetPath, options, trustAllHosts)            .then(function (success) {              $ionicLoading.hide();              deferred.resolve(success);            }, function (error) {              deferred.reject(error);            }, function (progress) {              $timeout(function () {                var downloadProgress = (progress.loaded / progress.total) * 100;                $ionicLoading.show({template: "已经下载" + Math.floor(downloadProgress) + "%"});                if (downloadProgress > 99) {                  $ionicLoading.hide();                }              });            });          return deferred.promise;        },        /**         * 更新apk         */        updateAPK: function () {          var deferred = $q.defer();          var url = "http://yourServceAddress/your.apk";          var targetPath = downloadPath + "/" + 'your.apk';          this.download(url, targetPath)            .then(function () {              // 使用插件打开apk文件              $cordovaFileOpener2.open(targetPath, 'application/vnd.android.package-archive')                .then(function (success) {                  console.log(angular.toJson(success));                  deferred.resolve(success);                }, function (error) {                  console.log(angular.toJson(error));                  deferred.reject(error);                });            }, function (error) {              deferred.reject(error);            });        }      }    }])
0 0
原创粉丝点击