糯麦 NurMai

400-158-5662

糯麦科技

/

新闻资讯

/

技术讨论

/

如何使用uniapp实现热更新逻辑

如何使用uniapp实现热更新逻辑

原创 新闻资讯

于 2023-09-07 16:17:18 发布

16322 浏览

现在,热更新已经非常普遍,无论是在游戏还是普通的app中,甚至在一些脚手架或编辑器中都可以看到。虽然它们的表现可能有所不同,但都有一个共同的效果,即能够实时更新我们所需的内容。


本篇文章主要讲述的是小程序和APP的热更新。对于小程序的热更新,我会提供具体的实现步骤和代码示例。而对于APP的热更新,我将在文章中介绍一些基本的概念和技术,并提供一些可能有用的资源和链接,但请注意,由于我无法提供谷歌应用市场的具体实现方式,所以未经过实际试验。


小程序热更新

小程序热更新一般比较简单,各平台都支持,主要是为了在有新版本发布的时候实时通知用户,下载新版本使用,防止出现问题。下面直接上代码:

// 放在 app.vue 的 onShow 生命周期里面
// 以下是vue3的示例

// app.vue
import {
  onShow
} from "@dcloudio/uni-app"

const updateMiniProgram = () => {
    const updateManager = uni.getUpdateManager();

    updateManager.onCheckForUpdate(() => {});

    updateManager.onUpdateReady((res) => {
        uni.showModal({
            title: '更新提示',
            content: '新版本已经准备好,是否重启应用?',
            success(_res) {
                if (_res.confirm) {
                    // 重启
                    updateManager.applyUpdate();
                }
            }
        });
    });

    updateManager.onUpdateFailed(() => {});
 }


onShow(() => {
    updateMiniProgram()
})


APP更新

插件方式

插件市场有很多解决方案,可以使用官方的热更新解决方案,这里主要讲述自己实现,无论是那种实现,都需要后台上传热更新包告诉APP,是否要更新


官方实现


2.jpg


优点:

使用简单,无需太复杂的操作

界面美观,可直接使用

官方插件有保障


缺点:

需要单独部署后台管理系统

云开发以及云函数开发可能需要前端自己开发

目前按流量收费


总结:不想自己开发逻辑的可使用官方插件,但后期费用什么的不好说(毕竟之前都是免费的),现在很多东西都收费了


自己实现

其实整个过程也没那么难,这里主要讲解一下过程


后台管理系统


3.jpg

新增包示例


需开发包管理模块,区分IOS包和安卓包,包含版本号、下载链接、热更新链接、最低版本号,热更新包我们可以放到OSS上或者其他位置,还要维护全局版本号即最低版本号的判断条件,还可以加入是否强制更新,上述其实没什么难度,就是一个简单的增删改查列表


APP端热更新

获取当前包的版本信息

// 使用plus拿到当前的包
plus.runtime.getProperty(plus.runtime.appid, (inf) => {
    const version = inf.version.split('.').join('');
    console.log('机型=>' + plus.device.model)
    console.log('生产厂商=>' + plus.device.vendor)
    console.log('唯一标识=>' + plus.device.uuid)
    console.log('设备操作系统=>' + plus.os.version)
    // 获取最近的版本信息 发送请求
    // 把当前包版本号传给后端查询是否需要更新
    await clientVersion(options)
}


更新逻辑

1.强制更新

// 获取最近的版本信息
const res = await clientVersion(options)

if(res.type === "强制更新"){
    // 强制更新则提示打开自己的网站
    uni.showModal({
        title: '更新提示',
        content: '应用需要升级',
        showCancel: false,
        cancelText: '',
        confirmText: '立即升级',
        success: res => {
            // 打开自己的下载网站
            plus.runtime.openURL(downloadUrl);
        }
    });
    return;
}

2.可选更新

// 获取最近的版本信息
const res = await clientVersion(options)

if(res.type === "可选更新"){
    // 可选更新选择更新即打开自己的网站
    // 不更新无操作
    uni.showModal({
        title: '更新提示',
        content: '应用需要升级',
        showCancel: true,
        cancelText: '下次再说',
        confirmText: '立即升级',
        success: res => {
              if (res.confirm) {
                // 打开自己的下载网站
                  plus.runtime.openURL(downloadUrl);
              }
        }
    });
    return;
}

3.自动更新

// 获取最近的版本信息
const res = await clientVersion(options)

if(res.type === "自动更新"){
    // 下载安装包
    uni.downloadFile({
        url: updeteUrl,
        success: (result) => {
            if (result.code === 200) {
                // 自动安装(应用重启才会生效)
                plus.runtime.install(result.path, {
                  force: false
                }, function() {
                  console.log('install success...');
                  //重启
                  // 也可以下次自己启动
                  plus.runtime.restart();
                }, function(e) {
                  console.error('自动更新,安装失败')
                });
            } else {
                console.error('自动更新,下载失败');
            }
        },
        fail: function(e) {
          console.error('下载失败',JSON.stringify(e))
        }
    });
}

4.无更新

// 获取最近的版本信息
const res = await clientVersion(options)
if(res.type === "无更新"){
  // 其他操作
}

至此基本上逻辑讲清楚了,至于后端如何设计、UI如何设计这就不多说了!

uniapp

小程序开发

js

阅读排行

  • 1. 几行代码就能实现Html大转盘抽奖

    大转盘抽奖是网络互动营销的一种常见形式,其通过简单易懂的界面设计,让用户在游戏中体验到乐趣,同时也能增加商家与用户之间的互动。本文将详细介绍如何使用HTML,CSS和JavaScript来实现大转盘抽奖的功能。

    查看详情
  • 2. 浙江省同区域公司地址变更详细流程

    提前准备好所有需要的资料,包含:房屋租赁合同、房产证、营业执照正副本、代理人身份证正反面、承诺书(由于我们公司其中一区域已有注册另外一公司,所以必须需要承诺书)

    查看详情
  • 3. 微信支付商户申请接入流程

    微信支付,是微信向有出售物品/提供服务需求的商家提供推广销售、支付收款、经营分析的整套解决方案,包括多种支付方式,如JSAPI支付、小程序支付、APP支付H5支付等支付方式接入。

    查看详情
  • 4. 阿里云域名ICP网络备案流程

    根据《互联网信息服务管理办法》以及《非经营性互联网信息服务备案管理办法》,国家对非经营性互联网信息服务实行备案制度,对经营性互联网信息服务实行许可制度。

    查看详情
  • 5. 微信小程序申请注册流程

    微信小程序注册流程与微信公众号较为相似,同时微信小程序支持通过已认证的微信公众号进行注册申请,无需进行单独认证即可使用,同一个已认证微信公众号可同时绑定注册多个小程序。

    查看详情