我的编程空间,编程开发者的网络收藏夹
学习永远不晚

uniapp开发APP之强制更新和热更新的实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

uniapp开发APP之强制更新和热更新的实现

前言

app和h5相比,有着更新延迟和更新难的特性,h5在部署更新后可以保证所有用户访问的都是最新的功能,而app则可能存在多个版本,用户也可以选择不升级继续使用;

但是有时候,app进行了大规模的调整,导致之前所有版本的app都不可用,或者一些重要功能作出了调整(比如收费内容发生改变),强制用户需要更新app,这样的情况并不少见;

因此在第一版本的app内,就应该把包内更新的功能加上,以保证app的更新续航。

整包更新和热更新

APP的更新分为整包更新和热更新。

整包更新是指下载完整apk文件进行覆盖安装。

热更新是指把app有改动的地方打包进wgt文件,只更新wgt文件中的内容,不进行整包安装,在用户视角也叫做省流量更新

版本号约束

既然是版本更新,那就离开版本号的约束。

因为涉及两种更新方式,所以要先制定版本号的规范:
建议 严格遵循 Semantic Versioning 2.0.0 语义化版本规范。

主版本号:不兼容的 API 修改

次版本号:向下兼容的功能性新增

修订号:向下兼容的问题修正

实现原理

  • 开发后台版本管理功能,每次发版上传android安装包,记录版本号、是热更新还是整包更新、是否强制更新等
  • 每次打开app(onLaunch生命周期)的时候,通过接口请求最新版本信息,再获取当前安装包信息,对比版本号
  • 如果版本号不一致,且接口获取的版本号大于当前应用的版本号,则进行整包更新或热更新。
  • 需要注意的是,ios并不存在下载安装包覆盖安装这种操作,所以在ios平台需要跳转到appstore进行更新
export default {
 onLaunch: function() {
     // 条件编译,只在app环境下进行更新操作
  // #ifdef APP-PLUS  
  if (process.env.NODE_ENV === 'production') { // 只在正式环境下启用,避免更新影响开发和测试环境(这步取决于你的需求)
  
      // 获取app运行信息
   plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
       
       // 通过接口获取最新版本信息,具体请求不演示
    getVersion({
     platform: '1'
    }).then(res => {
    
     if (!res) {
      return;
     }
                    
                    // 版本号得到的是类似 '7.0.1'的字符串,把它去除.并转为纯数字
     const appCode = parseInt(res.app_code.split('.').join(''))
     const version = parseInt(widgetInfo.version.split('.').join(''))

     if (appCode > version) { // 只有接口版本号 > 当前包版本号才进行更新
         // type为0热更新(看接口设计)
      if (res.type == '0') { // 热更新,下载更新文件,这一步可以先显示更新提示的ui,用户点击更新后再下载更新
       this.updateHot(res.download_url)
      } else if (res.type == '1') { // 整包更新,这一步可以先显示更新提示的ui,用户点击更新后再下载更新
          this.updatePackage(res.download_url)
      }
     }
    }).catch(err => {
     console.error(err)
    })
   });
  }
 },
 methods: {
     // 整包更新
     updatePackage(url) {
     
         // ios平台不允许这样更新,所以我们需要跳转到appstore进行更新
        if (uni.getSystemInfoSync().platform === 'ios') {
          plus.runtime.launchApplication({
     action: 'itms-apps://xxx' // 链接可以通过接口获取
    });
         } else {
          this.isDownloading = true
          
          // 构建了下载任务,但此时并未开始下载
          const dtask = plus.downloader.createDownload(url, {},
           (downloadResult, status) => {
            if (status === 200) {
             plus.runtime.install(downloadResult.filename, {
           force: false
          },
          function() {
           plus.runtime.restart(); // 安装成功后重启
          },
          function(e) {
           uni.showToast({
            icon: 'none',
            title: '下载更新失败'
           })
          });
            }
           }
          );
        
                // 执行安装包下载
          dtask.start();
         }
     },
     // 热更新
     updateHot(url) {
         uni.downloadFile({
    url,
    success: (downloadResult) => {
     if (downloadResult.statusCode === 200) {
         // 下载更新文件成功后进行安装
      plus.runtime.install(downloadResult.tempFilePath, {
       force: false // 是否强制安装, 如果将要安装应用的版本号不高于现有应用的版本号则终止安装,并返回安装失败。
      },
      function() {
       uni.showToast({
        title:'更新完毕,即将重启',
        icon: 'none',
        position: 'bottom'
       })
       setTimeout(() => {
        plus.runtime.restart(); // 安装完成后重启应用
       },2000)
      })
     }
    }
   });
     }
 }
}

