Vue项目

1.在util目录下新建upgrade.js

关键代码:

import * as common from '@/api/common';
//检测新版本升级
export function upgradeForAndroid( releasePath,packageName) {
AlertModule.show({title: '已经下载:0%'})
var url = releasePath;    //apk所在的服务器路径
var targetPath = cordova.file.externalCacheDirectory + "Download/Pass/" + packageName;   //要下载的目标路径及文件名
var trustHosts = true;
var options = {};console.log("url:" + url);
console.log("targetPah:" + targetPath);
console.log("trustHost:" + trustHosts);
downLoadApp();function downLoadApp() {
// 初始化FileTransfer对象
var fileTransfer = new FileTransfer();
fileTransfer.onprogress = function(progressEvent) {
if (progressEvent.lengthComputable) {
var downloadProgress = (progressEvent.loaded / progressEvent.total) * 100;var result="已经下载:"+ Math.floor(downloadProgress)+ "%";
AlertModule.show({title: result})
}};// 调用download方法fileTransfer.download(url,         //uri网络下载路径targetPath,      //url本地存储路径function (entry) {console.log("download complete: " + entry.toURL());cordova.plugins.fileOpener2.open(targetPath,'application/vnd.android.package-archive',{error: function (e) {console.log('Error status: ' + e.status + ' - Error message: ' + e.message);AlertModule.show({title: "打开下载文件失败"})},success: function () {console.log('open successfully');}})},function (error) {AlertModule.show({title: "下载失败"})console.log("download error source " + error.source);console.log("download error target " + error.target);console.log("upload error code" + error.code);});}
}/** 检测升级方法*/
export function  checkUpgrade(platformType, title) {console.log("设备类型:" + platformType);var appName = "应用名字";var appType = platformType;/*** 从服务器获取应用的版本信息,和本地应用版本对比* @param appName 应用名称* @param appType 应用类型*/common.getAppInfo(appName,appType).then(response =>{if(response!=null){var  packageName = response.data.packageName;var releasePath = process.env.BASE_API+"/" + response.data.path + "/" + response.data.packageName;var serverVersion = response.data.appVersion;//获取本地App版本;cordova.getAppVersion.getVersionNumber().then(function (version) {console.log("本地版本:" + version);console.log("服务器版本:" + serverVersion);if (version < serverVersion) {//$rootScope.$state.isLogin = false;localStorage.setItem("appUpgrade", "0");localStorage.removeItem("password");//退出登录appRouter.$vux.confirm.show({// 组件除show外的属性onCancel () {},onConfirm () {if (platformType == 'Android') {console.log("---Android升级中,请稍后---");upgradeForAndroid(releasePath,packageName);} else {console.log("---Ios升级中,请稍后---");cordova.plugins.externalExtension.openURL(response.data.path.toString());}},title:'发现新版本:'+serverVersion +','+'请进行升级' ,content: title+response.data.remark,})}});}}).catch(error =>{//请求失败处理函数AlertModule.show({title: "请求错误!!"})})// 监听网络状况,无网络时document.addEventListener('offline', function () {debuggerconsole.log("网络异常,不能连接到服务器!");alert({template: "<span class='c_white text_bold'>网络异常,不能连接到服务器!</span>"});setTimeout(function () {console.log("settimeOut方法");}, 2000);}, false);
}
2.来到api目录下的common.js
关键代码:
//从服务器获取应用的版本信息,和本地应用版本对比
export function getAppInfo(appName,appType) {
return fetch({
headers: {"Content-Type": "application/json"},
url: '/mobile/common/getAppInfo',
method: 'post',
data:{
appName:appName,
appType: appType
}
})
}
3.来到config目录下的dev.env.js,配置开发环境的服务器url(本地服务器)
关键代码:
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')module.exports = merge(prodEnv, {isWeChat: false,NODE_ENV: '"development"',BASE_API: 'http://127.0.0.1:8080/你自己的项目url'
})
4.然后找到config目录下的pro.env.js,配置正式环境下的服务器url(云端服务器)
关键代码:
'use strict'
module.exports = {
isWeChat: false,
NODE_ENV: '"production"',
BASE_API: '"云端服务器域名"'
}
 

配置后台SSM代码

1.根据前端common.js配置的路径,找到后台@RequestMapping对应路径下的Action

这里是:mobile/action/CommonAction.java

对应于:@RequestMapping("mobile/common")下的@RequestMapping(value = "getAppInfo")

关键代码:

@ResponseBody@RequestMapping(value = "getAppInfo")public Json<SysApp> getAppInfo(@RequestBody Map<String, Object> map) {SysApp app=null;try {Map<String,Object> param= new HashMap<String,Object>();param.put("stauts","0");param.put("appName",map.get("appName"));param.put("appType",map.get("appType"));List<SysApp> list = appService.getByParam(param);if(list.size()>0) {app=list.get(0);}return new Json<SysApp>().success(app);} catch (Exception e) {e.printStackTrace();LogService.getInstance().error("APP-> CommonAction -> 'getAppInfo'->getAppInfo is exception",e);return new Json<SysApp>().fail();}}

2.然后一层层来到seviceImpl、dao、mapper层,就是简单的单表查询。

数据库内容:

CREATE TABLE `sys_app` (`Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',`AppName` varchar(100) DEFAULT NULL COMMENT 'App名称',`AppType` varchar(20) DEFAULT NULL COMMENT 'App类型',`AppVersion` varchar(20) DEFAULT NULL COMMENT 'App版本',`PackageName` varchar(100) DEFAULT NULL COMMENT '打包名称',`Path` varchar(100) DEFAULT NULL COMMENT '路径',`PublishDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '发布日期',`ProductId` int(11) DEFAULT NULL COMMENT '所属产品Id',`ProductName` varchar(50) DEFAULT NULL COMMENT '所属产品名称',`Remark` varchar(4000) DEFAULT NULL COMMENT '备注',PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT charset=utf8 ROW_FORMAT=DYNAMIC COMMENT='APP管理 - APP版本控制表';

更新版本设置

将数据库中,AppVersion改为与上次版本不一致的版本号,要大于上次的版本号。

将PackageName设置为服务器上的apk的名字

将Path设置为为Tomcat上配置的虚拟路径。

Remark设置为更新的提示内容

服务器设置

1.将已经打包好的apk文件放置在服务器上的某个目录,这里是:

C:\release\sites\upload\apk

然后打开服务器上的Tomcat下的conf目录下的server.xml配置虚拟路径的映射

 <Host name="" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">   <Context docBase="C:\release\sites\upload" path="upload" reloadable="true"/></Host>

2.这样就就将服务器上的物理路径与虚拟路径映射完成,此时数据库中的upload/apk目录就能定位到服务器上具体磁盘的路径。

运行效果

Vue用Cordova打包后的app自升级功能实现相关推荐

  1. elementui 样式渲染的慢_解决vue+elementui项目打包后样式变化问题

    博主刚刚解决了index.html空白问题,刚打开项目页面又发现了样式出现了大问题,样式与开发版本有很大不同,有些样式没有生效.利用搜索引擎, 找到了问题所在以及解决办法: main.js中的引入顺序 ...

  2. vue+webpack项目打包后背景图片加载不出来问题解决

    vue+webpack项目打包后背景图片加载不出来问题解决 参考文章: (1)vue+webpack项目打包后背景图片加载不出来问题解决 (2)https://www.cnblogs.com/mica ...

  3. 基于cordova打包RPGMAKERMV 安卓app

    基于cordova打包RPGMAKERMV 安卓app 1.RPGMakerMV部分 部署出网页项目 2.node部分 https://nodejs.org/en/ 上下载node左边稳定版,右边是包 ...

  4. Vux+Cordova打包的安卓App实现微信分享朋友和朋友圈

    知识储备 Cordova Plugin ShareSDK 插件 什么是Cordova Plugin ShareSDK Cordova Plugin ShareSDK封装了ShareSDK的androi ...

  5. vue+elementui项目打包后样式变化问题

    main.js中的引入顺序决定了打包后css的顺序,组件内的样式没有生效可能是被第三方组件样式覆盖了. 把第三方组件 ElementUI放在前面引入,router放在后面引入,就可以实现组件样式在第三 ...

  6. vue项目cordova打包的android应用

    准备工作nodejs.cordova.AndroidStudio这些在上一篇文章中已经说过了,这里就不重复说明.以此文记录vue项目用cordova打包移动app的方法. 1.创建一个cordova项 ...

  7. vue通过webpack打包后怎么运行

    1. 成功使用webpack打包完成后会默认得到dist的文件夹 2. dist文件夹中有html与其他的静态文件 3. 在dist文件夹中打开命令窗口或者git,开一个服务器(像anywhere) ...

  8. Cordova打包Scratch为APP

    cordova cordova 本身是跨平台框架,Scratch本质上是js,需要web来打包,所以cordova顺利成章成为运行scratch的框架之一, 童心制物等公司也使用该框架进行开发. co ...

  9. webpack vue router import() 打包后单个js文件名称自定义

    webpack 配置输出文件名 output: {path: path.resolve(__dirname, 'public'),filename: '[name].[hash:8].js',chun ...

最新文章

  1. 解决Raspberry Pi不识别RTL8188eu无线网卡芯片的问题
  2. Pytorch学习-torch.max()和min()深度解析
  3. PHP通过URL传递session_id
  4. window server 安装与卸载
  5. SQL Server 筛选时间区间
  6. div里面放ul,使ul横向和纵向滚动
  7. 评分 9.7!这本 Python 书彻底玩大了?程序员:满分!
  8. js常用设计模式实现(一)单例模式
  9. matlab2018历史命令在哪,2018美赛准备之路——Matlab基础——命令行功能函数
  10. LaTex制作中文简历模板_PART 1
  11. qq四国军旗2.1 beat03 builde017记牌器开发思路(二)
  12. 什么是index.html? 如何创建和使用index.html?
  13. [ctfshow 2021摆烂杯] FORENSICS部分 writeup
  14. H5页面调用微信支付
  15. 360浏览器网页按钮点击无效
  16. 【个人记录 | UNet | 整理ing】
  17. LTE网络RLC层的polling机制
  18. android 百度 全景图,百度地图全景图
  19. html emsp ensp nbsp; thinsp;空格到底怎么占用像素的
  20. 用python计算圆周率_用python计算圆周率π

热门文章

  1. mac改变文件权限git识别为修改的问题
  2. 你学废了 Mybatis 动态批量修改吗?
  3. matlab与钻井平台,基于MATLAB环境下采用C8051F060实现钻井井眼姿态监测系统的设计...
  4. w10安装ubuntu_Win10 + Ubuntu 16.04双系统完美安装教程【详细】
  5. 如何用python画组合图形_python_matplotlib画组合图
  6. QTextEdit查找某个字符串更换颜色样式
  7. python行业中性_市场风险中性假设的r0只是等效r的其中之一
  8. 飞利浦AC6608空气净化器粉尘传感器维修
  9. python获取方法的装饰方法_python – 在一个方法上得到装饰器名称的内省?
  10. qt label显示图片_qt关于qmovie类的使用