uni app开发,基于uniapp的开源项目

  uni app开发,基于uniapp的开源项目

  本文为大家带来了关于uniapp的相关知识,主要介绍了如何实现资源的在线升级和热更新。使用uni-app开发跨终端应用,可以将代码编译到iOS、Android、微信小程序等平台。升级时,还需要考虑多个平台的同时升级。希望对你有帮助。

  UNI-APP开发(仿饿)开发课程:进入学习

  推荐:《uniapp视频教程》

  

一、前言

  使用uni-app开发跨终端应用。可以把代码编译到iOS、Android、微信小程序等平台。升级的时候也要考虑多平台同步升级。其中,发布为小程序的uni-app升级方式简单,只需将开发好的代码提交到小程序后台,用户审核通过后自动升级即可。

  从HBlDERX的1.6.5开始,uni-app支持app资源升级包wgt的生成。

  

二、wgt 资源升级包升级

  

2.1 修改版本号

  首先,更新manifest.json中的版本号

  比如之前是1.0.0,那么新版本应该是1.0.1或者1.1.0。

  

2.2 发行

  然后,在HBuilderX中生成一个升级包(wgt)。

  菜单-发布-原生应用-制作手机应用资源升级包

  生成结束会通知控制台升级包的输出位置。

  

2.3 安装资源升级包

  应用程序的升级需要服务器和客户端之间的协作。下面是本地测试过程中的操作示例:

  存放资源

  保存%appid%。wgt文件放在服务器的静态目录下,即http://www.example.com/static/UNI832D722.wgt.

  服务端接口

  同意测试和升级接口,其地址为http://www.example.com/update/.

  传入参数

  名称字符串客户端读取的应用程序名称。定义这个参数可以方便多个应用程序重用接口。版本字符串客户端读取的版本号信息返回参数

  Update Boolean false是否有更新wgtUrl字符串wgt包的下载地址,用于wgt模式更新。PkgUrl字符串apk/ipa包下载地址或AppStore地址,用于整包升级。

2.3.1 代码示例

  以下是服务器端判断的简单例子,仅供参考,在实际开发中会根据自己的业务需求进行处理。

  var express=require( express );var路由器=express。路由器();var db=require(。/db’);//TODO查询配置文件或数据库信息,确认是否有更新。

  函数checkUpdate(参数,回调){

  Db.query(一段SQL ,函数(错误,结果){

  //这里简单的判断,不等式意味着有更新。

  var current versions=params . appversion . split( . );

  var result versions=result . appversion . split( . );

  if(current versions[0]result versions[0]){

  //说明有大版本更新

  回拨({

  更新:真的,

  wgtUrl: ,

  pkgUrl: result.pkgUrl

  })

  }否则{

  //其他情况视为小版本更新。

  回拨({

  更新:真的,

  wgtUrl: result.wgtUrl,

  pkgUrl:“”

  })

  }

  });} router.get(/update/),function(req,res) {

  var appName=req . query . name;

  var app version=req . query . version;

  检查更新({

  appName: appName,

  应用版本:应用版本

  },函数(错误,结果){

  如果(错误){

  投掷误差;

  }

  res.json(结果);

  });});需要注意的事项

  请根据自己的业务逻辑灵活处理服务器的具体判断逻辑。应用程序中的路径应尽量不包含特殊符号。客户端检测升级

  使用以下代码在App.vue的onLaunch中检测升级:

  //# ifdef APP-PLUS PLUS . runtime . getproperty(PLUS . runtime . appid,function(widgetInfo) {

  uni.request({

  网址: http://www.example.com/update/,

  数据:{

  版本:widgetInfo.version,

  名称:widgetInfo.name

  },

  成功:(结果)={

  var data=result.data

  if (data.update data.wgtUrl) {

  uni.downloadFile({

  网址:data.wgtUrl,

  成功:(下载结果)={

  if(download result . status code===200){

  plus . runtime . install(download result . tempfile path,{

  力:假

  },function() {

  console.log(安装成功.);

  plus . runtime . restart();

  },函数(e) {

  console.error(安装失败.);

  });

  }

  }

  });

  }

  }

  });});//#endif不支持资源升级包情况如下:

  SDK的一些调整,比如地图模块的加入,就不能用这种方式升级,必须整包升级。您不能使用这种方法来添加和更改本机插件。对于旧的非定制组件编译模式,这种模式已经被淘汰。但为了以防万一,需要说明的是,旧的非定制组件编译模式,如果之前的项目中没有nvue文件,但在更新中添加了新的nvue文件,就不能这样使用。因为非定制组件的编译模式不会在没有nvue文件的情况下封装weex引擎,所以不能动态添加原生引擎。自定义组件模式默认包含weex引擎,不管项目下是否有nvue文件。注意事项

  条件编译,这个升级逻辑只在App平台执行。Appid和版本信息等。都是HBuilderX真机运行开发过程中HBuilder应用的信息,所以需要封装自定义库或者正式包来测试和升级功能。Plus.runtime.version或者uni.getSystemInfo()读取的是apk/ipa包的版本号,而不是manifest.json资源中的版本信息,所以这里我们使用plus.runtime.getProperty()获取相关信息。wgt资源包安装成功后,必须执行plus.runtime.restart(),否则新内容不会生效。如果App的原生引擎没有升级,那么在只升级wgt包的情况下,需要测试wgt资源和原生基础的兼容性。默认情况下,平台会提示不匹配的版本。如果自测没问题,可以在manifestt.json中配置忽略提示为了防止开发者未经市场批准向用户提供非法内容,市场大多拒绝热更新。但其实热更新是很常见的,无论是在原生开发还是跨平台开发。

  苹果曾经禁止jspatch,但并没有打击其他热更新方案,包括cordovar、react native、DCloud。其实jspatch被屏蔽是因为jspatch存在严重的安全漏洞,可以被黑客利用,导致三方黑客篡改其他app的数据。

  使用热更新时应注意:

  审计期间不要弹出热更新提示;热点内容使用https下载,避免被第三方网络劫持;不要更新违法内容,不要通过热更新损害应用市场的利益。比如iOS的虚拟支付就应该老老实实给苹果钱。

