uniapp - 实现安卓APP实时在线更新APP
思路:启动APP时,需要一个接口提供是否有APP包更新,通过接口返回更新包的版本号、更新地址进等信息,通过获取app包版本号与更新包的版本号进行比较来进行更新。
一、发布蒲公英平台,进行实时APP更新(方案一)
1、获取manifest.json里的配置信息:plus.runtime.getProperty(plus.runtime.appid, function(widgetinfo) {})。
2、通过蒲公英api, 检测App是否有更新 接口获取APP更新内容,蒲公英 - 文档中心 - API 2.0
appKey值是APP唯一的key
3、用户版本号小于升级包版本号,先升级。
直接上代码:封装的方法可直接调用
export function checkUpdateApp() {// 获取manifest.json里的配置信息plus.runtime.getProperty(plus.runtime.appid, function(widgetinfo) {// 可以根据manifest.json里的应用名称来进行针对性的APP升级if (widgetinfo.name == 'xxxx') { //APP名称uni.request({url: 'https://www.pgyer.com/apiv2/app/check', //检测App是否有更新data: {_api_key: '', //API 用户自己的KeyappKey: '' //App应用的唯一Key},success: check => {console.log('check', check.data);if (check.statusCode == 200 && check.data.code == 0 && check.data.data) {console.log('1234');let data = check.data.data;console.log('data', data);let version = widgetinfo.version, //用户当前版本appVersion = data.buildVersion, //升级包版本appName = widgetinfo.name, //app名称// updata = data.apk_client_force_updata,//是否强制热更新appurl = data.downloadURL, //升级包地址intro = '发现新的《瑞金田长》APP,需要更新APP'; //升级包提示// wgt_version = data.wgt_version,//热更新版本号// wgt_download = data.wgt_download;//热更新地址//如果用户版本号小于升级包版本号,先升级if (data && version < appVersion) {uni.showModal({title: '更新提示',confirmText: '立即升级',content: intro,success: res => {if (res.confirm) {uni.showLoading({title: '正在更新',mask: true});uni.downloadFile({url: appurl,success: download => {if (download.statusCode == 200) {plus.runtime.install(download.tempFilePath,{force: false},() => {uni.hideLoading();plus.runtime.restart(); //更新成功启动},err => {//若没下载成功还是去下载uni.hideLoading();uni.showToast({title: '更新失败,将跳转下载页面',icon: 'none',duration: 2000});});setTimeout(function() {plus.runtime.openURL(appurl);}, 2000);}}});} else if (res.cancel) {console.log('用户点击取消');uni.showToast({title: '版本无法继续使用瑞金田长APP,请先升级',icon: 'none',duration: 2000});//退出appsetTimeout(function() {plus.runtime.quit();}, 2000);}},fail: () => {uni.hideLoading();}});} else {}}}});} else {//非安卓}});
}
二、后台提供接口(方案二) APP升级或热更新
1、获取manifest.json里的配置信息:plus.runtime.getProperty(plus.runtime.appid, function(widgetinfo) {})
2、通过接口获取更新内容
3、如果用户版本号小于升级包版本号,先升级。
4、如果用户版本号大于升级包但不等于热更新版本的情况下,去热更新
直接上代码:
<script>
export default {onLaunch: function() {console.log('App Launch');},onLoad() {// #ifdef APP-PLUS //只有App才会执行 检查更新 方法uni.getSystemInfo({success: (res) => {var that = this;//检测当前平台,如果是安卓则启动安卓更新 if (res.platform == "android") {that.checkUpdateApp();}}})// #endif},onShow: function() {},onHide: function() {},methods:{/* 检查更新 在线更新 */checkUpdateApp(){// 获取manifest.json里的配置信息plus.runtime.getProperty(plus.runtime.appid, function(widgetinfo) {// 可以根据manifest.json里的应用名称来进行针对性的APP升级if (widgetinfo.name == "xxxx") { //APP名称// 获取manifest.json里的版本号 uni.request({url:'',//服务器请求更新信息地址success:(srcData) => {console.log(srcData)let data = srcData.data;let version = widgetinfo.version,//用户当前版本appVersion = data.apk_client_version,//升级包版本appName = widgetinfo.name, //app名称updata = data.apk_client_force_updata,//是否强制热更新appurl = data.apk_client_download,//升级包地址intro = data.apk_client_intro,//升级包提示wgt_version = data.wgt_version,//热更新版本号wgt_download = data.wgt_download;//热更新地址//如果用户版本号小于升级包版本号,先升级 if(data && (version < appVersion)){uni.showModal({title:"更新提示",confirmText:"立即升级",content:intro,success: (src) => {if (res.confirm) {uni.showLoading({title:"正在更新",mask:true})uni.downloadFile({url:appurl,success: (download) => {if(download.statusCode == 200){plus.runtime.install(download.tempFilePath,{force:false},()=>{uni.hideLoading();plus.runtime.restart();//更新成功启动},(err)=>{//若没下载成功还是去下载uni.hideLoading();uni.showToast({title:"更新失败,将跳转下载页面",icon:"none",duration:2000})})setTimeout(function(){plus.runtime.openURL(appurl);},2000)}}})} else if (res.cancel) {console.log('用户点击取消');uni.showToast({title:"版本无法继续使用瑞金田长APP,请先升级",icon:"none",duration:2000})//退出appsetTimeout(function(){plus.runtime.quit();},2000)}},fail: () => {uni.hideLoading();}})}else{}//如果用户版本号大于升级包但不等于热更新版本的情况下,去热更新if(data && (version >= appVersion) && (version != wgt_version)){uni.showLoading({title:"正在更新包,请稍后...",mask:true})uni.downloadFile({url:wgt_download,success: (wgtdow) => {if(wgtdow.statusCode == 200){plus.runtime.install(wgtdow.tempFilePath,{force:true},()=>{uni.hideLoading();plus.runtime.restart();//更新成功启动},(err)=>{//若没下载成功还是去下载uni.hideLoading();uni.showModal({content:"更新失败,请手动下载最新瑞金田长APP",success: (res) => {plus.runtime.openURL(wgt_download);}})})}}})}}})} else {//非安卓}});}},
};
</script>
uniapp - 实现安卓APP实时在线更新APP相关推荐
- uniapp在安卓和IOS端 APP固定竖屏及获取设备信息
在项目文件App.vue 的 onLaunch 生命周期函数里添加 调取hbuilder 5+APPJS 的方法 plus.screen 函数 plus.screen.lockOrientation( ...
- uniapp 打包安卓 Android 抖音app 前端篇~01
文章目录 一.配置 1. 修改后端服务地址 2. 基础配置 3. App图标配置 4. App启动页面配置 5. App模块配置 二.发行 2.1. 云打包 2.2. 云打包配置 2.3. 下载app ...
- 【uniapp】uniapp开发安卓切换视频链接app闪退问题
较低版本的安卓系统会存在 切换视频链接黑屏或者直接闪退的问题 一般是 安卓8以下的系统 我是开发在投影仪上的,系统更老,才5.7,所以就出现了闪退问题 有两个方法可以尝试解决 方法一:video标签添 ...
- uniapp 打包安卓 Android 抖音app 前后端调试篇~03
文章目录 1. 未登录首页浏览短视频 2. 发布视频-云短信登录 3. 发布选择视频 4. 上传短视频到云存储 5. 测试发布视频 6. 个人中心查看发布视频 7. 首页查看刚发布视频 8. 个人中心 ...
- uniapp 打包安卓 Android 抖音app 后端篇~02
文章目录 1. 中间件配置 2. 云短信配置 1. 中间件配置 2. 云短信配置
- uniApp开发安卓App调试与打包
总结一下auniapp开发安卓app的调试方式及打包; 代码编程查看文档即可.; 1通过vue-cli方式初始化项目 参考地址: https://uniapp.dcloud.io/quickstart ...
- [附源码]计算机毕业设计Python+uniapp基于安卓的校园跑腿代购476ww(程序+lw+APP+远程部署)
[附源码]计算机毕业设计Python+uniapp基于安卓的校园跑腿代购476ww(程序+lw+APP+远程部署) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行环境配置: ...
- uniapp 开发安卓App实现高德地图路线规划导航
文章目录 技术概述 技术详述 问题与解决 我的总结 参考文献 技术概述 描述这个技术是做什么的/什么情况下会使用到这个技术,学习该技术的原因,技术的难点在哪里.控制在50-100字内. uniapp的 ...
- 计算机毕业设计Python+uniapp+安卓移动LYQ电子商城APP(WEB+APP+LW)
计算机毕业设计Python+uniapp+安卓移动LYQ电子商城APP(WEB+APP+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区 ...
最新文章
- Android之unable to execute dex java heap space解决方案
- MetaHuman效果炸了!但如果只想到元宇宙,那格局有点小了
- Jenkins实战演练之Linux服务器快速搭建
- 2020年末总结,脚踏实地,一步一个脚印——致敬自己一年的心酸历程
- 修改eclipse默认编码方式
- MySQL笔记-死锁原理与分析及InnoDB中如何减少死锁
- C++ 后台程序实时性能监控
- oracle日期相减工作日_oracle 日期相减 转载
- 不可不知的 Android strings.xml 那些事
- Machine Learning ——Homework5
- 什么是SDN,为什么要有SDN,SDN有什么安全问题
- 电路里的希腊字母读音
- UnityShader源码2017---学习笔记与自我拓展019
- 硬件系列(五)-------------Android小票打印机连接 (已封装好,可直接使用)
- C语言readdir()函数:读取目录函数
- 用c语言计算运费.c
- 国家开放大学2021春1248公共部门人力资源管理题目
- UnityStandardAsset工程、源码分析_7_第三人称场景[玩家控制]_人物逻辑
- LPC1788--SSP设置驱动W25Q16--以及特别注意点
- 双一流大学名单--仅供参考