PhoneGap中文网

标题: ionic/cordova app自动更新插件 [打印本页]

作者: 你懂的    时间: 2015-8-15 15:21
标题: 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


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

  12.             //检测更新
  13.             checkUpdate();

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


  16.         // 菜单键
  17.         function onHardwareMenuKeyDown() {
  18.             $ionicActionSheet.show({
  19.                 titleText: '检查更新',
  20.                 buttons: [
  21.                     { text: '关于' }
  22.                 ],
  23.                 destructiveText: '检查更新',
  24.                 cancelText: '取消',
  25.                 cancel: function () {
  26.                     // add cancel code..
  27.                 },
  28.                 destructiveButtonClicked: function () {
  29.                     //检查更新
  30.                     checkUpdate();
  31.                 },
  32.                 buttonClicked: function (index) {

  33.                 }
  34.             });
  35.             $timeout(function () {
  36.                 hideSheet();
  37.             }, 2000);
  38.         };

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

  50.         // 显示是否更新对话框
  51.         function showUpdateConfirm() {
  52.             var confirmPopup = $ionicPopup.confirm({
  53.                 title: '版本升级',
  54.                 template: '1.xxxx;</br>2.xxxxxx;</br>3.xxxxxx;</br>4.xxxxxx', //从服务端获取更新的内容
  55.                 cancelText: '取消',
  56.                 okText: '升级'
  57.             });
  58.             confirmPopup.then(function (res) {
  59.                 if (res) {
  60.                     $ionicLoading.show({
  61.                         template: "已经下载:0%"
  62.                     });
  63.                     var url = "http://192.168.1.50/1.apk"; //可以从服务端获取更新APP的路径
  64.                     var targetPath = "file:///storage/sdcard0/Download/1.apk"; //APP下载存放的路径,可以使用cordova file插件进行相关配置
  65.                     var trustHosts = true
  66.                     var options = {};
  67.                     $cordovaFileTransfer.download(url, targetPath, options, trustHosts).then(function (result) {
  68.                         // 打开下载下来的APP
  69.                         $cordovaFileOpener2.open(targetPath, 'application/vnd.android.package-archive'
  70.                         ).then(function () {
  71.                                 // 成功
  72.                             }, function (err) {
  73.                                 // 错误
  74.                             });
  75.                         $ionicLoading.hide();
  76.                     }, function (err) {
  77.                         alert('下载失败');
  78.                     }, function (progress) {
  79.                         //进度,这里使用文字显示下载百分比
  80.                         $timeout(function () {
  81.                             var downloadProgress = (progress.loaded / progress.total) * 100;
  82.                             $ionicLoading.show({
  83.                                 template: "已经下载:" + Math.floor(downloadProgress) + "%"
  84.                             });
  85.                             if (downloadProgress > 99) {
  86.                                 $ionicLoading.hide();
  87.                             }
  88.                         })
  89.                     });
  90.                 } else {
  91.                     // 取消更新
  92.                 }
  93.             });
  94.         }
  95.     }])  
复制代码



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

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

只需执行ionic build android即可





作者: 跨平台移动开发    时间: 2015-8-15 15:30
https://github.com/markmarijnissen/cordova-app-loader


这个也不错
作者: cswisodmliu    时间: 2015-11-23 20:55
http://www.ionic.ren/2015/11/23/ ... %E6%8F%92%E4%BB%B6/
作者: jyxzfw    时间: 2016-2-1 15:22
大神你好。我有一些问题请教:
之前都没有用过插件,这边只要像  cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.git  // 获取APP版本
这样就可以了吗?在index.html中都不需要引入什么吗?导入到Eclipse之后也不需要修改什么吗?
$cordovaAppVersion.getAppVersion()方法就可以直接用了吗?可是我这个方法都执行不了啊!
求大神耐心解答。小白一个,刚接触这个,还没人教好痛苦
作者: 静瓷月色    时间: 2016-2-3 15:12
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
静瓷月色 发表于 2016-2-3 15:12
这类插件一般注册到全局或者cordova命名空间下,不用在html页面额外加载文件。
这个插件新的用法是 cordo ...

谢谢大神
作者: jscherryfang    时间: 2016-4-1 14:26
请教一下,如何获取服务器版本号呢?就是如何从服务器上读取androidVersion.json里的版本号的值
作者: ionicwang    时间: 2016-4-2 11:00
jscherryfang 发表于 2016-4-1 14:26
请教一下,如何获取服务器版本号呢?就是如何从服务器上读取androidVersion.json里的版本号的值 ...

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

服务端怎么获取本地的,
只有本地的获取以后 传给服务器做对比
作者: zw123    时间: 2016-4-14 20:25
额,这个方法好像不能用了。。。
作者: yinet2010    时间: 2016-6-15 13:12
ordova.getAppVersion.getVersionNumber().then(function (version) {}); 这个方法不起作用




欢迎光临 PhoneGap中文网 (http://bbs.phonegap100.com/) Powered by Discuz! X3.2