所有分类
  • 所有分类
  • 后端开发
Uni-App增量更新大揭秘!iOS虚拟支付绕过,App Store无压力

Uni-App增量更新大揭秘!iOS虚拟支付绕过,App Store无压力

这里不是针对Uni-App开发,所有的增量更新都应如此(但代码以Uni-App为例)。如何制作增量更新升级包这样,我们的app就拥有了,增量更新功能。每次如果是小量更新,就可以通过wgt包,来实现增量更新。增量更新功能需要注意些什么增量更新

跟你们分享个超好玩的问题哦~你们猜怎么做到增量更新?是不是觉得挺酷的?那我们就一起来研究下!

首先得明白什么叫增量更新功能,以及为啥它这么重要。你造吗?有了这家伙,就算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的函数,然后在那儿监测下是否有升级就好。虽然看着很复杂,但我解释给你听,保证你听得明白哈~

Uni-App增量更新大揭秘!iOS虚拟支付绕过,App Store无压力

别着急,先看看咱们是不是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的好处。希望你们都能找到自己需要的东西。要是你对这个话题挺感兴趣的,就赶紧在评论里分享你的想法!别忘了点个赞,分享给你其他的朋友们。下次见!

原文链接:https://www.icz.com/technicalinformation/web/2024/03/11345.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?