你懂的 发表于 2015-8-15 15:21:02

ionic/cordova app自动更新插件

本帖最后由 测试一把 于 2015-8-15 15:24 编辑

ionic 自动更新APP


一、准备工作  

1.Cordova插件:    

cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.git// 获取APP版本    
cordova plugin add org.apache.cordova.file // 文件系统    
cordova plugin add org.apache.cordova.file-transfer //文件传输系统    
cordova plugin add https://github.com/pwlin/cordova-plugin-file-opener2 //文件打开系统  

2.AngularJS Cordova插件 
ngCordova


二、相关代码,app.js


.run(['$ionicPlatform', '$rootScope','$ionicActionSheet', '$timeout','$cordovaAppVersion', '$ionicPopup', '$ionicLoading','$cordovaFileTransfer', '$cordovaFile', '$cordovaFileOpener2', function ($ionicPlatform, $rootScope,$ionicActionSheet, $timeout,$cordovaAppVersion, $ionicPopup, $ionicLoading, $cordovaFileTransfer, $cordovaFile, $cordovaFileOpener2) {
      $ionicPlatform.ready(function ($rootScope) {
            // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
            // for form inputs)
            if (window.cordova && window.cordova.plugins.Keyboard) {
                cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
            }
            if (window.StatusBar) {
                // org.apache.cordova.statusbar required
                StatusBar.styleDefault();
            }

            //检测更新
            checkUpdate();

            document.addEventListener("menubutton", onHardwareMenuKeyDown, false);
      });


      // 菜单键
      function onHardwareMenuKeyDown() {
            $ionicActionSheet.show({
                titleText: '检查更新',
                buttons: [
                  { text: '关于' }
                ],
                destructiveText: '检查更新',
                cancelText: '取消',
                cancel: function () {
                  // add cancel code..
                },
                destructiveButtonClicked: function () {
                  //检查更新
                  checkUpdate();
                },
                buttonClicked: function (index) {

                }
            });
            $timeout(function () {
                hideSheet();
            }, 2000);
      };

      // 检查更新
      function checkUpdate() {
            var serverAppVersion = "1.0.0"; //从服务端获取最新版本
            //获取版本
            $cordovaAppVersion.getAppVersion().then(function (version) {
                //如果本地于服务端的APP版本不符合
                if (version != serverAppVersion) {
                  showUpdateConfirm();
                }
            });
      }

      // 显示是否更新对话框
      function showUpdateConfirm() {
            var confirmPopup = $ionicPopup.confirm({
                title: '版本升级',
                template: '1.xxxx;</br>2.xxxxxx;</br>3.xxxxxx;</br>4.xxxxxx', //从服务端获取更新的内容
                cancelText: '取消',
                okText: '升级'
            });
            confirmPopup.then(function (res) {
                if (res) {
                  $ionicLoading.show({
                        template: "已经下载:0%"
                  });
                  var url = "http://192.168.1.50/1.apk"; //可以从服务端获取更新APP的路径
                  var targetPath = "file:///storage/sdcard0/Download/1.apk"; //APP下载存放的路径,可以使用cordova file插件进行相关配置
                  var trustHosts = true
                  var options = {};
                  $cordovaFileTransfer.download(url, targetPath, options, trustHosts).then(function (result) {
                        // 打开下载下来的APP
                        $cordovaFileOpener2.open(targetPath, 'application/vnd.android.package-archive'
                        ).then(function () {
                              // 成功
                            }, function (err) {
                              // 错误
                            });
                        $ionicLoading.hide();
                  }, function (err) {
                        alert('下载失败');
                  }, function (progress) {
                        //进度,这里使用文字显示下载百分比
                        $timeout(function () {
                            var downloadProgress = (progress.loaded / progress.total) * 100;
                            $ionicLoading.show({
                              template: "已经下载:" + Math.floor(downloadProgress) + "%"
                            });
                            if (downloadProgress > 99) {
                              $ionicLoading.hide();
                            }
                        })
                  });
                } else {
                  // 取消更新
                }
            });
      }
    }])


上面是一个简单实现方式,一些数据都在这里写死了,你可以将一些数据从服务端获取,比如最新版本号,最新版的下载路径,这里提供一个思路。

项目地址:https://github.com/zxj963577494/ionic-AutoUpdateApp

只需执行ionic build android即可




跨平台移动开发 发表于 2015-8-15 15:30:51

https://github.com/markmarijnissen/cordova-app-loader


这个也不错

cswisodmliu 发表于 2015-11-23 20:55:11

http://www.ionic.ren/2015/11/23/ionic%E5%B8%B8%E7%94%A8%E6%8F%92%E4%BB%B6-ngcordovacordovaappversion%E7%89%88%E6%9C%AC%E6%9B%B4%E6%96%B0%E6%8F%92%E4%BB%B6/

jyxzfw 发表于 2016-2-1 15:22:54

大神你好。我有一些问题请教:
之前都没有用过插件,这边只要像cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.git// 获取APP版本
这样就可以了吗?在index.html中都不需要引入什么吗?导入到Eclipse之后也不需要修改什么吗?
$cordovaAppVersion.getAppVersion()方法就可以直接用了吗?可是我这个方法都执行不了啊!
求大神耐心解答。小白一个,刚接触这个,还没人教好痛苦{:4_87:}

静瓷月色 发表于 2016-2-3 15:12:22

jyxzfw 发表于 2016-2-1 15:22
大神你好。我有一些问题请教:
之前都没有用过插件,这边只要像cordova plugin add https://github.com/w ...

这类插件一般注册到全局或者cordova命名空间下,不用在html页面额外加载文件。
这个插件新的用法是 cordova.getAppVersion.getVersionNumber().then(function (version) {});
多看看 README.md

jyxzfw 发表于 2016-2-4 16:52:32

静瓷月色 发表于 2016-2-3 15:12
这类插件一般注册到全局或者cordova命名空间下,不用在html页面额外加载文件。
这个插件新的用法是 cordo ...

谢谢大神{:4_86:}

jscherryfang 发表于 2016-4-1 14:26:02

请教一下,如何获取服务器版本号呢?就是如何从服务器上读取androidVersion.json里的版本号的值

ionicwang 发表于 2016-4-2 11:00:48

jscherryfang 发表于 2016-4-1 14:26
请教一下,如何获取服务器版本号呢?就是如何从服务器上读取androidVersion.json里的版本号的值 ...

服务器版本号你发布app后自己改一下配置的版本号哦

服务端怎么获取本地的,
只有本地的获取以后 传给服务器做对比

zw123 发表于 2016-4-14 20:25:59

额,这个方法好像不能用了。。。

yinet2010 发表于 2016-6-15 13:12:19

ordova.getAppVersion.getVersionNumber().then(function (version) {}); 这个方法不起作用
页: [1]
查看完整版本: ionic/cordova app自动更新插件