1.写在前面
1.1关于热更新是否影响应用上架
应用市场为了防止开发者不经市场审核许可,给用户提供违法内容,对热更新大多持排斥态度。
但实际上热更新使用非常普遍,不管是原生开发中还是跨平台开发。
Apple曾经禁止过jspatch,但没有打击其他的热更新方案,包括cordovar、react native、DCloud。封杀jspatch其实是因为jspatch有严重安全漏洞,可以被黑客利用,造成三方黑客可篡改其他App的数据。
使用热更新需要注意:
上架审核期间不要弹出热更新提示
热更新内容使用https下载,避免被三方网络劫持
不要更新违法内容、不要通过热更新破坏应用市场的利益,比如iOS的虚拟支付要老老实实给Apple分钱
如果你的应用没有犯这些错误,应用市场是不会管的。
2.实现步骤
2.1.基础准备
server: node js
client: vue js
ide:HBuilderX
uniapp 账户,appid
2.2.server端实现方式
2.2.1 准备新版本的wgt(参考 https://ask.dcloud.net.cn/article/35667 之“生成 App 资源升级包”)
2.2.2 准备nodejs环境,安装express(参考https://blog.csdn.net/wopelo/article/details/68925967)
2.2.3 新建一个index.js
代码:
var express=require("express");
var serveStatic=require('serve-static');
var app=express();
app.use(serveStatic(__dirname));
var router = express.Router();
app.get('/', (req, res) => res.send('Hello World!'))
app.get('/update/', function(req, res) {
var appName = req.query.name;
var appVersion = req.query.version;
checkUpdate({
appName: appName,
appVersion: appVersion
}, function(error, result) {
if (error) {
throw error;
}
res.json(result);
});
});
/*
wgtUrl:最新uin的wgt,存储在static目录下;注意:host,端口号,按情况自定义
update:控制变量,如果false,不更新‘否则更新
*/
function checkUpdate(params, callback) {
callback(null,{
update: true, /
wgtUrl: 'http://localhost:1234/static/__UNI__20CB4F1.wgt',
})
}
var http=require("http")
http.createServer(app).listen(1234,"127.0.0.1");
2.2.4 新建static文件夹,加入.wgt文件
最终文件目录长这个样

2.2.5 执行命令 node index.js
2.3.client
2.3.1 在App.vue中的onlaunch结尾加入:
plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
uni.request({
url: 'http://127.0.0.1:1234/update/',
data: {
version: widgetInfo.version,
name: widgetInfo.name
},
success: (result) => {
var data = result.data;
if (data.update && data.wgtUrl) {
console.log('nmd');
uni.downloadFile({
url: data.wgtUrl,
success: (downloadResult) => {
if (downloadResult.statusCode === 200) {
plus.runtime.install(downloadResult.tempFilePath, {
force: false
}, function() {
console.log('install success...');
plus.runtime.restart();
}, function(e) {
console.error('install fail...');
});
} else {
console.log(downloadResult.statusCode);
}
}
});
网友评论