PhoneGap中文网

 找回密码
 立即注册
查看: 48453|回复: 9
打印 上一主题 下一主题

ionic/cordova app自动更新插件

[复制链接]

52

主题

528

帖子

1652

积分

金牌会员

Rank: 6Rank: 6

积分
1652
跳转到指定楼层
楼主
发表于 2015-8-15 15:21:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 测试一把 于 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即可




回复

使用道具 举报

27

主题

172

帖子

597

积分

高级会员

Rank: 4

积分
597
沙发
发表于 2015-8-15 15:30:51 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

54

帖子

304

积分

中级会员

Rank: 3Rank: 3

积分
304
板凳
发表于 2015-11-23 20:55:11 | 只看该作者
回复 支持 反对

使用道具 举报

55

主题

127

帖子

584

积分

高级会员

Rank: 4

积分
584
地板
发表于 2016-2-1 15:22:54 | 只看该作者
大神你好。我有一些问题请教:
之前都没有用过插件,这边只要像  cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.git  // 获取APP版本
这样就可以了吗?在index.html中都不需要引入什么吗?导入到Eclipse之后也不需要修改什么吗?
$cordovaAppVersion.getAppVersion()方法就可以直接用了吗?可是我这个方法都执行不了啊!
求大神耐心解答。小白一个,刚接触这个,还没人教好痛苦
回复 支持 反对

使用道具 举报

3

主题

10

帖子

51

积分

注册会员

Rank: 2

积分
51
5#
发表于 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
回复 支持 反对

使用道具 举报

55

主题

127

帖子

584

积分

高级会员

Rank: 4

积分
584
6#
发表于 2016-2-4 16:52:32 | 只看该作者
静瓷月色 发表于 2016-2-3 15:12
这类插件一般注册到全局或者cordova命名空间下,不用在html页面额外加载文件。
这个插件新的用法是 cordo ...

谢谢大神
回复 支持 反对

使用道具 举报

1

主题

20

帖子

131

积分

注册会员

Rank: 2

积分
131
7#
发表于 2016-4-1 14:26:02 | 只看该作者
请教一下,如何获取服务器版本号呢?就是如何从服务器上读取androidVersion.json里的版本号的值
回复 支持 反对

使用道具 举报

11

主题

529

帖子

1418

积分

金牌会员

Rank: 6Rank: 6

积分
1418
8#
发表于 2016-4-2 11:00:48 | 只看该作者
jscherryfang 发表于 2016-4-1 14:26
请教一下,如何获取服务器版本号呢?就是如何从服务器上读取androidVersion.json里的版本号的值 ...

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

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

使用道具 举报

19

主题

49

帖子

337

积分

中级会员

Rank: 3Rank: 3

积分
337
9#
发表于 2016-4-14 20:25:59 | 只看该作者
额,这个方法好像不能用了。。。
回复 支持 反对

使用道具 举报

0

主题

20

帖子

91

积分

注册会员

Rank: 2

积分
91
10#
发表于 2016-6-15 13:12:19 | 只看该作者
ordova.getAppVersion.getVersionNumber().then(function (version) {}); 这个方法不起作用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

ionic4视频教程

Archiver|手机版|小黑屋| PhoneGap中文网 ( 京ICP备13027796号-1 )  

GMT+8, 2024-12-31 06:07 , Processed in 0.050482 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表