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分别是hbuilder和hbuilder的版本,需要在文件中手动设置。
4.3 工作原理
uni-upgrade-center-Admin,即升级中心,负责维护版本信息,并在数据库中维护。
前台检测更新插件uni-upgrade-center-app负责通过调用云函数读取数据库维护的版本信息,提供一键检查更新。
推荐:以上《uniapp教程》是uni-app跨平台应用开发在线资源升级的详细内容。更多信息请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。