当前位置: 首页 > Web前端 > HTML5

全网快应用稀缺开源项目——熊宝儿歌物语快应用

时间:2023-04-05 20:33:32 HTML5

熊宝儿歌物语快应用熊宝儿歌物语基于快应用技术开发,现已上线小程序版。网上关于快应用的资料非常少。我也是因公司需要而发展的。一路走来踩过无数坑,综合了友盟的统计。我完全遵循官方项目。今天我想分享一些我的经验,让大家可以避免。少走弯路,如有错误和意见,欢迎大家共同进步。在线开源地址https://github.com/lishuaixin...点赞!快应用开发文档中的以下接口均由产品公司自行提供,本人均从网上获取。获取和分享的行为可能涉嫌侵犯产品权益。如果我被告知停止分享和使用,我会及时删除这个页面和整个项目。请了解相关情况并遵守产品协议。为了方便大家的学习和测试,也为了保证原公司的利益,本项目使用easy-mock来模拟后台数据。项目介绍熊宝童谣故事基于快应用技术开发,分为音乐、视频、育儿信息流三大模块。音乐模块比较复杂,包含了一套完整的音乐播放逻辑,而且快应用的坑比较多,实现起来比较困难。大,其他模块以信息流的形式呈现,包括常见的上拉刷新和下拉加载逻辑。目录结构├──signrpk包签名模块│└──debug调试环境│├──certificate.pem证书文件│└──private.pem私钥文件├──src├──api请求接口│├───常用公共资源和组件文件│├──components组件文件│├──pages页面目录│|└──index.ux页面文件,页面名称可自定义│├──app.uxAPP文件,可导入公共脚本,暴露公共数据和方法等│└──manifest.json项目配置文件,配置应用程序图标,页面路由等└──package.json定义项目项目安装所需的各种模块和配置信息gitclonegit@github.com:lishuaixingNewBee/babySongQuickapp.gitnpminstall打开两个终端窗口,分别执行:npmrunwatchnpmrunserver如果开发者遇到报错Cannotfindmodule'.../node_modules/hap-tools/webpack.config.js',请执行hapupdate--force编译打包。特别说明:如需发布到应用市场,需签名为安卓应用。npmrunbuild编译项目目录在/build生成的应用路径在/dist/将releasesignature添加到.rpk1.创建私钥:通过openssl命令等工具生成签名文件private.pem和certificate.pem,例如如:opensslreq-newkeyrsa:2048-nodes-keyoutprivate.pem-x509-days3650-outccertificate.pem(密钥长度,如果1024不够安全,可以使用2048,但是成本会相应增加)在项目的sign目录下创建一个release目录,复制私钥文件private.pem和证书文件certificate.pemintoCountryName(2lettercode)[XX]:CN#CountryCode(China)StateorProvinceName(fullname)[]:BeiJing#Province(Beijing)LocalityName(eg,city)[默认城市]:BeiJing#市(北京)OrganizationName(eg,company)[DefaultCompanyLtd]:tact#CompanynameOrganizationalUnitName(eg,section)[]:#可以不填CommonName(eg,yournameoryourserver'shostname))[]:#EmailAddress[]:Val.china@foxmail.com#MailboxPleaseenterthefollowing'extra'attributestobesendwithyourcertificaterequestAchallengepassword[]:#CannotfillinAnoptionalcompanyname[]:#项目可以不填在sign目录下创建release目录,将私钥文件private.pem和证书文件crtificate.pem复制到release包中。发布包前需要添加release签名,然后在项目根目录运行npmrunrelease生成应用路径为/dist/.signed.rpk如果需要临时使用debug签名,可以使用npmrunrelease----debug注意:由于调试签名是公开的,所以安全性无法保证。不要使用调试签名对正式启动的应用程序进行签名。保存你的签名文件,开发中的常见问题,比如一些基础问题,组件传参我就不多说了,看文档就好了。我主要说说一些坑。关于style组件问题——快应用默认的flex布局,所以我们之前对float和position都没有很好的配合。-background-image不支持网络路径-不支持box-shadow属性(很多样式不支持),想实现就用backgroundimage实现-不支持webfont,据说可以稍后添加。-svg图片在华为应用平台存在兼容性问题。-华为应用平台存在动画兼容性问题,将在下个版本解决。-选项卡不能嵌套在选项卡中。如果您有这样的需求,请参考教程的第一部分。图层效果请使用stack-swiper不支持滑动方向改变。暂时使用解决```关于框架API-父子组件props传参,如果属性名定义为驼峰式,如:prop2Object,则对外传输数据时请使用-connection,如:prop2-object-slider组件只有滑动结束后有回调,没有进行中的回调,改变值也会触发change事件,不可能判断变化是人为滑动触发,还是改变数据触发——没有提供接口获取音频播放状态。-组件没有onDestroy钩子,不会被if触发。-NoselectionchangeTriggeredwhentheselectedtextchangesandthecursormoves(itissaidthat1030willbeadded).-是否有类似touchstart和touchend的事件(确定会加1030)。3.重新封装fetch接口importnativeFetchfrom'@system.fetch';importpromptfrom'@system.prompt';constBASE_URL=https://xxxxxx;classhttp{staticasyncrequest(method,Aurl,data){leturl=Aurl;conststrRegex='(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]';varreg=newRegExp(strRegex);if(!reg.test(url)){url=BASE_URL+url;}console.warn(`请请求地址:${url}`);constres=awaitthis.fetch(method,url,data)if(this.isSuccess(res)){returnJSON.parse(res.data);}else{console.warn('请求错误');抛出this.requestException(res);}}staticfetch(method,url,data){returnnewPromise((resolve,reject)=>{nativeFetch.fetch({method,url,data,success:resolve,fail:reject})})}staticisSuccess(res){constquickappCode=res.code;//快速应用请求错误if(quickappCode!==200){returnfalse;}constquickappData=JSON.parse(res.data)return!(quickappData&&quickappData.status!==0);}/异常/staticrequestException(res){consterror={};error.statusCode=res.code;constquickappData=res.data;if(quickappData){constserverData=JSON.parse(res.data)if(serverData){错误。serverCode=serverData.status;error.message=serverData.msg;error.serverData=serverData.data;}}returnerror;}staticget(url,data){returnthis.request('GET',url,data);}staticput(url,data){returnthis.request('PUT',url,data);}staticpost(url,data){returnthis.request('POST',url,data);}staticpatch(url,data){returnthis.request('PATCH',url,data);}staticdelete(url,data){returnthis.request('DELETE',url,data);}}//全局注册表//exportdefaultbaseconstinjectRef=Object.getPrototypeOf(global)||globalinjectRef.$http=http###○更新记录####2018.11.23-求小伙伴一起维项目