uniapp 热更新实现方法 ios

2020-07-28  本文已影响0人  kid_add


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);

                        }

                    }  

                }); 

2.3.2   Hbuild run 代码

上一篇 下一篇

猜你喜欢

热点阅读