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即可
https://github.com/markmarijnissen/cordova-app-loader
这个也不错 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/ 大神你好。我有一些问题请教:
之前都没有用过插件,这边只要像cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.git// 获取APP版本
这样就可以了吗?在index.html中都不需要引入什么吗?导入到Eclipse之后也不需要修改什么吗?
$cordovaAppVersion.getAppVersion()方法就可以直接用了吗?可是我这个方法都执行不了啊!
求大神耐心解答。小白一个,刚接触这个,还没人教好痛苦{:4_87:} jyxzfw 发表于 2016-2-1 15:22
大神你好。我有一些问题请教:
之前都没有用过插件,这边只要像cordova plugin add https://github.com/w ...
这类插件一般注册到全局或者cordova命名空间下,不用在html页面额外加载文件。
这个插件新的用法是 cordova.getAppVersion.getVersionNumber().then(function (version) {});
多看看 README.md 静瓷月色 发表于 2016-2-3 15:12
这类插件一般注册到全局或者cordova命名空间下,不用在html页面额外加载文件。
这个插件新的用法是 cordo ...
谢谢大神{:4_86:} 请教一下,如何获取服务器版本号呢?就是如何从服务器上读取androidVersion.json里的版本号的值 jscherryfang 发表于 2016-4-1 14:26
请教一下,如何获取服务器版本号呢?就是如何从服务器上读取androidVersion.json里的版本号的值 ...
服务器版本号你发布app后自己改一下配置的版本号哦
服务端怎么获取本地的,
只有本地的获取以后 传给服务器做对比 额,这个方法好像不能用了。。。 ordova.getAppVersion.getVersionNumber().then(function (version) {}); 这个方法不起作用
页:
[1]