uni-app 实现热更新 (服务端为php)

4 篇文章 0 订阅
2 篇文章 0 订阅

热更新就是打开App时遇到的即时更新,可以免重新下载安装来更新我们app上的内容

下面直接贴 uni-app 热更新步骤~

1:在HBuilder 打包热更需要用到的 wgt 包文件

wgt包上传到你的服务器,让app可以下载

 

2: 我的服务端代码 

<?php

$version = htmlspecialchars($_GET['version']);
$name = htmlspecialchars($_GET['name']);

//todo 此处可以根据用户版本号 app名称 用户uid 来判断要不要让该app更新

$arr = array(
            "update" => 1,                        // 是否更新,1为是 其他为否
            "versionCode" => "1.0.1",             // 版本号
            "description" => "此次为更新测试哦",   //  更新描述 
            "upgradeUrl" => "http://.../...wgt"   // 更新地址,就是上个步骤打包的wgt下载地址
        );

// 输出json 给客户端
echo json_encode($arr);die;

3:uni-app 的前端代码

plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
		uni.request({
			url: 'http://.../...php', //你的服务端地址,代码在步骤2
			data: {
				version: widgetInfo.version,  // manifest.json 里面的version
				name: widgetInfo.name    
			},
			success: (result) => {
				var data = result.data;
				console.log(data);

                // 要更新 且有更新包地址
				if (data.update == 1 && data.wgtUrl) {
                    // 弹出 选择框 让用户选择是否更新,
					uni.showModal({
						title: '版本更新' + data.versionCode,
						content: data.description,
						confirmText: "更新",
						showCancel: true,
						success: function(e) {
							if (e.confirm) {
								if (plus.os.name.toLowerCase() == 'ios') {
									// 跳转到下载页面
												// plus.runtime.openURL(data.upgradeUrl)
												uni.downloadFile({
													url: data.upgradeUrl,
													success: (downloadResult) => {
														if (downloadResult.statusCode === 200) {
															plus.runtime.install(downloadResult.tempFilePath, {
																force: true
															}, function() {
																console.log('install success...');
																plus.runtime.restart();
															}, function(e) {
																console.error('install fail...');
															});
														}
													}
												});
								} else {
									var dtask = plus.downloader.createDownload(
										data.upgradeUrl, {},
										function(d, status) {
											uni.showToast({
												title: '下载完成',
												mask: false,
												duration: 2000
											});
											console.log(d.filename);
											console.log(d.tempFilePath);
											      console.log(plus.io.convertLocalFileSystemURL(d.filename));
											// 下载完成  安装 force 一定要设置为true,更新完成后 重启应用	                                          			
											if (status == 200) {								                                                                                
                                     
                       
                     plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename), {
													force: true
												}, function() {
													plus.runtime.restart();

												}, function(error) {
													uni.showToast({
														title: '安装失败-01',
														mask: false,
														duration: 1500
													});
												})

											} else {
												uni.showToast({
													title: '更新失败-02',
													mask: false,
													duration: 1500
												});
											}
										});
									try {
										dtask.start(); // 开启下载的任务
										var prg = 0;
										var showLoading = plus.nativeUI.showWaiting("正在下载"); //创建一个showWaiting对象 
										dtask.addEventListener('statechanged', function(
											task,
											status
										) {
											// 给下载任务设置一个监听 并根据状态  做操作
											switch (task.state) {
												case 1:
													showLoading.setTitle("正在下载");
													break;
												case 2:
													showLoading.setTitle("已连接到服务器");
													break;
												case 3:
													prg = parseInt(
														(parseFloat(task.downloadedSize) /
															parseFloat(task.totalSize)) *
														100
													);
													showLoading.setTitle("  正在下载" + prg + "%  ");
													break;
												case 4:
													plus.nativeUI.closeWaiting();
													//下载完成
													break;
											}
										});
									} catch (err) {
										plus.nativeUI.closeWaiting();
										uni.showToast({
											title: '更新失败-03',
											mask: false,
											duration: 1500
										});
									}


								}
							}
						}
					})
				}
			}
		});
	});

 

这样就可以实现热更拉 不过热更完得重启才能使用,苹果还没试过 安卓亲测 没问题

 

end~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值