跟你们分享个超好玩的问题哦~你们猜怎么做到增量更新?是不是觉得挺酷的?那我们就一起来研究下!
首先得明白什么叫增量更新功能,以及为啥它这么重要。你造吗?有了这家伙,就算App Store赚不到钱,咱也能更新应用。像iOS上要用虚拟支付,就得给苹果分钱。但用上增量更新的招儿,就能逃开这个事,还不会影响App Store的利益。这事儿就好比天大的好事!
// #ifdef APP-PLUS plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) { uni.request({ url: 'http://www.javanx.cn/update/', data: { version: widgetInfo.version, name: widgetInfo.name }, success: (result) => { var data = result.data; if (data.update && data.wgtUrl) { 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) { // 这里的错误很重要,最好能记录的服务器日志中,方便调试或以后维护了解更新错误情况,及时解决 // 如何更新到服务器? // 调用一个接口,将e返回咯 console.error('install fail...'); }); } } }); } } }); }); // #endif
plus.runtime.getProperty( plus.runtime.appid, function ( wgtinfo ) { //appid属性 var wgtStr = "appid:"+wgtinfo.appid; //version属性 wgtStr += "
version:"+wgtinfo.version; //name属性 wgtStr += "
name:"+wgtinfo.name; //description属性 wgtStr += "
description:"+wgtinfo.description; //author属性 wgtStr += "
author:"+wgtinfo.author; //email属性 wgtStr += "
email:"+wgtinfo.email; //features 属性 wgtStr += "
features:"+wgtinfo.features; console.log( wgtStr ); } );
你是不是想知道怎么做Uni-App的增量升级包?别急,这个不难!只要在主目录里的App.vue文件里面找那个叫onLaunch的函数,然后在那儿监测下是否有升级就好。虽然看着很复杂,但我解释给你听,保证你听得明白哈~
别着急,先看看咱们是不是app端,用#ifdef APP-PLUS咋样?搞定以后,直接用uni.request调个服软端接口就行。把现在用的版本数给它发过去,人家 Servant 会给你回个update参数和 wgtUrl。要买新货的话,还得在链接后面加上”//”, 不然没有地方给你装!不过不用担心,出现这种情况前,你记得把东西存好,存到能摸得到的地方~
var downloadTask = uni.downloadFile({ url: 'https://www.javanx.cn/file/uni-app.rar', complete: ()=> {} }); downloadTask.onProgressUpdate(function(res)=>{ console.log('下载进度' + res.progress); console.log('已经下载的数据长度' + res.totalBytesWritten); console.log('预期需要下载的数据总长度' + res.totalBytesExpectedToWrite); })
你们猜怎么着,我又准备抛出一个问题给你们想一想:Uni-App的增量更新该如何处理?这可不是容易回答的!首先,大家得理解,有些特殊情况下咱们不能用增量更新的办法。比方说要是SDK变动很大,像加入了新功能Map之类的,那就得采取整包更新。还有就是原来没NVUE文件,现在更新后加了,这种情况也没法用增量更新。这是因为在非定制组件编译模式中,如果没有NVUE文件,WEEX引擎是不被包含的。然而自定义组件模式就带有WEEX引擎,因此无论是否有NVUE文件,都能进行项目生成。
var express = require('express'); var router = express.Router(); var db = require('./db'); // TODO 查询配置文件或者数据库信息来确认是否有更新 function checkUpdate(params, callback) { db.query('一段SQL', function(error, result) { // 这里简单判定下,不相等就是有更新。 var currentVersions = params.appVersion.split('.'); var resultVersions = result.appVersion.split('.'); if (currentVersions[0] < resultVersions[0]) { // 说明有大版本更新 callback({ update: true, wgtUrl: '', pkgUrl: result.pkgUrl // apk,ipa包可下载地址 }) } else if (currentVersions[currentVersions.length-1] < resultVersions[resultVersions.length-1]) { // 认为是小版本更新 callback({ update: true, wgtUrl: result.wgtUrl, // wgt包可下载地址 pkgUrl: '' }) } else { // 其它情况均不更新 callback({ update: false }) } }); } router.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); }); });
你是不是想问我之前提过的关于”Uni-App”的那部分的意思?哈哈没错,就是它!首先,咱们得了解下HBuilder里面的appid和版本信息其实都是跟HBuilder息息相关的,跟我们的APP没什么关系~如果我们要测试APP升级功能的话,就要打包一个定制的底座或者正式版包才行哦;其次,plus.runtime.version或者uni.getSystemInfo()读出来的其实是APK/IPA的版本号,并不是资源文件里头的版本号。所以,咱们要用到plus.runtime.getProperty()这个函数才能搞定;接着说,安装完wgt资源包之后,务必要执行plus.runtime.restart()这个操作,不然新添加的东西可是没法用的哟;再来,如果APP的原生引擎没有升级,但wgt包有升级的话,那咱们就得抓紧时间测试看看它们是不是能完美配合了。虽然平台都会帮我们检查不兼容的情况,但如果自己测试时没问题的话,可以在MANIFEST文件中设置让它直接跳过提示哈。
哈喽各位小伙伴们,终于到揭开答案的时候!使用增量更新功能,不仅保证我们的应用可以更新又不影响内容,还帮我们保护了应用市场的利益。不得不提的是Uni-App就有个超简单好用的制作增量更新的方法,还适用于那些特殊情况下不能用增量更新的场合。能用上这么好的功能,绝对赞!今天我就带你们了解了怎么实现增量更新,也一起探讨了Uni-App的好处。希望你们都能找到自己需要的东西。要是你对这个话题挺感兴趣的,就赶紧在评论里分享你的想法!别忘了点个赞,分享给你其他的朋友们。下次见!
评论0