三、整包升级

  接口约定

  以下数据接口约定只是示例,开发人员可以自定义接口参数。

  申请地址:https://www.example.com/update

  方法:获取

  请求数据:

  {

   appid: plus.runtime.appid,

  版本:plus.runtime.version

  }响应数据:

  {

   Status:1,//升级标志,1:需要升级;0:不需要升级“在此插入代码片段”“注意:”来修复bug 1;\n修复bug2,//发行说明

  URL : http://www.example.com/uniapp.apk//update包下载地址

  }

3.1 客户端实现

   app启动时,向服务器上报当前版本号,服务器会判断是否提示升级。

  在App.vue的在线启动中,启动升级检测请求,如下所示:

  onLaunch: function () {

  //#ifdef APP-PLUS

  var server= https://www . example . com/update ;//检查更新的地址。

  Var req={//升级检测数据

   appid: plus.runtime.appid,

  版本:plus.runtime.version

  };

  uni.request({

  url:服务器,

  数据:请求,

  成功:(RES)=gt;{

  if (res.statusCode==200安培;ampres.data.status===1) {

  Uni.showModal({ //提醒用户更新

  标题:“更新提示”,

  内容:res.data.note,

  成功:(RES)=gt;{

  if (res.confirm) {

  plus . runtime . openurl(RES . data . URL);

  }

  }

  })

  }

  }

  })

  //#endif}注意:App的升级检测代码必须使用条件编译,否则会报错,因为微信环境中没有plus相关的API。

  

3.2 数据表实现

  需要维护一个数据表来维护APP版本信息。主要字段信息如下:

  名称数据类型数据描述appidvarcharmobile appidversionarchar应用市场版本号notesvarchar版本更新描述urlvarchar应用市场下载URL注意:根据Google和App Store的应用市场审核规范,应用升级只能通过提交应用市场更新进行更新,不能通过下载apk和IPA安装进行更新。

3.3 服务端实现

  根据客户端收到的版本号,与服务器的最新版本号进行比较,决定是否升级,如果是,则返回升级信息(rlease notes,更新包地址等。)

  开发者可以根据服务器端开发语言自行实现升级检测逻辑。下面是一个php示例代码:

  头( Content-type:text/JSON );$ appid=$ _ GET[ appid ];$ version=$ _ GET[ version ];//客户端版本号

  $ RSP=array( status =gt;0);//默认返回值,不需要升级

  if(isset($ appid)amp;ampisset($version)) {

  if($ appid=== _ _ uni _ _ 123456 ){//验证appid

  如果($版本!==1.0.1) {//下面是示例代码。在实际业务中,最新的版本号和relase notes可以存储在数据库或文件中。

  $ RSP[ status ]=1;

  $rsp[note]=修复bug 1;\n修复bug2;//发行说明

  $ RSP[ URL ]= http://www . example . com/uni app . apk ;//应用升级包下载地址

  }

  } } echo JSON _ encode($ RSP);退出;注意事项:

  Plus.runtime.appid,plus.runtime.version,plus.runtime.openURL()只在实机环境下有效。版本检测需要打包app,真机运行基础无法测试。因为真机运行的plus.runtime.version是一个固定值。根据Google App Market的审核规范,应用升级只能通过提交应用市场更新来完成,不能通过下载apk安装方式来完成。apk安装失败可能是因为缺少Android . permission . install _ packages和Android . permission . request _ install _ packages。注意:添加以上两种权限无法获得Google的批准。

四、Uni-app 版本升级中心

   uni-app提供了一套完整的版本维护框架,包括升级中心uni-upgrade-center-Admin和前端检测更新uni-upgrade-center-app。

  

4.1 升级中心 uni-upgrade-center - Admin

   uni-app提供应用升级中心uni-upgrade-center-Admin,是一个uni-admin插件,负责app版本更新业务。它包括后台管理界面和更新检查逻辑。你只需要调用App里的弹出提示。

  在上传安装包界面填写发布信息,其中包地址可以手动上传到云存储,地址会自动填写。

  您也可以手动填写地址(例如,https://appgallery.huawei.com/app/C10764638),这样您就不必上传文件。

  如果苹果版本发布,包地址就是应用在AppStore中的链接。

  升级中心具有以下功能点:

  云存储安装包CDN加速,使得安装包下载更快更稳定。App的应用管理、信息记录、应用版本管理。版本管理,可以发布新版本,也可以方便直观的查看、编辑、删除当前App版本历史和在线版本。发布信息管理,包括更新标题内容版本号、静默更新、强制更新、灵活的在线发布设置和修改。原生App安装包,发布Apk更新,用于App的整包更新。您可以设置是否强制更新。发布Wgt更新的wgt资源包,用于App的热更新,可以设置是强制更新还是静默更新。搜索应用管理列表和应用版本记录列表。只需导入插件,初始化数据库就可以拥有以上功能。您还可以随意修改逻辑自定义数据库字段和自定义UI样式。

4.2 前台检测更新 uni-upgrade-center-app

   uni-upgrade-center-app负责在前台查看升级更新。

  项目的结构如下图所示:

  下图显示了更新视图:

  该插件提供了以下功能:

  管理Android和iOS平台上App和App安装包、wgt资源包的发布和升级。基于Uni-upgrade-center的一键检查更新、统一包和wgt资源包更新。根据自传完成的验证,判断本次更新使用哪种方法。一键升级。逻辑如弹框、下载、安装、强制重启等。是一体的。下载完成。如果取消了自动缓存安装包的升级,下次进入时会判断是否符合安装条件。如果失败,将自动清除。美观、实用、可定制。注意:在手机底座上运行时获取的版本号appid分别是hbuilderhbuilder的版本,需要在文件中手动设置。

  

4.3 工作原理

   uni-upgrade-center-Admin,即升级中心,负责维护版本信息,并在数据库中维护。

  前台检测更新插件uni-upgrade-center-app负责通过调用云函数读取数据库维护的版本信息,提供一键检查更新。

  推荐:以上《uniapp教程》是uni-app跨平台应用开发在线资源升级的详细内容。更多信息请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: