uni-app在App平台如何实现升级更新?

uni-app在App平台的整包更新方法
本文主要介绍了uni-app在App平台上的整包更新流程,包括接口约定、客户端和服务端实现,以及常见问题。uni-app允许开发者将代码编译到多个平台,针对App端的升级,特别是整包更新,文中提供了详细的实现步骤和推荐使用uniCloud进行资源管理。对于Android,新版本apk可以直接覆盖安装,而iOS需要引导用户在Appstore中更新。
部署运行你感兴趣的模型镜像

使用 uni-app 开发,可将代码编译到iOS、Android、微信小程序等多个平台,升级时也需考虑多平台同步升级。

uni-app发布为小程序的升级模式较简单,只需将开发完的代码提交小程序后台,待审核通过后用户将自动升级。

App端的升级,又分为整包更新和资源热更新两种。

  • 整包更新,即常规的整个App安装包重新下载安装。
  • 资源热更新,即App并重新安装,里面的js等前端代码进行更新。

资源热更新另见文档:http://ask.dcloud.net.cn/article/35667

本文重点讲解整包更新。

一般iOS Appstore的安装包,无法直接更新。App启动后检查有新版本,只能调整到Appstore,然后用户在Appstore的详情页点击更新按钮。

而Android App,可以直接下载新的apk,只要包名和证书不变,就可以覆盖安装。

App升级,强烈推荐使用uniCloud。

  1. 把apk存放到uniCloud的cdn上,可以免费使用
  2. 有现成的插件,不用写升级逻辑,配好地址、版本、更新日志等参数,就能直接用,详见:https://ext.dcloud.net.cn/plugin?id=2226

如果不使用uniCloud,自己也可以写升级逻辑,下文讲解了常见的逻辑,但下文不是DCloud约定的强制逻辑,只是一般性常见做法的介绍。

接口约定

如下数据接口约定仅为示例,开发者可以自定义接口参数。

请求地址:https://www.example.com/update

请求方法:GET

请求数据:

{
    "appid": plus.runtime.appid,
    "version": plus.runtime.version
}

响应数据:

{
    "status":1,//升级标志,1:需要升级;0:无需升级
    "note": "修复bug1;\n修复bug2;",//release notes
    "url": "http://www.example.com/uniapp.apk" //更新包下载地址
}

客户端实现

App启动时,向服务端上报当前版本号,服务端判断是否提示升级。

在App.vue的onLaunch中,发起升级检测请求,如下:

onLaunch: function () {
	//#ifdef APP-PLUS
	var server = "https://www.example.com/update"; //检查更新地址
	var req = { //升级检测数据
		"appid": plus.runtime.appid,
		"version": plus.runtime.version
	};
	uni.request({
		url: server,
		data: req,
		success: (res) => {
			if (res.statusCode == 200 && res.data.status === 1) {
				uni.showModal({ //提醒用户更新
					title: "更新提示",
					content: res.data.note,
					success: (res) => {
						if (res.confirm) {
							plus.runtime.openURL(res.data.url);
						}
					}
				})
			}
		}
	})
	//#endif
}

**注意:**App的升级检测代码必须使用条件编译,否则在非App环境由于不存在plus相关API,将会报错。

升级地址URL,如果是自行托管的App,就提供自己的包地址。如果是打开应用市场,那URL如下:

if (plus.os.name=="Android") {
	appurl = "market://details?id=io.dcloud.hellouniapp"; //这个是通用应用市场,如果想指定某个应用商店,需要单独查这个应用商店的包名或scheme及参数
}
else{
	appurl = "itms-apps://itunes.apple.com/cn/app/hello-uni-app/id1417078253";
}

服务端实现

根据客户端上报的版本号,比对服务端最新版本号,决定是否需要升级,若需升级则返回升级信息(rease notes、更新包地址等)

实现示例:

  1. 【推荐】通过uniCloud的云函数模板,快速实现升级检查逻辑,详情参考:https://ext.dcloud.net.cn/plugin?id=2226
  2. php示例代码:
header("Content-type:text/json");
$appid = $_GET["appid"];
$version = $_GET["version"]; //客户端版本号
$rsp = array("status" => 0); //默认返回值,不需要升级
if (isset($appid) && isset($version)) {
    if ($appid === "__UNI__123456") { //校验appid
        if ($version !== "1.0.1") { //这里是示例代码,真实业务上,最新版本号及relase notes可以存储在数据库或文件中
            $rsp["status"] = 1;
            $rsp["note"] = "修复bug1;\n修复bug2;"; //release notes
            $rsp["url"] = "http://www.example.com/uniapp.apk"; //应用升级包下载地址
        }
    }
} 
echo json_encode($rsp);
exit;

常见问题

  1. 版本检测需要打包app,真机运行基座无法测试。因为真机运行的plus.runtime.version是固定值。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值