思路:启动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相关推荐

  1. uniapp在安卓和IOS端 APP固定竖屏及获取设备信息

    在项目文件App.vue 的 onLaunch 生命周期函数里添加 调取hbuilder 5+APPJS 的方法 plus.screen 函数 plus.screen.lockOrientation( ...

  2. uniapp 打包安卓 Android 抖音app 前端篇~01

    文章目录 一.配置 1. 修改后端服务地址 2. 基础配置 3. App图标配置 4. App启动页面配置 5. App模块配置 二.发行 2.1. 云打包 2.2. 云打包配置 2.3. 下载app ...

  3. 【uniapp】uniapp开发安卓切换视频链接app闪退问题

    较低版本的安卓系统会存在 切换视频链接黑屏或者直接闪退的问题 一般是 安卓8以下的系统 我是开发在投影仪上的,系统更老,才5.7,所以就出现了闪退问题 有两个方法可以尝试解决 方法一:video标签添 ...

  4. uniapp 打包安卓 Android 抖音app 前后端调试篇~03

    文章目录 1. 未登录首页浏览短视频 2. 发布视频-云短信登录 3. 发布选择视频 4. 上传短视频到云存储 5. 测试发布视频 6. 个人中心查看发布视频 7. 首页查看刚发布视频 8. 个人中心 ...

  5. uniapp 打包安卓 Android 抖音app 后端篇~02

    文章目录 1. 中间件配置 2. 云短信配置 1. 中间件配置 2. 云短信配置

  6. uniApp开发安卓App调试与打包

    总结一下auniapp开发安卓app的调试方式及打包; 代码编程查看文档即可.; 1通过vue-cli方式初始化项目 参考地址: https://uniapp.dcloud.io/quickstart ...

  7. [附源码]计算机毕业设计Python+uniapp基于安卓的校园跑腿代购476ww(程序+lw+APP+远程部署)

    [附源码]计算机毕业设计Python+uniapp基于安卓的校园跑腿代购476ww(程序+lw+APP+远程部署) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行环境配置: ...

  8. uniapp 开发安卓App实现高德地图路线规划导航

    文章目录 技术概述 技术详述 问题与解决 我的总结 参考文献 技术概述 描述这个技术是做什么的/什么情况下会使用到这个技术,学习该技术的原因,技术的难点在哪里.控制在50-100字内. uniapp的 ...

  9. 计算机毕业设计Python+uniapp+安卓移动LYQ电子商城APP(WEB+APP+LW)

    计算机毕业设计Python+uniapp+安卓移动LYQ电子商城APP(WEB+APP+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区 ...

最新文章

  1. Android之unable to execute dex java heap space解决方案
  2. MetaHuman效果炸了!但如果只想到元宇宙,那格局有点小了
  3. Jenkins实战演练之Linux服务器快速搭建
  4. 2020年末总结,脚踏实地,一步一个脚印——致敬自己一年的心酸历程
  5. 修改eclipse默认编码方式
  6. MySQL笔记-死锁原理与分析及InnoDB中如何减少死锁
  7. C++ 后台程序实时性能监控
  8. oracle日期相减工作日_oracle 日期相减 转载
  9. 不可不知的 Android strings.xml 那些事
  10. Machine Learning ——Homework5
  11. 什么是SDN,为什么要有SDN,SDN有什么安全问题
  12. 电路里的希腊字母读音
  13. UnityShader源码2017---学习笔记与自我拓展019
  14. 硬件系列(五)-------------Android小票打印机连接 (已封装好,可直接使用)
  15. C语言readdir()函数:读取目录函数
  16. 用c语言计算运费.c
  17. 国家开放大学2021春1248公共部门人力资源管理题目
  18. UnityStandardAsset工程、源码分析_7_第三人称场景[玩家控制]_人物逻辑
  19. LPC1788--SSP设置驱动W25Q16--以及特别注意点
  20. 双一流大学名单--仅供参考

热门文章

  1. dos命令创建(删除)文件(文件夹)的几种常见方式
  2. Vue + Spring Boot 项目实战(十七):后台角色、权限与菜单分配
  3. 【科普】手机版项目管理系统软件的功能是什么?
  4. 利用Java操作Office2007成为可能
  5. FLEX(Flipboard Explorer)简介
  6. 【找规律+公式推导+切西瓜问题】HDU-1290 献给杭电五十周年校庆的礼物
  7. Docker 国内镜像源设置
  8. Linux增加ll命令
  9. linux hostname 和hostname -i问题
  10. mysql常见面试题及答案_MySQL常见面试题与答案整理