其他方案

插件市场提供了uni-upgrade-center升级方案,包含了后台管理app版本以及app自动更新的逻辑,需要注意的是后台管理是基于uni-admin框架的插件,如果应用内没有使用uni-admin,集成起来会相对麻烦

参考资料

uni-app 资源在线升级/热更新

总结

到此这篇关于uniapp开发APP之强制更新和热更新的文章就介绍到这了,更多相关uniappAPP强制更新和热更新内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

uniapp开发APP之强制更新和热更新的实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

uniapp开发APP之强制更新和热更新的实现

使用uni-app开发,可将代码编译到iOS、Android、微信小程序等多个平台,升级时也需考虑多平台同步升级,下面这篇文章主要给大家介绍了关于uniapp开发APP之强制更新和热更新的相关资料,需要的朋友可以参考下
2022-12-21

uniapp实现app热更新的方法

本文主要介绍了uniapp实现app热更新的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-03

Android开发中如何实现强制更新APP

这篇文章给大家介绍Android开发中如何实现强制更新APP,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android应用强制更新的用途十分广泛,特别上刚上线的应用肯定会存在或多或少的bug,特别是涉及移动支付这一块
2023-05-31

uniApp实现热更新的思路与详细过程

经常在做app的时候,会有做热更新的需求,这也是常用的更新app的一种手段,下面这篇文章主要给大家介绍了关于uniApp实现热更新的思路与详细过程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-11-16

angular强制更新ui视图的实现方法

这篇文章主要介绍了angular强制更新ui视图的实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-06

如何在Android开发中中实现一个App更新功能

如何在Android开发中中实现一个App更新功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。开发环境:AndroidStudio2.1.2+gradle-2.10部分代
2023-05-31

Android开发之ListView列表刷新和加载更多实现方法

本文实例讲述了Android开发之ListView列表刷新和加载更多实现方法。分享给大家供大家参考。具体如下: 上下拉实现刷新和加载更多的ListView,如下:package com.sin.android.ui; import and
2022-06-06

揭秘Golang热更新机制:实现代码的热插拔方法详解

Golang热更新原理解密:如何实现代码热插拔,需要具体代码示例随着软件开发的快速发展,热更新已经成为了现代软件开发中的一个重要特性。热更新能够帮助开发人员在不停机的情况下,动态地添加、修改或删除代码,从而实现功能的更新和修复。在Gola
揭秘Golang热更新机制:实现代码的热插拔方法详解
2024-01-20

Golang热更新的实现原理:代码替换与内存重载机制详解

Golang热更新原理详解:源码替换和内存重载的实现方式,需要具体代码示例Golang作为一门现代化编程语言,具有卓越的性能和高效的开发体验,已经成为众多开发者的首选。然而,在开发过程中,很多开发者都会碰到一个问题,即如何实现代码的热更新
Golang热更新的实现原理:代码替换与内存重载机制详解
2024-01-20

PHP开发中如何使用Memcache实现高效的数据读写和更新?

PHP开发中如何使用Memcache实现高效的数据读写和更新?Memcache是一种内存缓存技术,可以提供高速的数据访问和存储。在PHP开发中,如果能够合理地使用Memcache,就可以大大提高数据的读取和更新效率。本文将介绍如何使用Mem
PHP开发中如何使用Memcache实现高效的数据读写和更新?
2023-11-07

Android应用开发的版本更新检测升级功能怎么实现

这篇文章主要介绍“Android应用开发的版本更新检测升级功能怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android应用开发的版本更新检测升级功能怎么实现”文章能帮助大家解决问题。一.
2023-06-30

编程热搜

目录