关于移动应用开发:YonBuilder移动开发平台-AVM框架-封装身份证号码虚拟输入键盘组件

AVM(Application-View-Model)前端组件化开发模式基于规范Web Components组件化思维,提供蕴含虚构DOM和Runtime的编程框架avm.js以及多端对立编译工具,齐全兼容Web Components规范,同时兼容Vue和React语法糖编写代码,编译工具将Vue和React相干语法糖编译转换为avm.js代码。 基于规范 Web Components 组件化思维,兼容 Vue / React 语法个性,通过一次编码,别离编译为 App、小程序代码,实现多端开发。 组件性能介绍身份证号码虚构输出键盘,可用以身份证号码输出时应用,可对输出的身份证号码进行验证,反对15位和18位。 示例展现 组件开发 组件文件id-card-keyboard.stml <template> <view class="id-card-keyboard_container"> <view class="id-card-keyboard_box"> <view class="id-card-keyboard_box-header"> <text class="id-card-keyboard_box-header-label">{idCard}</text> <text class="id-card-keyboard_box-header-button" @click="finish">实现</text> </view> <safe-area> <view class="id-card-keyboard_box-item-container"> <view class="id-card-keyboard_box-item" v-for="item in numbers"> <view class="id-card-keyboard_box-item-label" v-if="item.type=='number'" data-key={item.key} @click="getNumber"> <text style="font-size:28px;">{item.key}</text> </view> <view class="id-card-keyboard_box-item-label" v-else-if="item.type=='ico'" @click="delNumber"> <image class="id-card-keyboard_box-item-ico" src={item.key} mode="widthFix"></image> </view> </view> </view> </safe-area> </view> </view></template><script> import checkIdcard from './id-card-check.js' export default { name: 'id-card-keyboard', data() { return{ numbers:[{type:'number',key:'1'},{type:'number',key:'2'},{type:'number',key:'3'},{type:'number',key:'4'},{type:'number',key:'5'},{type:'number',key:'6'},{type:'number',key:'7'} ,{type:'number',key:'8'},{type:'number',key:'9'},{type:'number',key:'X'},{type:'number',key:'0'},{type:'ico',key:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAtCAYAAAA5reyyAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAC4jAAAuIwF4pT92AAAC/UlEQVRo3u2aO2gUURSGv1k1PlFXUHwUQZEYlUACPiM2KbQSKxEkBEtbHyDxAWqjoK2gqIjYWJpC0gQLQUWjoBJUtBOMiWJMwJiYiGtxdtlzx1lndr07w4X7wcBm59xzcv655752wOPxeDwej8dJggxjtwGHgHagsQ7+fwHvgJvA1QzzrAv7gUKK12NgQdZJ22J3yuKVruf1SCbtEu4Cbqm/nyEl9hKYBGZYivMbyCMP66j6/gxwNuWcrXEMs0fcSynuKRXzY9Yi1EoHpnivUoydRyaUAvApayFqYQtSUiXxPgPLUoyfA0aKsYeyFqNaOjHFewisSNCuHRm7ZiaM0wQcB1ZH3JsNfMXBHniAv5cSSQgo95gBYH6M/XJggso9bI7y54yAzZjijZB8xg+AMZKNlw3Aa2U7HGHjnIAbgO8qqTFgY5U+9mI+gNsRNguBF5jirYuwc0rAFsozXqkEV9boaxvmg3iAjGcArcCguvcIWFLBj1MCvlVJvQHm/qe/9cC48nkf2E55zCsAH2J8OCPgVsyyW2PJbwuVt2fjwNqY9s4IeBpzuWKTDmSM0+L1A6sStK2rgDmLvvLq86Dl/7MfGVs1ozi8NYuik3Lv+GbR7yxErKgSfkL8AYQzJbwolNxFCz4D4KnyOQQcDsXpjfHhjIAAR7AnYiNSuiVf75FZGWSXM63u3fiHH6cEBBFNi3i3Bh9NmLuRAWBeyKYNmMKcuKLK2TkBAS5hininyvYDqu0UsuuIohX4qWz7ImycFBDkwFSL2F1F21KbaWBzjG34rDGMswICXA4ldyVhuz2I4M0J7XcBJ4GdEfecFhDgPKaIPSnHD4AvOHqgWiI8Jl5LMXYD8oOV0wKCrNe0iCdSitulYjpZwppwOfcCO5BeEiDLEBtXDlgMHMRc6ly3nVAWr3acQw4eNMPFRG3tzQuIgPpthB/I4cNoBjlb5wLpvpUwAWyqRyK23gSolj7kxGYpUgUB0gNtXpPFGD3APuS3E4/H4/F4PB6Pxwp/AGH7f53PGS6/AAAAAElFTkSuQmCC'}], numberIndex:0, resultNumber:[], idCard:'' } }, methods: { getNumber(e){ // console.log(JSON.stringify(e)); if(this.data.numberIndex<18){ this.data.resultNumber[this.data.numberIndex] = e.currentTarget.dataset.key;//兼容IOS和安卓 this.data.numberIndex += 1; this.data.idCard = this.data.resultNumber.join(''); } }, delNumber(e){ this.data.numberIndex -= 1; if(this.data.numberIndex>=0){ this.data.resultNumber.splice(this.data.numberIndex,1); this.data.idCard = this.data.resultNumber.join(''); } }, finish(){ if(!checkIdcard(this.data.idCard)){ api.confirm({ title: '提醒', msg: '您输出的身份证号码不合乎规定,是否持续应用?', buttons: ['确定', '勾销'] }, (ret, err)=> { var index = ret.buttonIndex; if(index==1){ this.fire('setNumber',this.data.idCard); } }); } else{ this.fire('setNumber',this.data.idCard); } } } }</script><style> .id-card-keyboard_container { position: absolute; height: 100%; width: 100%; background-color: rgba(0,0,0,0); } .id-card-keyboard_box{ align-items: center; position: absolute; bottom: 0; width: 100%; background-color: #f0f0f0; border-top-left-radius: 30px; border-top-right-radius: 30px; } .id-card-keyboard_box-item-container{ flex-flow: row wrap; justify-content: space-around; align-items: center; padding: 10px; box-sizing: border-box; } .id-card-keyboard_box-item{ flex-basis: 33%; box-sizing: border-box; padding: 5px; } .id-card-keyboard_box-item-label{ display: flex; background-color: #ffffff; padding: 5px; border-radius: 5px; width: 100%; height: 48px; align-items: center; justify-content: center; box-sizing: border-box; } .id-card-keyboard_box-item-ico{ width: 60px; } .id-card-keyboard_box-header{ width: 100%; flex-flow: row nowrap; justify-content: space-between; align-items: center; padding: 10px 15px 0 15px; } .id-card-keyboard_box-header-label{ font-size: 18px; } .id-card-keyboard_box-header-button{ font-size: 18px; color: #327432; }</style>组件应用阐明 ...

December 27, 2022 · 2 min · jiezi

关于移动应用开发:YonBuilder移动开发平台-AVM框架-封装省市区级联选择弹框

AVM(Application-View-Model)前端组件化开发模式基于规范Web Components组件化思维,提供蕴含虚构DOM和Runtime的编程框架avm.js以及多端对立编译工具,齐全兼容Web Components规范,同时兼容Vue和React语法糖编写代码,编译工具将Vue和React相干语法糖编译转换为avm.js代码。 基于规范 Web Components 组件化思维,兼容 Vue / React 语法个性,通过一次编码,别离编译为 App、小程序代码,实现多端开发。 组件性能介绍省市区级联抉择框,也可用于其余多层级数据的抉择,典型场景为省市区抉择。 目前场景设定的是3级,可依据本人的理论需要改成2级或者4级或者更多级。 数据源就是典型的树形构造的JSON数组数据。理论代码中我封装了一个对于省市区三级数据的js插件,具体应用办法省市区三级行政区划数据JS插件 示例展现 组件开发-组件文件area-cascader.stml <template> <view class="area-cascader_container"> <view class="area-cascader_box"> <view class="area-cascader_box-header"> <text class="area-cascader_box-header-label">请抉择所在地区</text> <text class="area-cascader_box-header-button" @click="closeCascader">×</text> </view> <view class="area-cascader_box-nav"> <view class="area-cascader_box-nav-item" v-for="(item,index) in result" data-index={index} @click="setSelect"> <text class='area-cascader_box-nav-item--selected' v-if="this.data.selectIndex==index && item.value">{item.text}</text> <text class='area-cascader_box-nav-item--unselected' v-else-if="this.data.selectIndex==index && !item.value">请抉择</text> <text class='area-cascader_box-nav-item--result' v-else-if="this.data.selectIndex!=index && item.value">{{item.text}}</text> </view> </view> <scroll-view class="area-cascader_pane" scroll-y=""> <view class="area-cascader_pane-option" v-for="(item,index) in selectArea" data-value={item.value} data-text={item.text} @click="setSelectItem"> <text>{item.text}</text> </view> </scroll-view> </view> </view></template><script> export default { name: 'area-cascader', props:{ options:Array }, install(){ this.data.result[0]={value:null,text:''}; }, installed(){ this.data.selectArea = this.props.options; }, data() { return{ result:[], selectIndex:0, selectArea:[] } }, methods: { setSelectItem(e){ if(this.data.selectIndex<3){ this.data.result[this.data.selectIndex].value=e.currentTarget.dataset.value; this.data.result[this.data.selectIndex].text=e.currentTarget.dataset.text; //追加下一级 this.data.selectIndex+=1; if(this.data.selectIndex<3){ this.data.result[this.data.selectIndex]={value:null,text:''}; var parentOption=this.data.selectArea.filter(item=>item.value==e.currentTarget.dataset.value); this.data.selectArea = parentOption[0].children; } if(this.data.selectIndex==3){ this.fire('finish',this.data.result); } } }, closeCascader(){ this.fire('close',''); }, setSelect(e){ this.data.selectIndex=e.currentTarget.dataset.index; if(this.data.selectIndex==0){ this.data.selectArea = this.props.options; } else if(this.data.selectIndex==1){ var parentOption=this.props.options.filter(item=>item.value==this.data.result[0].value); this.data.selectArea = parentOption[0].children; } } } }</script><style> .area-cascader_container { position: absolute; height: 100%; width: 100%; background-color: rgba(0,0,0,0.1); } .area-cascader_box{ align-items: center; position: absolute; bottom: 0; width: 100%; height: 70%; background-color: #ffffff; border-top-left-radius: 30px; border-top-right-radius: 30px; } .area-cascader_box-header{ width: 100%; flex-flow: row nowrap; justify-content: space-between; align-items: center; padding: 10px 15px 0 15px; } .area-cascader_box-header-label{ font-size: 18px; } .area-cascader_box-header-button{ font-size: 40px; color: #ccc; } .area-cascader_box-nav{ width: 100%; flex-flow: row nowrap; justify-content: flex-start; align-items: center; padding: 15px; } .area-cascader_box-nav-item{ box-sizing: border-box; align-items: center; /* background-color: #452334; */ margin-right: 20px; justify-content: center; } .area-cascader_box-nav-item--selected{ font-size: 16px; padding-bottom: 10px; border-bottom: 3px solid #49c916; } .area-cascader_box-nav-item--unselected{ font-size: 16px; padding-bottom: 10px; border-bottom: 3px solid #49c916; } .area-cascader_box-nav-item--result{ font-size: 16px; padding-bottom: 13px; border-bottom: 0; } .area-cascader_pane{ padding-left: 15px; padding-right: 10px; width: 100%; height: 80%; } .area-cascader_pane-option{ flex-flow: row nowrap; align-items: flex-start; justify-content: space-between; padding: 5px 0; }</style>组件应用阐明本组件是基于AVM.js开发的多端组件,通常同时适配Android、iOS、小程序、H5 , 具体反对状况还要看每个组件的阐明文档。 ...

December 19, 2022 · 2 min · jiezi

关于移动应用开发:Unity实现无缝大世界地形

大世界最重要的毫无疑问是地形了,地形也是一项比拟古老,且始终在迭代更新的图形学技术。地形零碎主体技术要点,个别围绕着LOD来开展。最近一些年,随着DrawInstance和GPU Pipeline的风行,地形零碎又在这两个方向做了进一步倒退,这俩技术十分符合地形零碎,几乎就是为地形而生。 Unity的整套地形零碎(包含植被),在有DrawInstance性能前,简直不能在挪动上应用,大家个别采纳转成Mesh的形式在游戏中应用。转成Mesh始终不是短暂之策,施展不了地形极致LOD的劣势。要想做大世界,本人写一套高效的地形零碎是必不可少的。 大略思路仍然是正当的材质和模型LOD,联合DrawInstance,在性能和成果之间进行均衡。我这里提供一个在挪动平台验证过的可行解决方案,能够参考,也可齐全依照这个计划来,至多在几万到几十万的量级不会出问题。 通过模型,能够分两局部,GPU地形和近景四叉树,以下图每个格子是512的大地图为例,灰色局部为近景四叉树,蓝色局部为GPU地形。 GPU地形这里先次要讲一下配置和注意事项。 GPU地形整体大小是2048x2048,更新粒度是512,也能够是256,但若是256,资源文件可能就太多,Unity在资源文件爆炸后,Import的速度会变得很慢。理论测下来,512的粒度没有显著问题。LOD分5级就足够了,因为咱们整体大小才2048,LOD0的Mesh对应密度比例是1:1,LOD4曾经是16x16了。 跟模型无关的数据倡议用保留成二进制文件,因为如果保留成Unity文件,如Asset或者贴图,须要把这些资源放到Asset目录下,而二进制的数据文件是能够放到目录外的,打包的时候进入Bundle就ok,在Editor模式下,能够间接通过文件拜访,所有为了节俭Import耗时。二进制还有益处是,能够整合各种数据,如每个块各个LOD等级的一些配置信息(坐标,高度差等)、挖洞信息等。一个2Wx2W的大世界数据能管制在500MB左右。 在理论应用过程中,如果用Hiz来剔除会有一帧提早,不太适宜做地形的剔除,所以最好还是采纳PVS,并且地形的排布比拟参差,比拟好做PVS,人造省去了PVS里字典映射的局部。 这里说一句,DXR用来烘焙PVS是个不错的框架,很适宜做一些离线自动化工具。 接着来着重说一下,PVS的数据组织和加载应用。 家喻户晓GPU地形只显示2048x2048的地形,那么全量的PVS数据是多少呢?LOD0是一个4x4的Mesh,显示的理论空间是4x4,那么LOD0的内存数据就是(2048/4)x(2048/4)/1024 = 256KB,所有LOD加起来不超过512KB。数据结构能够间接用一维数组来示意,因为是个全量平均排布,那么Offset = (Pow(4,level) - 1)/3,这里level=0示意最低的即2048x2048,这里须要有个换算,还有就是可能低等级没有到0,只有再减去无用Index就能够失去正确后果。其实从一个地块的数据量,就能大略推算出整个大世界地形的PVS数据有多少,理论还能进行压缩,这些对于包体的大小是齐全能承受的。 为了省去索引懊恼须要将硬盘数据全量寄存,这是一棵残缺的树,然而这里的内存还能压缩,因为LOD0是最多的,而离中心点较远的地位其实是不须要的,能够在LOD0只加载64米以内的数据,LOD1则是124米,以此类推。这样能把数据压缩到十分小。就索引来说,须要做进一步换算,拿个纸笔应该能很快推算出来。 GPU地形能够再拆分两种材质:绿色为RVT材质,黄色为中景离线烘焙贴图材质 远景RVT材质在这里因为应用GPU地形的原由,粒度会降落到4x4,这样咱们能够把尺寸缩到512,RVT在把尺寸缩到512后,即便VT的size管制到2048,也能达到一个比拟清晰的画面,不仅能节约很大的内存,而且地表的精密度也能失去很大的晋升。 中景离线烘焙贴图材质咱们为每一块512地形,生成混合实现的Albedo和Normal,这里有三点须要留神。 1.烘焙的时候留神把投射RVT的模型也渲染到下面,比方路面、贴花这些,间接烘焙到中景贴图上。 2.Normal间接取地形的顶点法线即可,无需把Layer上Tangent转到世界空间。相隔太远、太碎的Normal反而会造成噪点,起副作用,咱们只保留顶点法线的后果就ok。 3.烘焙时,地形的Layer能够适当放大,远处的纹理能够通过放大Tile,让纹理的细节显现出来,具体放多大,取决于RVT远处纹理的缩放比。 在材质筹备好后,因为是512位单位的,咱们须要显示2048x2048(两头扣掉一块512为RVT材质),咱们在运行时,能够采纳TextureArray或者动静合并VT的形式。以合并VT的形式为例,咱们能够疏忽两头RVT那个块,间接生成2048x2048的残缺贴图,间接平铺下来就OK,要解决的是,咱们该当尽可能复用之前的数据。如: 咱们只需把右下一圈,填到左上即可。如下图,将蓝色区域填在灰色区域,而后存一个偏移即可。 这种解决办法在整个大世界的资源加载十分常见,肯定要有这个意识。 因为整个GPU地形应用两种材质,那么在GPU地形生成Mesh的IndirectDraw就要离开生成,分两个DrawCall提交。 近景四叉树模型2048以外的中央,其实也能够用GPU地形,只是资源的模式要分两级,2048以外的数据粒度更大一点,保障IO敌对,甚至能够做四叉树的IO,不把各个等级的数据放在一起,从技术上讲是能齐全可行的,关键问题在于,进去的模型品质很差,因为须要把LOD等级提到很高,根本至多要128x128来示意一个数据,疏密调节的灵便度在这里远远不如模型。 在确定生成近景模型后,最现实的状况是,全地图生成一个动态模型间接渲染,一个2Wx2W的大地图,做完极致优化,1~2W面就能达到预期成果。这里倡议用Houdini主动生成,能够把山脊那局部的面加多,海拔低的盆地和平原面数能够砍得狠一点。然而咱们面临了几个问题。第一,咱们要能灵便抠掉两头2048x2048的空隙,粒度是512。第二,近景模型跟GPU地形之间存在接缝问题。 第一个问题,难的不是抠出两头局部(VS输入SV_Position为无穷大或者堕落顶点到边上),难的是2048的矩形边,要求抠出来是一个四四方方的,那么就须要在每个512上都要卡一条直线,卡线会使模型顶点数间接翻倍。 第二个问题,能够把模型往降落降,依据视角个性,能解决大部分问题,然而恰好地形接缝问题太过突兀(漏出天空盒,有人思考把天空盒的底面用地形色彩图,仍然没法解决所有问题),必须得保障100%没问题。那么经典的解决接缝问题就是堕落边和加裙子,因为GPU地形和近景地形不在一个零碎,不好堕落边,只剩加裙子了,加裙子又须要很多顶点。 为了解决这两个问题,最简略的一个方法是,切成每个512x512的地块,且生成裙边,而后管制地块的显隐,再通过Static Batch渲染。这里引申出了两个新问题,一个是面数过多,切块加裙边,面数根本翻3倍以上,另一个是尽管是Static Batch,然而理论DrawCall数偏高。理论裙边仅仅在2048的那个矩形须要,其余中央造成很大的节约,能缓解第一个问题,然而还是因为切边导致面数翻番。 咱们引出一种新的解决办法,四叉树生成各个等级LOD的模型,而后显示矩形,如图所示: 这样的益处在于:极大缩小了因为切割增加的面,DrawCall相比全量LOD0少得多。 一些想法还是想通过堕落横跨两头矩形三角形,把矩形内的点推到矩形上,而后对于矩形内剩下的三角形,在VS的输入,设置SV_Position的xy为无穷大来挖空两头的局部,仿佛是一种比拟完满的解决方案。因为四叉树的近景显示,性能没太大问题,临时没尝试这种方法,前面如果有机会,能够试试这种方法。 近景的材质,间接应用一张Diffuse贴图就能够,然而这张贴图,不要应用工具主动生成,因为就这一张贴图,值得花一些工夫在PS里精雕,特地是能够在游戏场景中对着来画,一边画,一边对照游戏中的成果,在山脊的中央,勾画出山体的线条,把法线、AO这些都间接画到Diffuse上,会起到意想不到的成果。 封面图来源于网络 这是侑虎科技第1259篇文章,感激作者狗哥老司机供稿。欢送转发分享,未经作者受权请勿转载。如果您有任何独到的见解或者发现也欢送分割咱们,一起探讨。(QQ群:793972859) 作者主页:https://www.zhihu.com/people/... 再次感激狗哥老司机的分享,如果您有任何独到的见解或者发现也欢送分割咱们,一起探讨。(QQ群:793972859)

December 16, 2022 · 1 min · jiezi

关于移动应用开发:悬浮窗开发设计实践

目录介绍01.整体概述 1.1 我的项目背景1.2 遇到问题1.3 根底概念1.4 设计指标1.5 收益剖析02.Window概念 2.1 Window增加View2.2 Window的概念2.3 LayoutParams2.4 WMS流程梳理03.悬浮窗技术要点 3.1 业务思考点剖析3.2 关键技术要点3.3 利用悬浮窗3.4 增加浮窗源码流程3.5 了解WMS原理3.6 拖拽回弹吸附04.开发重要步骤 4.1 悬浮窗实现流程4.2 申请悬浮窗权限4.3 初始化悬浮窗4.4 设置悬浮窗参数4.5 增加View到悬浮窗4.6 悬浮窗拖拽实现4.8 悬浮窗权限适配4.9 LayoutParam坑05.计划根底设计 5.1 整体架构图5.2 UML设计图5.3 要害流程图5.4 接口设计图5.5 模块间依赖关系06.其余设计说明 6.1 性能设计6.2 稳定性设计6.3 异样设计6.4 事件上报设计07.遇到的问题和坑 7.1 解决输入法层级关系7.2 边界逻辑敞开悬浮窗7.3 点击屡次关上页面7.4 Home键遇到的问题01.整体概述1.1 我的项目背景业务场景剖析 以视频通话为例,在视频通话时,咱们关上其余利用或点击Home键退出时或点击缩放图标,悬浮窗会显示在其余利用之上,给人的假象是通话页面变小了,点击悬浮窗回到通过页面,悬浮窗隐没。退出通话页面悬浮窗隐没。市面上常见的悬浮窗,如微信视频通话性能,有如下特点: 整屏页面能切换到一个小的悬浮窗;悬浮窗能运行在其余app上方;悬浮窗能跳回整屏页面,并且悬浮窗隐没需要悬浮窗成果 点击放大按钮,将以后远端视屏加载进悬浮窗,且悬浮窗可拖拽,不影响其余界面焦点;点击悬浮窗可返回原来的Activity1.2 遇到问题什么是悬浮窗 全局悬浮窗在许多利用中都能见到,点击Home键,小窗口依然会在屏幕上显示。留神:悬浮窗留神申请权限!那么开发全局悬浮窗属于那一类呢? 属于零碎窗口,相当于跟Toast是一个级别的。针对悬浮窗的展现和移除,则能够模拟Toast中addView和removeView操作……视频通话Activity如何最小化 Activity自身自带了一个moveTaskToBack(boolean nonRoot),咱们要实现最小化只须要调用moveTaskToBack(true)传入一个true值就能够了,然而这里有一个前提,就是须要设置Activity的启动模式为singleInstance模式,两步搞定。注:activity最小化后从新从后盾回到前台会回调onRestart()办法。点击悬浮窗开启activity会回调onNewIntent(留神能够setIntent(intent)一下)1.3 根底概念Window 有三种类型,别离是利用 Window、子 Window 和零碎 Window。 利用Window:z-index在1~99之间,它往往对应着一个Activity。子Window:z-index在1000~1999之间,它往往不能独立存在,须要附丽在父Window上,例如Dialog等。零碎Window:z-index在2000~2999之间,它往往须要申明权限能力创立,例如Toast、状态栏、零碎音量条、谬误提示框都是零碎Window。这些层级范畴对应着 WindowManager.LayoutParams 的 type 参数 如果想要 Window 位于所有 Window 的最顶层,那么采纳较大的层级即可,很显然零碎 Window 的层级是最大的。Android显示零碎分为3层 ...

November 18, 2022 · 2 min · jiezi

关于移动应用开发:已开源就等你来优酷动态模板研发体系为分发提效30

概述优酷是一个多屏、多端,以内容散发及内容生产为主体的娱乐生态综合体。 在内容散发场景,存在大量的客户端开发需要,包含视觉降级、各场景的业务需要迭代、大小屏设施需要同步等,为了升高研发在跨端场景中组件反复开发的技术老本,优酷技术团队于2019年底开始摸索跨端动态化研发提效解决方案,通过2年多工夫的致力,目前跨端动态化能力曾经在优酷各业务场景落地,帮忙研发团队在散发业务上实现提效30%左右。动静模板技术体系以跨端动态化SDK为核心,通过在设计阶段、研发阶段、联调阶段升高对接、开发、调试等外围工作的技术老本,从而真正实现研发提效。目前整个技术计划包含画眉跨平台动效解决方案、智能化设计平台GaiaSketch、跨端模板动态化计划GaiaX、动静模板可视化少代码搭建平台GaiaStudio、辅助调试工具疾速预览FastPreview。动静模板技术计划将客户端研发链路实现了串联,通过齐备的工具化支撑体系,让开发者能够高效实现组件由原始设计稿到可运行代码的最短通路,本文将对研发体系中波及到的外围模块就行介绍,心愿对技术社区及宽广开发者有肯定帮忙。 智能化设计平台 - GaiaSketchSketch作为一款优良的设计软件,目前曾经是绝大多数互联网企业设计部门的次要设计工具。与Photoshop相比,Sketch对矢量元素具备更强的解决能力,并且其自身提供了丰盛的二次开发接口,具备很强的开放性。针对标注导出及组件还原两局部日常工作量占比拟高的工作,优酷技术团队基于Sketch插件架构体系,研发了自动化标注构建导出、组件代码主动生成以及规范素材库建库等能力。对于设计师来说能够通过插件建设起规范库(包含:组件库、款式库、图标库、页面库),也能够通过插件导出更为简略易用的【标注文件】;对于开发来说,能够通过插件能将Sketch设计稿中的图层导出为代码(GaiaX、React、Rax、Vue、小程序等)。 规范素材库每个组件库由一个或者多个 Symbol 形成,每个 Symbol 依照肯定的格局命名后,插件就能读取并可视化展现在插件中,并可将可视化后的组件间接拖拽到 Sketch 设计稿中且与原库放弃关联。每个 Symbol 的名称遵循着规范的格局命名,名称以 / 连贯,比方 Foundation/Bar/TabBar ,导入到插件后,可视化展现的成果如上图所示。 标注导出将Sketch源文件中的画板导出为标注文件供开发应用,导出的【标注文件】具备更好的兼容性、更易用的界面。 标注导出的产物次要蕴含两个局部,一部分是标注模板文件,另一部分包含设计稿相干数据信息,比方画板截图,图层数据、切图等。 代码导出将Sketch设计稿中选中的图层导出为选定的语言类型的代码,比方GaiaX模板、React、Rax、Vue、小程序等,导出的代码布局形式基于盒子模型布局(Flexbox)和相对布局(Absolute);对于节点的层级,【导出代码】会在导出的过程中进行一直的优化,使层级尽可能的少且正当 开源我的项目GaiaSketch开源我的项目地址:https://github.com/alibaba/Ga...。 动静模板引擎 - GaiaXGaiaX是动静模板引擎我的项目在优酷外部的代号,它是解决跨端组件开发提效计划的关键技术。在项目前期的需要分析阶段,团队从优酷的理论场景和各团队开发中的切实诉求登程,将问题空间定位在组件这个层级,不仅很好的躲避了如Weex、ReactNative等技术计划的复杂度和工程量,其次也在基本上让技术计划脱离JS Bridge的老路,保障了端侧的落地性能保障。 架构设计依照分层设计理念共分为4层。根底依赖层保持最小依赖准则,要重点阐明的是,为了保障模板布局计算的高性能,咱们引入了由RUST编写的StretchKit高性能布局计算引擎[https://github.com/vislyhq/st...],其具备跨端、较小的包体积(170K)、计算性能卓越等特点;外围渲染层形成模板引擎的渲染内核,解决模板文件解析、虚构节点树构建、布局计算、表达式构建解析等外围逻辑;模板核心及模板服务层则面向业务,与优酷业务架构进行联合实现对现有能力的复用,防止反复造轮子,并向下层业务提供标准化模板渲染及接入服务。 总线设计对于动静模板引擎来说,输出结构化的模板文件,通过文件IO、数据解析、虚构节点树构建、布局计算、表达式运算、渲染树构建到实在视图树组成了残缺的总线链路。 性能体现因为动静模板DSL具备严格的标准化和规范化,因而在设计研发交付一体化链路上,GaiaSketch的组件代码导出可间接生成GaiaX动静模板DSL代码,这样,开发工程师能够缩小模板框架的从0到1的搭建工作,通过简略的编辑优化,便可实现一个模板文件的构建。 开源我的项目优酷动静模板引擎开源我的项目地址:https://github.com/alibaba/GaiaX 动静模板低代码IDE - GaiaStudio动静模板引擎能够解决跨端组件渲染的一致性,通过一套对立的DSL对组件布局、款式、数据进行形容,从而实现多端开发的提效。但对于客户端开发来说,类前端的DSL自身存在肯定的学习老本,另外,如何编写更加正当、简洁的模板代码,对模板在终端最终的渲染及性能体现都会产生间接的影响。为了解决上述问题,优酷技术团队在动静模板引擎上线后,着手构建了GaiaStudio动静模板低代码IDE。开发者通过该IDE,能够对模板进行可视化搭建,引擎反对的所有布局及款式属性,都在IDE中进行了内置,开发者只需进行抉择,便可用户界面中即可失去渲染反馈。 技术计划思考到开发便捷性和后续的跨平台,咱们选用了Electron作为底层跨平台计划,用Sematic UI作为CSS组件库,保障在没有设计的状况下,也可能写出比拟好看的用户界面。与网页前端比照,Electron有更好的性能、并且可更便捷的实现有手机端的互联互通。 性能简介 ● 模板创立模板是GaiaX技术体系的外围介质,也是跨端动静渲染的关键点。 模板的构建品质决定了端侧渲染的性能和还原成果。GaiaStudio提供了十分全面的模板治理能力,反对从0-1间接构建一个新的模板,也可通过GaiaSketch导出模板代码的形式,导入到GaiaStduio简化编辑老本。 ● 模板编辑模板编辑是模板构建过程中工作量最大的,为了升高开发者的技术老本及对FlexBox的学习曲线,GaiaStudio提供了可视化、参数化的产品性能,即便操作者对FlexBox、CSS理解甚少,也能够疾速上手实现一个模板的编辑工作。对于一个模板,一般来说咱们要进行一组残缺的编辑解决,能力实现整个构建工作,包含:根底属性、布局、款式、动画、数据绑定。 ● 模板调试GaiaStudio的模板调试性能次要有两个性能形成,即模板代码动态剖析及模板真机预览(FastPreview)。1) 模板代码动态剖析能够帮忙开发者查看模板代码的语法及合理性,针对如模板命名是否非法、布局设置则、模板嵌套层级等问题实时反馈给开发者,帮忙开发者更正当的实现模板搭建。 2) 模板预览FastPreview,GaiaStudio提供了亚秒级的模板真机预览能力,让开发者能够实时在真机端查看本人搭建的模板的正确性和还原成果,让Native开发也能够具备相似H5、小程序的开发体验。 下载地址GaiaStudio目前对社区提供通用版本安装包,源码临时未开源,具体的下载地址在GaiaX开源我的项目中可获取:https://github.com/alibaba/GaiaX。 跨平台动效解决方案 - 画眉在客户端开发的日常工作中,存在着大量动效场景需要,如 ToastView 显示与隐没、Dialog弹出、按钮的显隐等。当动效设计需要交付给研发后,往往要达到最终的成果,须要通过多轮的走查和调优,归纳起来造成这种后果的起因次要有:1)同一动画,不同的开发人员实现的成果有差异 2)同一动画,iOS 端和 Android 端实现的成果有差异 3)对于曲线动效,设计师无奈提供精确参数,实现成果随机性强 4)局部开发人员对系统自带曲线函数不相熟,会导致降级利用线性或加速曲线,影响动态效果。为了彻底解决端侧动画实现的研发效率及成果保障,技术团队与设计核心独特推出了跨平台动效解决方案-画眉(Motion-curve)。在GaiaX动静模板引擎中,曲线动效的实现也依赖画眉提供根底服务。 架构设计 技术计划● iOS端技术计划SDK 接口层采纳 Category 计划,通过 AOP 思维来简化调用复杂度。CALayer + MotionCurveX 为 CALayer 的所有可动画属性,依照动效曲线能力提供反对,且在动画实现后,无需再次设置目标值。画眉SDK将罕用的 7 种动效曲线,进行底层算法实现,使用者只需指定曲线枚举,即可实现标准化的动效。● Android端技术计划为了升高Java调用C的性能损耗,Android端采纳差值器Interpolator来实现曲线动效。 ...

April 24, 2022 · 1 min · jiezi

关于移动应用开发:Lazada-D11-体验升级技术实践

作者:余浩斐(浩斐) 领有 6.8 亿人口的东南亚市场正在经验爆发式增长,作为东南亚当先的电商平台和阿里巴巴全球化策略的重要增长引擎,Lazada 已成长为当地当先和增长疾速的旗舰电子商务平台,推动了东南亚数字经济基础设施的提高,目前Lazada业务在东南亚印尼、菲律宾、泰国、马来西亚、新加坡和越南等六国经营,员工来自全世界50个不同的国家和地区,实现了各国业务的同步推动,在买家和商家数量上持续放弃了强劲的持续增长态势。 数据显示 D11 当天有超过800,000品牌和商家参加,Lazada越南首小时同比去年销售额翻番,Lazada新加坡首小时销售额较素日增长10倍!这些增量数字的背地,离不开Lazada各个团队、商家、品牌和用户的共同努力,其中无线技术团队保持数据驱动、技术赋能,高效稳固的撑持D11期间的多方购物场景,同时在启动耗时、会场渲染、包体积和主链路体验方面都有显著的提高。 去年咱们曾经进行了大量布局优化等根本技术策略,在2021年咱们将优化场景在一步下沉到更加细化的畛域,联合“页面合并和工作重编”对利用启动进行了大幅优化,发展了针对低端机所进行的“全链路路由动静预申请”,为了进一步加强数据复用性也发展了“购物车增量更新”和“下单页首屏预判”......链接针对Lazada 启动、首页、PDP、Cart、Checkout等根底链路外围场景所进行的多方面体验优化,造成了链路级别的用户体验再降级,质变的过程也势必将引发量变的后果,最终晋升整体的业务转化效率. 启动工作编排&懒加载利用启动作为用户进入首页的第一必经环节,启动性能带给用户的体感很大水平决定了用户接下来是否抉择持续留存,因而对App的启动优化咱们始终是继续精进,同时随着业务的一直简单以及可优化空间的逐步压缩,优化遇到的挑战也是十分大,也经验了一直的摸索。 利用启动阶段大大小小有几十个工作,这些工作须要主线程进行调度并行,同时主线程本身也须要执行一些必须执行的工作,工作之间还有逻辑上的依赖和锁依赖,因而咱们将工作分成若干个组,组内并行能够达到最大并发成果,组间串行解决依赖问题,组和组之间由主线程进行同步调度,在工作并发和依赖之间达到均衡的调度框架。 启动工作优化的主旨就是要让组内工作并行更快,缩小主线程的占用,让主线程可能更快地调度下一组, 因而每一组的启动时长由组内的最长耗时工作决定,通过对工作进行编排,让有逻辑依赖和锁依赖的工作尽量不分在雷同的组,基于这个准则咱们通过systrace等工具对短板工作和锁进行了进一步的梳理并进行了针对性优化: 对耗时过长工作进一步进行拆分,缩短工作在单组中的耗时;尽量在放弃依赖关系的前提下对下列应用loadLibrary锁的工作进行扩散编排,最大水平缩小锁竞争;对耗时工作进行优化,对不必要在系统启动阶段应用的工作在可交互后初始化。 通过以上的优化策略,本期优化启动工夫绝对去年双11有较大幅度的改善,随着优化的进一步停顿,后续的启动优化,须要有更多的千里之行;始于足下的信心和急躁,一直地引入新的工具、新的思维,联合线上数据的欠缺更加准确地进行治理和优化。 启动页合并在启动工作编排的根底上,咱们在启动过程中能够察看到,一次残缺的启动过程,APP会经验Application的创立,闪屏页Activity的创立,最初才是用户真正看到的首页Activity,即LazadaApplication.onCreate() -> EnterActivity.onCreate() -> MainTabActivity.onCreate() 如果将这两个页面合并为一个Activity,用户启动即首页。在Activity外部通过View的转换实现上述闪屏页到首页Activity的切换,那么用户就会缩小一次Activity的创立及这个过程中相应的Binder调用,从而更快的展示首页内容 最初,新的启动流程就由原来的三步演变为LazadaApplication.onCreate() -> EnterActivity.onCreate() 两步,在EnterActivity外部,当启动工作初始化实现时,通过contentView的转换将闪屏页替换为首页内容,从而晋升启动速度,借助试验采样节约了250ms左右的启动工夫。 全链路路由动静预申请如何针对低端机弱网络进行定向性剖析,并造成链路式而非单点式的优化策略是咱们2021年新的发力点,全链路预加载我的项目是在全局资源智能调度上的一个尝试,通过定制更加灵便的调度策略来实现最大水平的利用零碎闲暇资源,咱们启动该项目标外围指标也是:通过灵便的前置任务调度,实现全链路的秒开体验。 导航预加载 利用导航过程中的工夫gap,提前加载下个页面的资源。这部分节俭的工夫 不仅蕴含页面切换耗时100ms-200ms,可能也蕴含页面初始化的工夫100ms-200ms(个别页面曾经实现了“初始化和网络加载同步化”)。闲时预加载 智能调度:基于用户行为预测,利用以后页面闲暇工夫,提前加载下个预测页面的资源;强制调度:无行为剖析,利用以后页面闲暇工夫,提前加载下个配置页面的资源。通过定义一套标准化解析调度框架不仅反对近程配置的解析映射同时也反对本地工作的近程调度,最终在业务无侵入的个性下实现全链路的路由申请。 通过前置申请减速网络申请过程 PDP场景优化110ms, Cart(from PDP)场景优化230ms, 下单页优化110ms,用户外围购物链路预计节俭450ms。 购物车异步刷新增量更新不同于页面关上场景:在二刷场景中端侧的视图构建和渲染根本不会有工夫耗费,Android和IOS都是有成熟的View复用机制,目前枷锁二刷用户体验的外围问题在于网络耗时过程,从监控数据也能看出接口的Api-totalTime耗时均匀就须要1200ms左右。引发二刷网络耗时的起因有两个: 全量更新导致服务端必须在update中进行全页面元素的从新计算(Trade基于团体奥创中间件协定);全量数据返回引发数据的传输和解析过程都会更加耗时。因而初步的解决形式是:针对二刷场景服务端仅返回须要增量更新的数据元素,客户端借助上次数据进行本地增量合并更新,这样子即升高了服务端的申请耗时,同时也能升高数据量大小从而缩小传输和解析耗时(当然多了一次比照过程耗时,根本能够忽律不计) 整体的计划概述为:借助客户端对上次页面数据的复用能力,通过针对购物车异步操作进行增量更新,升高服务端申请的计算范畴和数据包体积,并最终达到升高网络耗时的目标。第一期咱们次要针对"商品店铺的抉择反选、商品数量的增减"操作进行定向优化,将计算范畴放大到"已选中商品的店铺元素、操作的商品店铺元素、非凡固定元素" 成果比照视频,请查看:Lazada D11 体验降级技术实际 数据取自中国深圳, 线上环境 借助AB试验比照:ServerRt优化57.52%,SKU查问量优化80.69,QPM优化217.75% 客户端大盘数据TotalTime从1100ms->750ms晋升31.82%,通过细分维度能够察看到Item引发的刷新动作有明显降低其余的根本稳固,合乎预期;购物车弱化刷新频次Android购物车目前每次从新进入都会引发刷新操作,联合购物车线上性能数据:用户每次进入根本要期待1.029.81ms,64.5%的用户能够在1s内实现加载,这就导致一个问题“局部加购的用户可能重回购物车时也会引发刷新”,譬如这个用户故事:用户在Cart Just For You模块看到了一个感兴趣的商品并点击进入PDP, 在PDP浏览后(无任何加购操作)返回Cart,Cart重刷会导致之前正在浏览的数据被从新笼罩。因而咱们启动了该我的项目次要目标是:在兼顾购物车失常刷新的前提下,升高购物车的刷新频次。 Android侧仅凋谢“重回购物车时刷新”,这是思考到“大促场景下Android用户群体宏大,加购动作如果间接绑定Cart刷新行为可能引发流量压力”;同时,Android侧提供了“即时刷新购物车”的能力以便于非凡场景下的应用。 成果比照视频,请查看:Lazada D11 体验降级技术实际 数据取自中国深圳, 线上环境 ...

February 8, 2022 · 1 min · jiezi

关于移动应用开发:极客星球-Flink在数据智能公司的探索实践与优化

▌Flink摸索1.1:Why FlinkApache Flink 是一个分布式解决引擎,用于离线和实时的计算。Flink凭借其极致的流式解决性能和优良的框架设计吸引了泛滥开发者退出,各大厂也都纷纷引入Flink作为其次要的流式开发引擎。 Flink的次要劣势: Exactly-once 语义多种高效的窗口计算轻量级的checkpoint机制反对 EventTime 及工夫乱序事件高效的反压机制弱小的状态管理机制,可反对超大的状态存储反对流的join和维表的join泛滥的connector反对简单事件处理CEP反对SQL、自定义UDF、UDFA等Flink在满足简单性能的同时,QPS还能够达到百万级别,同时容错性和准确性也能够失去保障,这是MobTech袤博科技抉择Flink的次要起因。MobTech袤博科技是寰球当先的数据智能科技平台,累计笼罩设施155亿+,DAU 2.6亿+,继续迭代的趣味标签达6000+。在数据智能产业,以数据利用为主导,交融顶尖的大数据、云计算、人工智能等多元先进技术,打造开发者服务、商业化、AI、Mob研究院四大版块,为寰球数百个国家和地区的企业、开发者和政府机构提供商业智能解决方案、App经营赋能计划、企业级AI智能计划、数据征询钻研等服务。 1.2 Flink在MobTech袤博科技的集群状况公司采纳 On-yarn 的运行模式,长时间运行的流工作采纳Per-Job模式,局部利用采纳Session形式运行。On-yarn模式简略不便无需关怀保护Flink集群状况,只须要配置Yarn和部署Flink Client即可开发和提交Flink工作。Flink版本从最后的1.7一路降级到1.13,降级至最新版本的起因有三点: 1、因为社区版本迭代较快,如果跨多个版本迭代批改的老本会十分大,所以在小版本迭代的时候抉择降级是最划算的,因为须要改变的代码不会太多; 2、Flink社区十分沉闷,每个版本都会有较大的性能和性能的晋升,特地是Flink SQL,这也是咱们思考的重要起因之一; 3、随着版本的迭代开发方式也失去降级,新近次要是基于stream api进行开发,开发效率偏低而且性能不是最优的。公司外部逐步搭建起Flink流式平台,使开发SQL化大大提高了开发效率和程序性能。 MobTech袤博科技领有独立的流式计算集群,蕴含了Flink、Spark、Storm等各种的流计算引擎。而Flink应用程序占80%以上,大部分过来开发的Spark streaming程序在应用Flink重构后,资源利用率翻了一倍,同时解决了计算提早、数据背压以及内部资源依赖等问题。 ▌Flink在数据智能企业的利用和挑战Flink在MobTech袤博科技的利用场景有很多,从实时报表、数据监控、实时画像、机器学习到实时数仓,Flink在各个环节和业务线都施展了至关重要的作用,为公司带来微小的价值。接下来我将选取几个比拟经典的案例来分享咱们在Flink实际中获得的教训成绩。 2.1 经典的多维度DAU计算问题MobTech袤博科技作为寰球当先的数据智能科技平台,因为笼罩的设施数量微小,所以每天都有大量的日志进入日志零碎; 日均实时处理数据量达150亿+,日均QPS 20w/s+,数据处理峰值可达 90w/s,DAU 达2.6亿+,MAU 达 12亿+,趣味标签体系6000+; 同时Flink Checkpoint 达10G左右,所以如何精确地计算和存储如此微小的数据成为一大挑战。 单个Topic 最高 20w/s +,总和曾经超过百万QPS 计算过程中数据可扩张至千亿以上 挑战1:大QPS下的 UID去重问题 因为思考到日活的数据量较大,单天的日活已达2.6亿+,周活和月活的能够翻数倍,如果要准确计算UV值将会耗费微小的内存和磁盘空间,同时会导致checkpoint的后果微小可能呈现提早甚至失败。Flink有原生的COUNT DISTINCT来反对去重计算,采纳的 Split Distinct Agg 形式做聚合,能做到准确去重但效率不高长时间运行上来会越来越慢,同时无奈解决状态太大的问题。起因在于COUNT DISTINCT应用了MapState作为状态存储,如果单个Key的UID过大会导致内存溢出同时State过大导致Checkpoint工夫过长甚至失败。 所以咱们采纳业内罕用的HyperLogLog算法做到误差小于0.1%的估算形式,单个维度的Key对应的HLL只有一个对象且大小只和精度无关,重写相似COUNT DISTICT的聚合函数即可实现,HLL_COUNT_DISTICT(UID)。 通过优化后Flink Checkpoint的大小由原来的30G降到2.5G左右升高了10倍以上的存储压力,同时计算上没有呈现背压的状况。 挑战2:数据热点问题 在开发的过程中咱们发现某个报表后果只有两个Key导致所有数据只进入两个slot计算导致热点问题,这类问题借由Flink原生对COUNT DISTINCT的优化思路Split Distinct Agg形式能够很好地解决。SQL语句如下: 第一次聚合由group key和额定的bucket key进行shuffle,bucket key是应用 HASH_CODE(distinct_key) % BUCKET_NUM计算的。当第二次group by day的时候须要留神的是,因为咱们应用HLL_COUNT_DISTICT来代替原生COUNT DISTINCT,返回类型是HLL,所以须要自定义SUM_HLL对HLL对象做累加解决。 ...

December 8, 2021 · 1 min · jiezi

关于移动应用开发:mPaaS-月度小报|魔方卡片Cube公测十个卡片模板任意使用

本月亮点速览 产品动静 魔方卡片(Cube)公测小程序公布 IDE 质检工具等质量体系(需专有化部署)音讯推送 MPS 新增定时推送、音讯撤回等推送能力挪动网关新增熔断机制营销动静 魔方卡片(Cube)公测期间,每位用户均可取得十个卡片模板收费应用飞天会员购 mPaaS 根底资源包享八折优惠产品动静1.魔方卡片(Cube) 公测公布,源于「支付宝」首页的卡片技术栈,让 App 各业务模块开发及发版更繁难、更动静。 2.小程序 小程序质量体系公布,蕴含巨神兵、云闪测、IDE 自检工具和线上巡检四个工具。(需专有化部署) 3.音讯推送 MPS 推送能力进一步丰盛,新增定时推送、音讯撤回、自定义推送人群性能;(需专有化部署) 4.挪动网关 MGS 新增熔断机制,提供熔断能力,在后端系统出现异常时对后端进行爱护。(需专有化部署) 5. 版本基线阐明 Android 10.1.68 系列11月已公布至 42 版本;iOS 10.1.68 系列11月已公布至 40 版本。开发者可返回 mPaaS 产品文档查看版本更新详情。 营销动静1.魔方卡片(Cube)公测福利 每个用户均可取得十个 Cube 模板,公测期间收费任用。在接入应用过程中如需技术支持,可钉钉搜寻“32843812”退出接入答疑群。 2.mPaaS 根底资源包飞天会员八折 公布更新接口调用次数、公布包下载流量、推送胜利音讯数、网关接口调用次数、挪动剖析埋点流量、数据同步音讯数、投放展位接口调用数等预付费资源包八折购。(仅限飞天会员)

December 3, 2021 · 1 min · jiezi

关于移动应用开发:我为什么放弃移动开发

本文作者|Niklas Klein 译者|朱琪珊 策动|蔡芳芳,原文链接:https://medium.com/swlh/9-rea...,本文由原作者发表在 medium.com,经原作者受权由 InfoQ 中文站翻译并分享。 当我还在上大学的时候,Android 和 iOS 还是新兴的平台,每个人都对这两项技术很感兴趣。如果你加入一些过后的编程研讨会,最初总会写一个小型的 Android 利用。这就是我向 Android 生态系统迈出的第一步,也可能是我随后成为了一名挪动开发者的起因。 在这篇文章中,我想要分享我对于 Android SDK 和 Flutter 的蹩脚体验。我提到的某些要点也实用于 iOS SDK。我曾经在几年前放弃了挪动开发的工作,心愿起初许多事件曾经在朝好的方向改良。但在过后,我发现挪动生态系统是如此的令人感到困惑和挫败,以至于我抉择了一条不同的职业门路。 设施的碎片化对开发者而言,Android 开发的最大痛点,就是设施配置的微小差别。我始终都未能了解为什么 SDK 中大部分性能(尤其是用户交互界面的局部)取决于设施,而不是我的利用。这从根本上导致我必须应用反对库,针对每个指标 API 级别调试我的利用。除此之外,我还常常遇到在仿真器或者测试设施上好好的代码,却在某个三星或者华为的设施上解体的状况。 质感设计(Material Design)当我在 HackerNews 或者 Reddit 上读到对于谷歌的 Material Design 的评论时,某些时刻会感到我是惟一真正喜爱它的人。我感觉它在视觉上很具吸引力,我通常很享受这样的用户体验。官网的文档网站倒退得很快,也十分胜利,我感觉这是优良文档的榜样。当它被发表用于 Android 时,我感到十分兴奋! 话虽如此,在 Android 平台上从 Holo 过渡到 Material Design 并非一帆风顺。因为它如同是被急匆匆公布进去似的。在接下来的几年之中,官网的 Material Design 反对库始终短少一些十分根本的组件。尽管你有时能够在谷歌自有的利用上看到这些组件,然而它们并没有真正被纳入到反对库中。开发者不得不构建本人的组件,或者应用 GitHub 上品质无奈保障的实现作为替代品。这次应用 Material Design 反对库的经验,再加上大量的不统一的视觉设计和实现谬误,让我第一次停下来真正地思考和质疑这个生态系统。 无人理睬的最佳实际构建一个牢靠的 Android 利用,是一项充斥挑战的工作。这次要是因为 SDK 对开发者并不敌对。实践上,一个 Android 应用程序能够永远挂在后盾不应用任何系统资源,而后在用户须要时立刻回到先前的状态,这切实是令人诧异。不过前提是开发者正确地实现了这个利用的状态和生命周期管理机制。 开发者:你好,互联网!我的利用在扭转屏幕方向时解体了,该如何解决?互联网:这很简略!禁止扭转屏幕方向即可。 ——啊哦,可怜的是,这种回复很广泛。 你是否已经应用过 Java 中的线程(Threads)?在可变变量随处可见的的命令式代码库中,这件事变得十分艰难。但你猜怎么着?在 Android SDK 中应用线程更加艰难。如果你想要在一个 Activity 中治理 Thread,那你就只能自求多福了。侥幸的是,咱们最终保留了 Fragments,这最终让这件事变得容易了一些。但代价是在一开始就须要应用 Fragments。 ...

November 8, 2021 · 1 min · jiezi

关于移动应用开发:App-不想被点名mPaaS-隐私合规检测为开发者护航数字生态建设

01 寰球最严数据隐衷保护法行将落地,你的 App 筹备好了吗?据新华社报道,全国人大常委会于 8 月 20 日通过了《个人信息保护法》,该法自 11 月 1 日起实施。 它全面和具体地规定了企业爱护集体信息安全的各项任务,同时指出违反法规最高可面临 5000 万或一年度营业额 5% 的巨额罚款。 这是我国首部针对个人隐私爱护的法律,立法的严格水平堪比欧盟《通用数据保护条例》(GDPR)。它的出炉不仅是对顶层制度的查缺补漏,还进一步开释出了国家信心整治市场侵害个人隐私行为的信号,将对互联网科技行业造成压力。 近年来,政策法规及监管规范一直细化深入,监管查处力度也一直加大。App 开发企业如若违规将会面临的各类损失也在日益减少: 品牌形象受损: 全网公开通报,大量负面信息,导致品牌公信力降落;用户量下滑: App 被下架,无奈获取新增用户,已有用户也可能会基于隐衷平安思考,放弃应用 App;经济损失: 最高 5000 万或一年度营业额 5% 的巨额罚款。你的 App 筹备好直面这场“严考”了吗? 02 隐衷合规自查?这些“重点难点”圈一下隐衷合规自查,企业须要面临的难点大略有三个方向: 监管条文的解读及有效性;检测我的项目多、检测步骤简单;检测不全面,漏检漏改危险大。隐衷检测的几个重点问题也须要开发者及时关注: 但除工信部重点检测的十项问题外,隐衷合规检测项还须要笼罩监管法规要求的其余 25 项检测内容,合乎四部委所有监管条例。 不难发现,隐衷合规检测我的项目泛滥且耗时较长,波及动态、动静、人工解读等,隐衷合规条文也必须通过业余的人员解读且联合业务性能利用场景,判断其是否非法合规。 其中如有一个环节呈现过错,开发者便会为本人勤勤恳恳开发的利用埋下相应的危险隐患:监管不定期巡检查处,不合规的会被全网通报勒令整改,情节严重的间接下架解决。 03 大厂隐衷合规计划,全方位对外输入mPaaS 隐衷合规检测服务: 根据国家相干法律法规及行业标准,对挪动APP隐衷平安、集体数据收集和应用进行合规剖析。从个人信息收集、权限应用场景、隐衷政策等多个维度帮忙企业及APP开发者辨认平安危险,提供对应的专家整改倡议,助力客户躲避监管处罚及通过审核上架。 立刻填写表单理解更多计划详情 01 隐衷协定检测,业余法务解读以国家颁布并执行的法律法规为检测规范,基于已取得多项专利的隐衷政策文本智能剖析技术对隐衷协定文本的自动化检测,逐条比照隐衷协定申明是否合乎法律法规要求。 02 敏感权限、个人信息采集行为辨认定位基于动态检测及动静监测技术辨认能力,逐个列举 App 及第三方 SDK 中敏感权限调用和个人信息采集行为状况,并溯源代码调用具体位置。 03 定制化场景检测基于动静运行时检测,对理论采集产生的业务场景进行定位。反对提供测试用例,联合业务场景检测业务采集个人信息的危险行为和频率。 04 业余解读依据国家相干法律法规、四部委工作组的检测根据,以及行业实用规定,联合 App 隐衷协定,针对 App 理论采集、应用个人信息行为检测后果逐条剖析解读,提供与法规对照的检测报告,及整改倡议。 E N D

September 10, 2021 · 1 min · jiezi

关于移动应用开发:技术干货-应用性能提升-70探究-mPaaS-全链路压测的实现原理和实施路径

业务背景随着挪动开发行业的步入存量时代,App 整体架构的负载能力、以及各个环节的优化逐渐成为各个开发者们关注的重点。 压力测试就是实现以上性能的次要计划。个别能够基于压力测试: 测试后端业务的负荷瓶颈;评估整体架构性能;业务稳固峰值;排查出各节点的单薄关系;优化系统资源;防止短板效应;为经营提供精确的用户承载量作为作证,防止流动/新利用的上线带来的突发流量造成的用户体验不佳。 明天,咱们将为大家介绍全链路压测计划的是实现原理和施行门路。 全链路压测与原理通常咱们能够简略的把负载性能=单机性能*机器总量这一公式套用到预估的计划中,然而在理论的场景下,经常会波及到大量的业务节点,如DNS,网关,数据库等环节,都有可能是导致整体业务性能的瓶颈,因此理论服务能力可能与预期存在较大误差。 个别用户会通过 loadrunner 等计划实现生产环境下的服务器性能压力测试,然而在 mPaaS 利用中,简单的部署无奈通过 MGS 网关,昂扬的费用等难点应运而生,为了解决这些痛点。 mPaaS 团队这边根据多位客户的述求,提供出 MGS 全链路压测计划。 区别于以往的测试计划,全链路压测计划中最大的不同是视角上的不同,站在客户端角度上作为切入点,将整个服务端链路作为一个黑盒,以实在的 request 和 response 作为评估的根据,模仿实在的业务申请,实在的数据流量,实在的用户习惯,来达到得出尽可能实在的评估后果。 链路梳理在一个规范的数据链路中,个别为以下模型 而在全链路压测中,咱们把整体的服务端实现视为一个黑盒,因此咱们所需关注的焦点聚焦在前半段,重点能够概括为: 1.客户端申请构建; 2.客户端申请发送并通过 MGS 网关; 3.客户端解析 MGS 网关返回的 response 并做出正确处理; 4.实现高并发的客户端申请集群。 以上再次梳理,能够演绎出以下难点 难点1 客户端申请构建 mPaaS 挪动网关 RPC 通信是在 HTTP 协定根底之上的实现的一种标准化接口方式,在复用 HTTP 申请规范的前提下,定义了一套数据交换格局,采纳Header,Body 作为理论辨别,能够近似了解为,通过Header 中的Operation-Type做为实在api指向,将body局部根据规定封装后进行转发。 在该步骤中,咱们以 JMeter 作为实现计划,Jmeter 灵便的脚本个性能够良好的实现客户端的实在申请模仿。 难点2 数据加解密 mPaaS 挪动网关 RPC 申请特有的数据加密形式构建申请中比较复杂的局部。客户侧已有的测试计划不能笼罩这部分能力,因而往往抉择敞开网关服务端验签和加密性能施行压测。 这种形式的隐患在于无奈预计加解密给网关服务器带来的计算压力。 依据教训,不同的加解密算法配置,对网关的吞吐量有 20% ~ 40% 影响。在此阶段,由金融线 SRE 团队基于用户生产环境定制开发的 JMeter 插件 MGSJMeterExt,该插件逆向实现了申请体的加密和解密过程,使得压测脚本的编排能够包含加密局部。 ...

August 30, 2021 · 2 min · jiezi

关于移动应用开发:排查指南-两个案例学会从埋点排查-iOS-离线包

离线包原理以一次启动离线包的流程为例,离线包的加载流程分为两种场景,第一种是离线包下载好的场景,流程如图1所示,第二种是离线包没下载好的场景,如图2所示: 图1:离线包加载支流 图2:离线包下载流程 咱们能够从埋点来跟踪离线包具体的加载流程*: 查看本地是否有离线包,本地有则执行第四步解压,解压之后再进行校验,校验通过加载本地离线包,如果本地曾经装置过,那就不须要解压间接走解压后的流程网络申请离线包信息,这一步和上一步是异步进行的,对应的埋点有 H5_APP_REQUEST比照申请回来的离线包信息,再决定是否下载离线包,对应的埋点有 H5_APP_DOWNLOAD解压离线包,对应的埋点有 H5_APP_UNZIP如果开启了离线包验签,校验离线包的合法性,对应的埋点有 H5_APP_VERIFY、H5_AL_SESSION_VERIFYTAR_FAIL加载本地离线包,对应的埋点有 H5_AL_SESSION_MAP_SUCCESS、H5_AL_SESSION_FALLBACK留神:fallback走线上须要等到离线包申请这个异步申请回调回来之后返回的 fallback + mainUrl 确定 Webview 关上的URL。 *参考资料:离线包日志埋点 案例1:首次关上离线包白屏STEP1:依照离线包加载流程剖析,首次关上离线包肯定是须要走线上的fallback,因为本地没有,走线上之前肯定须要先晓得离线包的线上地址也就是URL,所以须要查看日志剖析是否是申请离线包信息那一步出错了。 STEP2:剖析日志关上线上离线包的时候URL为空,在离线包申请还没有回调回来之前就关上离线包,所以呈现了白屏。 STEP3:查看代码 将创立的离线包控制器作为根视图,机会过早,所以导致了该问题。 STEP4:联合客户需要给出倡议,能够应用本地预制离线包解决首次过早关上离线包呈现白屏的问题。 案例2:关上预置离线包,报错(-1009)复现demo STEP1:断网状况下关上预制离线包失败显示网络无奈连贯阐明关上预制包失败了,所以走了线上,因为没有网络所以显示网络无奈连贯,问题出在本地预制的离线包上。 STEP2:依照离线包的加载流程剖析,在本地有预制包的状况下呈现走线上的状况别离有两种状况,离线包验证签名失败和加载本地离线包失败。 STEP3:日志剖析 察看到有验签失败的字样。 STEP4:查看代码客户端是否敞开了验签,默认是开启的,如果没有敞开,那么客户端须要设置对应的公钥,或者敞开验签。 STEP5:敞开验签再试一遍,持续剖析日志: H5_AL_SESSION_FALLBACK加载本地离线包失败,最终走的线上,察看解压离线包胜利没有问题,问题出在加载离线包那一步,日志中查找到H5_APP_EXCEP离线包异样埋点,是读取数据时候失败了。 STEP6:问题有可能呈现在该离线包下面,所提供一个失常的离线包给客户做成本地预制离线包,断网关上验证,没有问题,问题就出在该离线包上。 STEP7:解开预制的离线包,察看离线包是否门路字符总长度是否超过了限度导致读取数据失败。 JS文件名称过长,导致总的字符长度超过了限度,须要客户批改离线包*。 *参考资料:生成离线包 思考和总结通过下面两个案例的介绍,咱们能够清晰的看到案例一最终呈现问题的起因是申请离线包信息这个申请没有回调回来,客户就关上离线包时没有获取到URL,问题呈现在了申请离线包那一步了,而案例二最终定位到加载本地包失败那一步。 理解了离线包的具体加载流程,再联合 nebula 容器自动化埋点日志,就能够具体定位问题到离线包加载的哪一步了。 本文作者:阿里云 mPaaS TMA 团队(杨强 荣阳) END 下周二(8.24)阿里云飞天会员日开启,音讯推送等资源包1折秒杀抢购,点击理解更多折扣详情。

August 20, 2021 · 1 min · jiezi

关于移动应用开发:华为多媒体管线服务AV-Pipeline-Kit打造灵活定制的音视频场景框架

HMS Core 6.0新增的多媒体管线服务(AV Pipeline Kit),是华为在媒体畛域又一技术凋谢。该服务通过打造灵便定制的音视频场景框架,赋予APP丰盛的音视频的解决能力,同时简化音视频采集、编辑和播放等业务开发工作量,助力影音、社交和电商等畛域利用的疾速开发。https://www.bilibili.com/vide... 多媒体管线三大能力:自定义流水线编排、视频超分和声音事件检测。自定义流水线编排能力通过主动解析插件和插件优选等技术,开发者能够在媒体利用中集成插件,实现采编播的媒体利用翻新并晋升用户体验。第三方插件在满足多媒体管线束缚根底上,可不便被多媒体管线集成,帮忙开发者高效聚焦媒体翻新业务。 多媒体管线服务为开发者提供视频超分能力,让用户观看低分辨率视频时能享受高分辨率的体验。该能力反对在视频播放过程中逐帧超分,提供实时降噪、色调加强等能力,对高分辨率视频能够加强其画质,对低分辨率视频可能进行超分以晋升观看体验,反对270P-720P等多种分辨率,最高可实现3倍超分。视频超分还具备自适应分辨率和码率调整的个性,进一步晋升应用体验。 声音事件检测也是多媒体管线服务的一大能力,反对对音频播放中的声音进行声音事件检测。多媒体管线服务提供的声音事件检测能力辨认速度更快,准确率更高,目前反对敲门、车鸣声等13个类别的声音事件检测。开发者能够使用此能力辨认如宝宝哭声,小猫叫声等,晋升家庭辅助揭示体验。 多媒体管线服务具备易用性、高性能以及低功耗三个特点。在易用性上,多媒体管线服务预约义Pipeline反对根底采编播性能,还反对Pipeline快捷拓展,为开发者提供丰盛的开发辅助工具。在高性能方面,多媒体管线服务使用对立的数据格式封装,反对主动援用技术,真正实现模块间的数据“零拷贝”;而通过硬件能力检测技术,优先调用具备硬件加速能力节点,相比传统Pipeline性能晋升超10%。从低功耗角度来讲,多媒体管线服务提供的多模态媒体框架通过缩小数据拷贝以及数据格式转换,优先加载硬件能力来降低功耗开销,功耗收益超20%,帮忙利用达到更好的性能与功耗均衡。 多媒体管线服务可能无效解决目前音视频利用开发难,功耗压力大,影响用户应用体验的痛点,让开发者聚焦翻新。随着多媒体管线服务能力的凋谢,会有更多优质利用为用户带来更好的体验。 HMS Core黑科技,理解一下 拜访华为多媒体管线服务官网,理解更多相干内容获取华为多媒体管线服务开发领导文档华为多媒体管线开源仓库地址:GitHub、Gitee华为HMS Core官方论坛解决集成问题请到Stack Overflow 点击右上角头像右方的关注,第一工夫理解HMS Core最新技术~

July 16, 2021 · 1 min · jiezi

关于移动应用开发:5分钟给商品建立3D模型我是如何做到的

发问:3D模型展现商品不香吗?香!当然香。 当3D建模成为电商网购利用的左膀右臂,大同小异的产品首图就有了面目一新的出现风貌!商品3D模型360°全方位展现,细节更丰盛,辅以线上虚构“看、试、穿、戴”,提供靠近实物的差异化网购体验,助力高效晋升用户转化。 3D模型虽漂亮,然而,时下成果佳的3D建模技术因其较高的老本而使得让宽广需求者望而生畏。 技术门槛高:业余人员手工制作,师带徒传承,学习老本高;工夫老本高:实现一个简略物体的低模模型,工作量以小时起步,高模模型耗时更长。消耗高:单个商品的业余建模老本高,平均价格达到上千元,简单模型更贵;华为挪动服务最新凋谢的3D建模服务,助力轻松建模。用户只需应用一般的RGB相机,通过拍摄物体的不同角度图像,便可实现物体的3D几何模型和纹理的自动化生成,为利用提供3D模型构建、预览等能力。如在电商鞋子展现的场景,您能够通过此能力主动生成鞋子3D模型,用于3D展现,用户可360°随心放大或放大商品,为用户提供差异化的购买体验。   成果示例 技术计划 3D物体建模能力由端云协同实现,端侧负责采集RGB图像,通过盘绕物体一周拍摄多张图像,从而获取物体的不同角度图像,拍摄结束后上传至云端实现3D物体建模。云端建模的流程及关键技术包含指标检测宰割、特色检测与匹配、稠密点云计算、浓密点云计算以及纹理重建等模块。最终输入业界通用的3D模型格局(.obj文件),面片数约40K~200K。 开发筹备1.配置集成的SDK包在利用的build.gradle文件中,dependencies内增加3D建模服务的SDK依赖 // 3D Modeling Kit SDKimplementation 'com.huawei.hms:modeling3d-object-reconstruct:1.0.0.300'2.配置AndroidManifest.xml关上main文件夹中的AndroidManifest.xml文件,能够依据场景和应用须要,配置读取和写入手机存储以及相机权限,在<application>前增加 <!-- 往sdcard中写入数据的权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><!-- 应用相机的权限 --><uses-permission android:name="android.permission.CAMERA" />开发步骤1、配置存储权限申请在MainActivity的onCreate()办法中,首先对手机存储的读取权限进行判断,如果未获取权限,则通过requestPermissions进行申请。 if (EasyPermissions.hasPermissions(MainActivity.this, PERMISSIONS)) { Log.i(TAG, "Permissions OK");} else { EasyPermissions.requestPermissions(MainActivity.this, "To use this app, you need to enable the permission.", RC_CAMERA_AND_EXTERNAL_STORAGE, PERMISSIONS);}查看权限申请的后果,如果有权限初始化界面,没有权限提醒用户开启。 @Overridepublic void onPermissionsGranted(int requestCode, @NonNull List<String> perms) { Log.i(TAG, "permissions = " + perms); if (requestCode == RC_CAMERA_AND_EXTERNAL_STORAGE && PERMISSIONS.length == perms.size()) { initView(); initListener(); }}@Overridepublic void onPermissionsDenied(int requestCode, @NonNull List<String> perms) { if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { new AppSettingsDialog.Builder(this) .setRequestCode(RC_CAMERA_AND_EXTERNAL_STORAGE) .setRationale("To use this app, you need to enable the permission.") .setTitle("Insufficient permissions") .build() .show(); }}2.新建3D物体建模配置器// Initializing the RGB ModeModeling3dReconstructSetting setting = new Modeling3dReconstructSetting.Factory() .setReconstructMode(Modeling3dReconstructConstants.ReconstructMode.PICTURE) .create();3.新建3D物体建模引擎并初始化工作调用Modeling3dReconstructEngine的getInstance()接口,传入以后利用的上下文创立3D建模引擎实例 ...

July 15, 2021 · 2 min · jiezi

关于移动应用开发:华为HMS-Core-60全球上线

2021年7月15日 HMS Core 6.0于今日正式在华为开发者联盟官网上线,为利用开发者带来了多项全新的凋谢能力,并对已有的个性及服务进行了降级。目前,用户设施内置的HMS Core 6.0 APK已全面完成更新降级,开发者可登录华为开发者联盟官网下载应用各项服务。HMS Core 6.0将华为在媒体利用、图形渲染、网络减速等多个劣势畛域的先进技术进一步凋谢。在媒体畛域,新增了多媒体管线服务(AV Pipeline Kit),通过音视频开发框架及视频超分、声音事件检测等插件,帮忙开发者解决音视频利用开发难、功耗压力大的痛点。在图形畛域凋谢了3D建模能力(3D Modeling Kit),为开发者提供基于AI技术的物体建模、材质制作等能力,用户仅需一般RGB相机,通过手机便可高效生成3D模型,让电商类、动画制作类App霎时取得趣味交互,目前该能力反对Android全平台。 此外,在现有的图形计算服务(CG Kit)中,业界首次在挪动端实现了基于体渲染技术的动静光影雾效“体积雾”,助力手游晋升室内场景画面的真实感和表现力。该个性也已面向Android所有反对Vulkan的设施凋谢。 在华为当先的通信畛域,Network Kit降级了AI网络环境预测,可基于业务的网络拜访法则、以及差异化网络需要,进行网络参数调优,让利用的网络时延升高超过20%。 HMS Core 6.0还凋谢了包含会员、视频剪辑、音频剪辑等多项服务,开发者能够登录华为开发者联盟官网查看更多详细信息。 作为华为软硬件和云端凋谢能力的合集,HMS Core始终以开发者为核心,一直将华为劣势的核心技术及能力凋谢给更多开发者,为跨平台、跨设施的利用提供了一致性的优质体验。HMS Core反对包含Web利用、快利用,以及Android、HarmonyOS等的利用和服务开发,同时也反对在平板、智慧屏、智能手表及车机等设施调用。此外,HMS Core还反对丰盛的第三方开发框架,如React Native、Cordova等。 拜访华为开发者联盟官网,理解更多相干内容获取开发领导文档华为挪动服务开源仓库地址:GitHub、Gitee关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 15, 2021 · 1 min · jiezi

关于移动应用开发:300行代码实现语音搜索购物的技术分享

“阿强,手写板怎么又不见了?” 最近,程序员阿强的那位敢于尝试新事物的外婆,又迷上了网购。在不太费劲儿地把购物软件摸得门儿清之后,没想到,本认为顺畅的网购之路,卡在了搜寻物品上。在手写输入环节,要么误操作,无心中更换到不相熟的输入法;要么误按了界面上形象的指令字符……于是阿强也常常收到外婆发来的求助。 其实,不止是购物利用,时下智能手机里装载的大部APP,都是歪斜于年老群体的交互设计,老年人想要体验学会应用,很难真香。 在一次次急躁领导外婆实现操作后,阿强,这个成熟coder给本人提了个需要:晋升外婆的网购体验。不是一味让她适应输入法,而是让输入法投合外婆的应用偏好习惯。 手动输出易出错,那就写个语音转文字的输出办法,只有启动录音按钮,实时语音辨认输出,简略又快捷,外婆用了说直说好! 成果演示 实时语音辨认和音频转文字有丰盛的应用场景1、游戏利用中的使用:当你在联机游戏场组队开黑时,通过实时语音辨认跟队友无阻沟通,不占用双手的同时,也防止了开麦露出声音的难堪。。2、办公利用中的使用:职场里,耗时长的会议,手打码字记录即低效,还容易漏掉细节,凭借音频文件转文字性能,转写会议探讨内容,会后对转写的文字进行梳理润色,事倍功半。3、学习利用中的使用:时下越来越多的音频教学材料,一边观看一边暂停做笔记,很容易打断学习节奏,毁坏学习过程的完整性,有了音频文件转写,零碎的学习完教材后,再对文字进行温习梳理,学习体验更佳。 实现原理华为机器学习服务提供实时语音辨认和音频文件转写能力。实时语音辨认反对将实时输出的短语音(时长不超过60秒)转换为文本,辨认准确率可达95%以上。目前反对中文普通话、英语、中英混说、法语、德语、西班牙语、意大利语、阿拉伯语的辨认。 反对实时出字。提供拾音界面、无拾音界面两种形式。反对端点检测,可精确定位开始和完结点。反对静音检测,语音中未谈话局部不发送语音包。反对数字格局的智能转换,例如语音输入“二零二一年”时,可能智能辨认为“2021年”。音频文件转写可将5小时内的音频文件转换成文字,反对输入标点符号,造成断句正当、易于了解的文本信息。同时反对生成带有工夫戳的文本信息,便于后续进行更多功能开发。以后版本反对中英文的转写。 开发步骤1、开发前筹备配置华为Maven仓地址并将agconnect-services.json文件放到app目录下:关上Android Studio我的项目级“build.gradle”文件。增加HUAWEI agcp插件以及Maven代码库。在“allprojects > repositories”中配置HMS Core SDK的Maven仓地址。在“buildscript > repositories”中配置HMS Core SDK的Maven仓地址。如果App中增加了“agconnect-services.json”文件则须要在“buildscript > dependencies”中减少agcp配置。buildscript { repositories { google() jcenter() maven { url 'https://developer.huawei.com/repo/' } } dependencies { classpath 'com.android.tools.build:gradle:3.5.4' classpath 'com.huawei.agconnect:agcp:1.4.1.300' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }}allprojects { repositories { google() jcenter() maven { url 'https://developer.huawei.com/repo/' } }}参见云端鉴权信息应用须知,设置利用的鉴权信息。 ...

June 24, 2021 · 5 min · jiezi

关于移动应用开发:从-Alpha-到-Beta这次是-New-mPaaS

新视觉:金盏花黄的盛放随着过来一年与泛滥开发者交换、能力上达成单干,mPaaS 进一步明确了「容器+动静公布」的产品主张。 作为支付宝孵化的挪动开发平台,mPaaS 不仅助力泛滥金融、政务机构顺利搭建性能持重、体验晦涩的端上 App,更是致力于精简产品状态,晋升接入体验,为中国泛滥挪动端开发者提供动态化的跨平台能力。 随同 mPaaS 新的产品主张,咱们对 mPaaS 品牌进行了降级,设计团队选用可能代表年轻化、踊跃有生机的金盏花黄作为 mPaaS 品牌色,用来传播 mPaaS 心愿给开发者提供更简略、更高效挪动开发场景的愿景和价值观。 点击这里,立刻拜访 mPaaS 全新官网。 新容器:自定义 View 全新个性随着全新视觉零碎的迭代,mPaaS 容器也带来了新版本。 在此次新版本中,咱们实现了小程序容器的自定义 View 能力。 开发者能够在小程序组件中,自定义 class 继承 MPBaseEmbedView 并实现 getView 办法,获取 Android View 返回给小程序。同时,咱们也反对针对自定义 View 渲染参数进行自定义、自定义音讯及事件并发送至自定义 view 中。 这意味着,开发者能够基于新能力,联合细分业务场景,实现更为多元化、丰盛的业务交互;同时,让更为简单的业务模块也能借助自定义 View 的形式,联合容器能力实现动态化更新。 *Android 端小程序容器基线降级文档已上线,详情请拜访链接:https://help.aliyun.com/docum...*iOS 端全新小程序容器还在筹备中,钉钉搜寻「32930171」退出 mPaaS 技术交换群,get 最新产品动静。 E · N · D CodeDay#6 成都站报名ing,立刻报名>>

June 11, 2021 · 1 min · jiezi

关于移动应用开发:友盟UAPM-移动应用性能体验报告-APM越发受到关注第三方监控工具覆盖已超四成

近日,国内当先的全域数据智能服务商——友盟+,公布了《友盟+U-APM 挪动利用性能体验报告》。据悉,友盟+于去年将原挪动剖析U-App谬误剖析模块正式降级为U-APM利用性能监控平台,通过近一年的察看,通过DEM 视角剖析挪动利用端的性能体现公布这份报告,旨在帮忙开发者清晰理解行业动态,精准定位本身产品地位。 利用性能治理越发受到关注,SDK 覆盖率整体超过四成 互联网存量时代,个体用户的体验晋升变得越来越重要,利用性能治理(APM)受到开发者更多关注。截至2021年2月,利用商店上架利用集成三方SDK的比例42.2%,且持续保持增长趋势。不同于其余开发者工具,利用性能治理 SDK 具备较强排他性,92%的利用仅会抉择一款利用性能治理产品。 从不同规模来看,规模越大的利用越器重对稳定性能的监控, SDK 覆盖率越高。值得关注的是,中长尾利用也更加重视用户体验的晋升,在抽样长尾利用中仍有37%集成利用性能治理SDK。 影视观看行业对稳定性和性能体验最为器重,SDK 覆盖率高达五成 从不同行业来看,除手机丑化/母婴/拍照摄影/工具类利用外,其余行业 SDK 覆盖率均超过40%,尤其影视行业APP对晦涩水平要求较高,SDK 覆盖率高达五成。 利用性能治理 SDK 覆盖率随利用规模增大而回升 头部利用成熟度高:随着利用规模的逐渐扩充,开发者领有用更多的资源和工夫精细化打磨用户体验,因而也更加器重稳定性能的监控和治理, SDK覆盖率越高。 中长尾利用逐步器重:互联网存量时代,中长尾利用也更加重视用户体验的晋升,在抽样长尾利用中有37%集成利用性能治理SDK。 对于不同利用而言,抉择一款适宜本身APM产品,须要同时思考老本均衡、本身产品情况、用户应用情况等诸多因素。因为排他性的存在,选定一款APM就意味着惟一的存在,这还须要开发者在一开始便思考SDK集成难度、监控有效性、技术稳定性、SDK合规性、技术支持度以及开发方的前期配合度等。 现在行业中如友盟+U-APM能够帮忙开发者通过2行代码实现SDK的集成,从而取得实时监控、智能告警、用户细查和云真机测试等诸多能力。 该产品源于阿里巴巴外部外围团队弱小的谬误捕捉技术及友盟+超强的数据处理能力,保障U-APM为客户提供稳固牢靠的性能监控与测试服务,同时其可能反对秒级响应的我的项目服务群实时帮忙开发者解答问题,并在SDK隐衷合规问题等方面可能提供帮助排查,反对技术接入,前期也会提供技术专家的征询解答,从而杜绝开发者的后顾之忧。 友盟+的U-APM利用性能监控平台基于弱小的捕捉采集能力,疾速定位谬误本源,提供用户维度的解体统计,疾速还原解体现场,并设立多种正告通道,助力开发者7*24监控利用状况。 据悉,报告还就挪动利用解体现状、手机品牌解体状况进行了具体的剖析,完整版报告可到友盟+官网下载。

June 1, 2021 · 1 min · jiezi

关于移动应用开发:快成物流科技-x-mPaaS-小程序容器加持下的技术架构提质增效

导言从 2017 年开始,GMTC“挪动技术大会”就更名为“大前端技术大会”。倒退至今,混合开发、原生开发、前端开发等概念正在深度交融,组成“大前端”团队。大前端团队如何选型技术?如何疾速上手?如何高效协同?让咱们看看快成科技如何解决这一问题。缘起两地三团队快成科技是网络货运畛域的领军科技企业,畛域排名市场前三,平台有 3w+ 大宗商品货主,将货单公布到平台,由 60w+ 的卡车司机接单承运,每年产生 120亿 的运费交易额。 以司机端为例,须要承载从发单抢单到从进出场治理,从在途门路监控到金融白条加油加气等一系列互相强关联、流程链条长的业务。这些工作由两地三个研发团队,独特分工协作实现。 在 7*24 小时不间断的客户服务和每月 2-3 次发版的高度迭代中,技术框架瓶颈逐步凸显,具体包含: 在零碎框架方面,初始框架是原生 App+HTML5,传统 web 存在启动白屏和性能响应不晦涩,大大降低了用户体验;在发版周期方面,研发部门多,产品链条长,局部企业须要更多的共性定制化服务导致发版期待周期不统一,频繁的发包更新不仅升高了经营效率,也给客户带来了频繁更新的困扰;在体验一致性方面,原生开发依赖零碎框架,因为原生个性不同,而导致各厂商多渠道平台中差异化凸显,多平台性能、体验差异较大;在多部门合作方面,罕用开发语言、前端 JavaScript 框架等不尽相同,不能及时依据需要张弛和上线 DDL 来灵便调配技术人员合作开发。在快成科技业务继续高速倒退的背景下,优良的技术架构是“提质增效”的保障,零碎重构势在必行。快成的小伙伴们开始寻找优良的架构,解决场景问题。 选型四维度快成小伙伴针对发现的问题,探讨出四个选型维度: 框架成熟度:简略来说,就是这个新技术是否靠谱,百亿的业务压力,没有太多的试错空间;迁徙老本:如果想得到新技术带来的收益,须要咱们付出什么代价,例如新技术的学习老本、原来架构的革新老本等;社区气氛:次要是看跟进这个技术的人够不够多、文档资料是否丰盛、遇到问题是否失去帮忙等;考量根底上兼顾性能、跨平台和动态性。定好技术选型考量指标之后,团队对常见的跨平台计划诸如 React Native、Weex、Flutter 和小程序进行了一系列的调研以及 Demo 制作,横向比拟如下: 技术选型调研后果React Native 和 Weex• 启动工夫慢、帧率不如原生; • 迁徙老本较大,开发者需封装一层较重的中间层,对研发人员要求较高。Flutter性能和效率至上然而动态化能力十分无限。小程序自身并非一种跨平台开发计划,无奈利用自身 app 关上,更看重渠道劣势。正在进入技术选型窘境的时候,快成物流科技偶尔接触到了源自支付宝技术框架的mPaaS,通过应用 mPaaS 小程序容器,整合 mPaaS 框架、离线包和复用 h5 插件,依靠于性能强劲的 web 渲染引擎,完满合乎了咱们对技术选型的冀望与要求。 入手试试看选定技术选型之后,在重构初期,针对我的项目工程建设以及划分上,咱们共事之间进行了一场强烈的头脑风暴,最终选定了在多部门合作前提下进行轻量组件化并行开发多个小程序并进行动静下发的计划。 快成团队从协同、技术等多角度,进行框架的逐渐导入。 如需理解残缺内容详情,欢送观看 CodeHub#5 全程回放 1. 多团队协同 2. 实在场景测试真机预览与调试问题,首先要设置好白名单,设置形式可参考文档,而后在原生端依据文档进行相应的配置和代码书写,最初须要留神的是 IDE 生成的二维码须要应用咱们 App 的扫码能力扫描(可接入 mPaaS 的扫码组件),用支付宝扫一扫是打不开的。 ScanService service = LauncherApplicationAgent.getInstance().getMicroApplicationContext() .findServiceByInterface(ScanService.class.getName());ScanRequest scanRequest = new ScanRequest();scanRequest.setScanType(ScanRequest.ScanType.QRCODE);service.scan(this, scanRequest, new ScanCallback() { @Override public void onScanResult(boolean success, Intent result) { if (result == null || !success) { showScanError(); return; } Uri uri = result.getData(); if (uri == null) { showScanError(); return; } // 启动预览或调试小程序,第二个参数为小程序启动参数 MPTinyHelper.getInstance().launchIdeQRCode(uri, new Bundle()); }});3. 外围问题解决在同一小程序不同页面跳转传参的时候咱们遇到了大参数传递被截断的问题。 ...

May 21, 2021 · 1 min · jiezi

关于移动应用开发:技术干货-轻松两步完成向-mPaaS-小程序传递启动参数

前言在局部场景下,须要向小程序的默认接管页(pages/index/index)传递参数。 本文将以传递 name 和 pwd 参数为例,别离介绍此场景在 Android 小程序和 iOS 小程序中的实现过程。 前提条件已参照 疾速开始 文档接入了小程序组件。 Android 小程序1.在客户端增加启动时跳转页面的参数信息。如下所示: Bundle param = new Bundle();String query = "name="+Uri.encode("123")+"&pwd="+Uri.encode("456");param.putString("query",query); //设置参数MPNebula.startApp(appId:"2020121620201216",param);URL 启动传参时,传递参数的字段为 query;获取参数时,通过解析 query 字段获取。startApp 参数阐明: appId:小程序的 ID,能够从 mPaaS 控制台查看。param:Bundle 对象,能够向 Bundle 对象传递申请参数,key="query",value="键值对";多个参数两头用(&)隔开。留神1:小程序框架会对每对自定义入参的键值对的 value 进行 uri decode。因而,请对入参键值对的 value 进行 uri encode。留神2:小程序框架不会对自定义入参的键值对的 key 做任何解决。因而,请不要对 key 设置特殊字符,避免小程序侧无奈辨认自定义参数。2.小程序获取参数。从 onLaunch/onShow(options) 办法的参数 options 中获取。 存储 app.js 会获取客户端向小程序传递的参数并保留到全局变量 globalData 中,应用时从 globalData 间接取值或更新值。如申请头里的 token、user_id 等参数,从 Native 传递过去后,保留到 globalData 中,应用时间接取值。 iOS 小程序1.在客户端增加启动时跳转页面的参数信息。如下所示: ...

May 7, 2021 · 1 min · jiezi

关于移动应用开发:技术干货-如何在-Library-中使用依赖-mPaaS

应用场景在应用 mPaaS 框架过程中,有时须要复用模块。复用时须要依照应用 Module 依赖的形式增加模块。本文以将复用 mPaaS 扫码组件的 Module 为例进行阐明。 前提条件已依照原生 AAR 接入形式将工程接入 mPaaS。 操作步骤在 Android 工程中创立 Android Library 类型的模块 “scan”。 在新创建的 scan 模块的 build.gradle 文件中增加 api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline") 。示例如下:dependencies { …… //moudle里应用mPaaS组件性能时,必须增加 api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline") …… }通过 Android Studio mPaaS 插件为 scan 模块装置扫码组件。具体菜单门路为:mPaaS > 原生 AAR 接入 > 配置/更新组件 > 开始配置。装置后,扫码组件组件会主动加载。 配置 App 主工程。plugins { id 'com.android.application' ...... //必须在app下的build.gradle增加baseline.config(基线) id 'com.alipay.apollo.baseline.config'}调用组件模块。在应用扫码组件的中央,导入 scan 模块。dependencies { api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline") .... api project(':scan')//扫码组件}撰文:刘启洋 ...

April 26, 2021 · 1 min · jiezi

关于移动应用开发:mPaaS-月度小报-CodeHub4-在线教育应用的开发实践香港站正式开服上线

本月亮点速览 Easyconfig 辞别白屏期待:客户端从天而降的“白屏”期待应该如何排查?行业资讯: 货运物流数字化降级行业交流会:如何针对货运物流行业,打造性能晦涩、用户沉闷、终端平安的挪动利用?安卓 WebView 致利用间断闪退 mPaaS 动静: CodeHub#4 荷小鱼:在线教育利用的开发实际全新地区——中国(香港)正式开服:助力 App 实现动态化更新与公布扫码组件上架 APICloud、CSDN,立刻 get 支付宝同款Easyconfig白屏期待问题如何排查开发者在接入 mPaaS 容器后,配合挪动公布服务,能够让客户端不便地从本地加载业务包,极大地晋升了利用的加载效率。但在接入过程中一些轻微的谬误,可能会导致离线机制生效,以致利用在网络好的状况下会有一个短暂的“白屏”等待时间,在网络较差的状况下,甚至齐全无奈实现页面的加载。 因为 mPaaS 容器存在 fallback 机制,所以即便“离线”失败,容器也是能够“失常”加载业务包的内容的,开发阶段开发者往往容易疏忽掉“离线”对性能层面的影响。 所以倡议开发者在联调和上线的过程中,对于离线机制的工作状况予以检查和确认,能够通过抓包的伎俩从内部确认没有额定的、非必要的 fallback 申请产生,最终的目标是施展离线包的性能劣势。 理解更多:问题排查 | 客户端从天而降的“白屏”期待 行业资讯货运物流数字化降级行业交流会来自上海大学古代物流钻研核心主任的储雪俭传授示意:“明天探讨智慧物流,相对不是欲速不达的,销售渠道下沉造成物流日益碎片化。面对以后业务碎片化,咱们须要思考的是在业务碎片化的情景下,怎么通过平台做整合,建设你的专业化运维池?” 在整个货运物流行业的经营模型里,挪动端目前对用户来说是不可或缺的力量。如何针对货运物流行业,打造一个性能晦涩、用户沉闷、终端平安的挪动利用呢? 理解更多:货运物流挪动端解决方案:为货运物流行业打造高性能、高粘性的“双端”触点 WebView 致安卓利用间断闪退据外媒 9to5 Google 报道,大量安卓用户突遇利用间断闪退的状况,有用户发现通过卸载安卓零碎 WebView 后能够进行闪退。目前,谷歌曾经公布了利用解体问题的永恒修复:波及更新 Android System WebView 和 Chrome 浏览器 89.0.4389.105 版本升级。 实际上,Android 碎片化问题自其诞生之初业已存在,而且目前看上去并没有好的解决方案。不同零碎、不同厂商中的浏览器内核同样存在差别,导致层出不穷的兼容性问题令泛滥安卓开发同学头疼不已。 为了彻底解决并且掌控这些问题,mPaaS 集成独立的 UC 浏览器内核,同时继承了支付宝深度利用的容器及离线包:围绕 WebView 所产生的任何平安问题,开发者能够通过 mPaaS 能够在第一工夫修复并公布 理解更多:技术干货 | 深度解构 Android 利用面临紧急发版时的救星计划:mPaaS 热修复——DexPatch mPaaS 动静CodeHub#4 回顾:在线教育利用的开发实际作为启蒙教育利用,「荷小鱼」的 App 页面除了须要嵌入根底框架代码和页面逻辑代码外,还须要嵌入多个字体库和多个音视频文件。资源的多而大,导致页面非常容易收到网络的影响:网络不稳固时容易文件失落、白屏加载资源工夫长、造成网络线程阻塞等。 同时,也让 App 更新资源变得艰难了很多:无奈实时更新下发最新资源、缓存生效等。为技术团队在更新版本和调修 Bug 上造成了很大的妨碍。 ...

April 9, 2021 · 1 min · jiezi

关于物流系统:货运物流移动端解决方案为货运物流行业打造高性能高粘性的双端触点

从 2020 年倒退网络货运以来,在互联网和大数据的合作下,传统的物流企业逐步转向信息化模式,在政策的一直推动下,网络货运平台也在逐步走向智慧化,改善了物流业的零散、层级较多的现状,助力物流企业实现规模化、集约化的倒退。 智慧物流,是将来货运物流物流的发展趋势,作为我国国民经济重要组成部分,货运物流行业也将走向数字化时代。 在刚刚闭幕的货运物流数字化降级交流会里,来自上海大学古代物流钻研核心主任的储雪俭传授示意: “明天探讨智慧物流,相对不是欲速不达的,销售渠道下沉造成物流日益碎片化。面对以后业务碎片化,咱们须要思考的是在业务碎片化的情景下,怎么通过平台做整合,建设你的专业化运维池?” 而在整个货运物流行业的经营模型里,挪动端目前对用户来说是不可或缺的力量。如何针对货运物流行业,打造一个性能晦涩、用户沉闷、终端平安的挪动利用呢? 来自蚂蚁团体 mPaaS 的解决方案架构师蒋平,给出了源自支付宝在挪动开发畛域的十年教训积淀。 货运物流行业挪动端现状倒退“双端”是网络货运平台增长的源能源 蒋平认为,在从互联网的思维模式来看,在整个货运物流平台里次要偏差两个端:货主端与车主端,他们造成了一个双轮驱动模型,会独特驱动物流平台的倒退。 双轮驱动的过程中,所以有更多的车主,就象征能够笼罩更多的地区、维度,提供更多车的型号和服务,有更多的货主,就会对货运物流平台产生更多的诉求。 在整个经营模型里,挪动端目前对用户来说是不可或缺的力量。 站在货主和车主的角度来看,他们对APP的诉求十分强烈——对车主来说,须要不停抢单做生意,在物流 App 上取得营收。对货主来说,须要想方法取得更多的存单,而且因为监管的要求,须要做很多相似人脸识别、指纹识别的人机合作要求。 这些要求对 App 的运算能力和网络要求很高,如果没有好的架构体系,很难承载 App 对于当初用户的冀望,并达到他们的业务诉求。 用户对性能的要求:在支付宝、淘宝等各类超级 App 的心智影响下,当初所有用户对手机上的 App 性能都有极高的应用要求,性能不佳的 App,在用户手里很难活到第二次应用。 业务对更新的要求:从阿里的经营体系来看,咱们的 App 市场曾经倒退到了 4.0 甚至更高阶的维度,除了须要从根本维度满足用户的直观体验和信赖要求,让用户顺畅地应用我的 App 之外,互联网时代下的业务场景疾速更迭,也在要求技术研发团队须要随时更新咱们的业务诉求。 平台对经营的要求:对平台型的企业或 App,经营是一个重要需要。App 公布进来当前,好的经营伎俩,会晋升 App 的活跃度,并达到很高的应用效率。 mPaaS 的价值体现为货运物流行业打造高性能、高粘性的“双端”触点 基于各大超级 App 对用户应用体感的造就,每个用户的应用习惯以及对 App 的期望值当初曾经具备肯定的高度了。性能问题也成为了每一个利用须要面临解决的首要难题。在 mPaaS 的既往案例中,无数次地帮忙客户实现一秒启动 App。 其二,为了满足应业务场景疾速更迭而产生的业务实时更新的需要,mPaaS 将支付宝客户端的次要技术方向齐全对外输入:通过动静公布能力,齐全能够实现一个 App 的动静公布/灰度/回滚。 除了 App 的开发与搭建,放弃其生命力的重要因素,便是其经营能力,这也是 mPaaS 具备的外围价值之一:经营流动触达。比方春节期间,App 须要做相干内容投放,投放给谁?在什么工夫投放?投放什么内容?这一系列的问题在 mPaaS 平台里有残缺的技术架构体系进行反对,能够大大不便平台型 App 车主端或货主端业务往来的过程,减少粘稠度。 此外,mPaaS 还能撑持 App 利用小程序生态体系,通过上面三个 App 开发业态,丰盛内容经营,满足平台对生态延长的诉求: ...

April 2, 2021 · 1 min · jiezi

关于移动应用开发:排查指南-当-mPaaS-小程序真机扫码时提示-应用更新错误50002

问题形容APP 扫码 mPaas 小程序弹出 toast 信息:"利用更新谬误(50002)"。 起因剖析通过扫码进行真机调试的失常流程如下: 在小程序 IDE 生成二维码,以供手机客户端扫描,同时会将小程序包上传至 mPaaS 控制台的小程序公布中。手机客户端扫描此二维码后,会被动通过 RPC 申请去拉取控制台中的 AMR 文件。当调用 MDS 小程序更新接口后,若没有获取对应的小程序信息,就会提醒“利用更新谬误(50002)”。这类问题可能的起因包含: 服务端尚未公布,包含:控制台未公布上传的小程序。小程序刚公布,但服务端尚未收到刚公布的小程序。客户端版本不在范畴内。申请信息和服务端公布的规定不匹配。排查思路1. 过滤日志在 Android Studio 控制台的日志信息中过滤关键字 DynamicRelease。查看 UnionResourceInfo 中是否有 Item 信息。 失常状况下,会含有 item 信息,示例如下: 若未蕴含 item 信息,则为异样,示例如下: 2. 查看接入真机预览和调试性能依照Android 小程序接入真机预览与调试中的步骤查看查看接入真机预览和调试是否正确。 3. 查看客户端版本范畴版本号对应 Android 我的项目 versionName 值。只有当最低版本号 < 以后 App 版本号 < 最高版本号时,能力失常的拉取小程序。若不在这个范畴,App 启动小程序时就会拉取失败,报 "利用更新谬误"。 所以举荐在最低版本输出 0.0.0.0,最高版本不填写(示意无限大)。 注意事项 因为在小程序 IDE 上传、预览、真机调试会主动将小程序上传至控制台,无需用户在控制台批改配置信息,所以在创立小程序时,不举荐从小程序公布中增加小程序包,防止出现主门路不统一。如要批改小程序,能够在小程序 IDE 中批改。 4. 查看主入口门路查看 mPaaS 控制台中填写的小程序主入口门路是否与小程序 IDE 中的主入口门路统一。 mPaaS控制台默认主门路格局为:/index.html#xxx/xxx/xxx/xxx,其中 # 前方的 xxx/xxx/xxx/xxx 是小程序的 app.json 中的 pages 中的第一个值。 ...

February 7, 2021 · 1 min · jiezi

关于移动应用开发:CodeDay5-全程回顾一场关于动态化开发实践的技术探讨

时隔一年,很快乐能在 2021 年的第一个月,重启 CodeDay。 在过来的一年中,通过跟支付宝挪动端团队和宽广开发者的交换和沟通,咱们理解到大家在波及到对于挪动利用跨端开发的过程中遇到的一些问题,同时也在思考,咱们能够对外输入那些卓有成效的技术实际计划?开发团队在面临业务高并发需要时,如何对技术模型进行迭代降级? 带着这样的疑难,咱们开展了 4 个方向的议题分享。 ▶ CodeDay#5 全程回顾 01 支付宝在动静公布方向上的摸索和演进 *公众号「mPaaS」回复“动静公布”下载残缺PPT_ 通过近十年的版本迭代,支付宝已由初始的工具性 App,转型降级成为了凋谢的、生态化的超级 App。App 性能也由最后繁多的转账、领取升级成了生存平台,不仅蕴含理财、金融等性能板块,也包容了生存、出行等各种各样的服务板块。 那怎么样让这些业务模块安稳地运行在 App 里呢?动态化开发架构就是咱们在降级摸索上的一个很重要的支点,不仅可能保障业务模块能够即时公布和更新,也能保障整个 App 高质量安稳运行。 02 兼顾包大小/易用性的容器优化之路 *公众号「mPaaS」回复“小程序容器”下载残缺PPT 小程序,是一种依赖 Web 技术,集成了原生能力的,新的挪动应用程序格局。 但因为以后小程序容器仍然存在接入麻烦、依赖抵触、接口不反对以及包体积大等问题,咱们对小程序容器围绕接入优化、性能优化、体验降级等三个方向进行了革新。 公众号「mPaaS」回复“Alpha”申请试用 03 全新的跨端开发实际 *公众号「mPaaS」回复“跨端开发”下载 mPaaS 小程序 IDE 集成在支付宝小程序 IDE 中,继承了其中的能力,并且和 mPaaS 的账号体系深度绑定,能够实现一键真机预览,真机调试,上传公布等能力。并且通过 mPaaS 的插件,能够实现多端开发。 *点击跳转《应用 HBuilder 引入构建 mPaaS 小程序》视频教程 04 小程序体系下,摸索更多可能性 *公众号「mPaaS」回复“U4内核”下载残缺PPT 在各种新技术层出不穷的明天,Web 通过了 30 多年的倒退,除了撑持传统互联网畛域的网页搭建,在挪动互联网畛域也有着十分宽泛的利用,比方小程序、信息流、会场这样的业务场景,咱们都能够看到 Web 技术的身影。 为什么 Web 能有如此弱小的生命力呢? 咱们认为有一点十分重要,就是高度标准化。因为高度标准化,它有着很强的向下兼容性和跨平台兼容性,从而能够十分宽泛地利用,而且经久不衰。然而高度标准化也会带来一个问题,就是新个性的落地十分迟缓,一个个性从提出到造成规范,到最终在浏览器中落地,须要通过多年的工夫,对于开发者来说,理解浏览器内核的停顿更有实际意义。

February 1, 2021 · 1 min · jiezi

关于移动应用开发:技术干货-mPaaS-客户端问题排查漫长的-3s-等待之谜

面对日益简单的技术世界,App 在开发、上线和运维阶段所遭逢的问题也越来越多。这些不拘一格的问题可能来自整个链路的任意环节,而不仅仅是代码层面。 对于开发者来说,排查伎俩曾经不再局限于构建代码过程中的调试,往往须要裁减排查办法,从多种路径对问题进行剖析和定位。这篇文章会和大家分享 mPaaS 开发者的一例小程序网络性能问题排查之旅。 问题背景“笑联科技”反馈基于 mPaaS 开发的 App 中,其集成的小程序拜访客户自建的 Web API 存在连贯慢的性能问题。问题复现视频如下: ▶播放问题复现视频 从问题复现的状况看,关上小程序后,页面数据的加载有一个“漫长”的期待过程。 和开发者沟通后理解到,页面初始化所必须的局部数据是通过自有的 Web API 获取到的,数据返回慢会导致页面加载的期待。另外开发者也提到,这个问题存在地域性和偶发性,既局部地区的局部用户在一段时间内会被这个问题重大困扰。 问题剖析与排查如前文所述,数据是通过 Web API 获取的,天然咱们心愿通过内部伎俩去确认这个 Web API 自身是否存在性能问题。 然而,通过浏览器或 Postman 等工具去拜访该 Web API ,均无奈复现问题,后端的响应都是毫秒级。然而因为开发者提到该问题存在地域性和偶发性,因而无奈间接排除局部起因。 因为咱们并不是 App 的间接开发者,对于这类问题,一种惯例的伎俩是抓取 HTTP 报文来察看和了解 App 背地的行为特色。比拟侥幸的是,咱们的测试用 iOS 手机能够复现问题,通过 Charles 抓取 App 报文,咱们有如下发现: Web API 的地址为:https://api.xiaolianhb.com/; 当 Charles 开启 SSL Decryption 时(中间人解密 HTTPS Body 模式),问题无奈复现。 当 Charles 敞开 SSL Decryption 时,问题能够复现,数据加载显著存在一个 3s 的期待状况。 上述景象 2 和 3 强烈暗示问题可能和 HTTPS/SSL 协定层面相干(开启 SSL Decryption 时,HTTPS 连贯由 Mac 笔记本和服务器进行;敞开 SSL Decryption 时,HTTPS 连贯由 iPhone 和服务器进行)。 ...

January 14, 2021 · 1 min · jiezi

关于移动应用开发:江苏民丰-x-mPaaS-县域小银行技术团队就12人却找到了数字化转型的秘籍

想参加将来竞争,中小银行积极参与数字化转型曾经成为必选项。金融数字化转型的大潮中,配角不只是国有大行,中小银行也踊跃沉闷在舞台上。 总部位于江苏省宿迁市的民丰农村商业银行就是其中的一家。这家前身为当地农村信用社的农商行,总资产400多亿元,依附一只规模仅有12 人的开发团队,通过应用云平台上的数字技术,单月投资仅仅1万元左右,就疾速实现了业务数字化、线上化发展,为银行业绩的稳固快速增长做出了重要奉献。 以往,相似民丰农商银行这样的很多中央中小银行经营作业模式扩散、手工化程度较高,营销获客以实地访问、网点地推等形式为主。但新冠疫情暴发以来,“非接触式”金融服务需要和数字化经营要求指数级增长,中央中小银行在晋升数字化能力方面显得尤为迫切。 中小银行大都意识到要进行改革,要进行数字化转型,但在资本投入无限、人才不足、科技实力有余等刚性约束条件下,这条转型之路到底该怎么走?绝大多数机构并没有清晰的答案。 作为一家扎根苏北的地方性法人金融机构,民丰农村商业银行也曾面临上述种种艰难,但通过一场始于2016年的改革,逐步摸索出了一条有特色的普惠金融倒退及数字化转型门路。这条路对于亟需改革的中小银行,尤其扎根县域经营的小银行而言,或者可能带来一点启发。 普惠金融的“民丰模式”提到江苏,很多人脑海里都会浮现出很多美妙粗劣的画面——小桥流水的农村,波光帆影的太湖,笔直流淌的古运河,粉墙黛瓦的古镇……但这些画面实际上绝大多数跟商贸发达的苏南地区相干。 因为江苏省区域经济倒退不均衡,人们常说“苏南富,苏北穷”。宿迁市,就位于苏北,地处鲁南丘陵与苏北平原之间,古称“钟吾”,是西楚霸王项羽的故里。当初人们晓得这座城市,更多是因为守业胜利的刘强东。依照当初划分城市级别的办法,宿迁属于三线或者四线城市。 宿迁市是典型的农业大市,也是江苏省的产粮大区,这决定了扎根当地的民丰农村商业银行服务的对象是数量大、贷款金额小的农户,是反对‘三农’的真正主力军。 2016年7月,从沭阳农商行调任民丰农商行并负责董事长的许尔波,甫一上任就开始了一场对传统信贷服务管理模式的改革,实现信贷“三台六岗”全面拆散,从机制建设上解决过来信贷业务中倒退与危险的矛盾问题。 传统信贷发展模式之下,信贷人员履行“包放、包收、包管”的一生责任制。简略来说,就是对客户的贷款一竿子插到底。 农村熟人模式之下,这种模式的确施展效用,然而这一模式带来的弊病在于,银行信贷人员与大量扩散客户之间数量上的不匹配以及随之造成的信息不对称,造成银行服务被动、效率低下,并且容易引发暗箱操作危险。 民丰农村商业银行的改革从改善岗位职能和流程下手,提出“三台六岗”模式。 具体的做法是,在传统信贷流程的“大三台”框架内打造“小三台”,行将营销与考察作为“小前台”、审批与签约作为“小中台”、管户与催收作为“小后盾”,六大岗位各司其职、高效合作、互相制衡,履行专职化、流水化、标准化作业流程,确保“业余的人做业余的事”。 “三台六岗”模式的施行,激活了民丰农商行团队的生机,成效显著。推广四年来,全行累计受理授信申请13万笔,均匀授信时长仅1.2天,审批效率较改革前晋升了3倍多;以后信贷客户总数已冲破8万户,贷款余额超230亿元,别离较改革初减少了2.5万户、87亿元,年增长率超过10%。 这种成功经验起初被业内成为“民丰模式”,全国数十家农商行前来学习交流经验。民丰农商行也没有藏着掖着,将成功经验全数分享。 在民丰农商行创始这一模式的许尔波看来,这一模式“齐全能够”在其余地区和农信金融机构推广和复制。不过,他加了一个很重要的前提:“这家银行的高管尤其是董事长,须要在策略定位上有弱小的定力,在执行和贯彻过程中有足够的气魄。” 率先启动业务线上化复盘“三台六岗”模式可能顺利推广,民丰农商行针对笼罩宿迁农村地区的授信工程能够说十分重要。早在2009年,民丰农商行即启动农户贷款集中授信流动,并最终实现了对辖区内近26万个农户家庭总额超过150亿元的授信。 全区域笼罩的授信之后,客户经理不须要一家家挨门挨户去授信、放贷,不仅较好地管制了信用风险和操作危险,也把他们从繁冗的管护压力中解放出来,市场营销拓展力量失去了极大的开释,无效地解决了危险和效率之间的固有矛盾。 当然在这背地,科技力量的撑持作用也不得不提。2016年年底,在民丰农商行针对信贷业务进行流程再塑的同时,一场推动业务线上化的改革也在紧锣密鼓地策划。 “全行启动三台六岗模式之后,咱们科技部过后就想,能施展什么作用?”作为民丰农商行研发经理的汪晓涛回顾过后的状况说,“过后民丰农商行的授信客户达到60多万,然而真正应用过信贷额度的客户约为40%左右,咱们始终在思考如何撬动剩下的60%客户。” 2016年底,中国银行业的数字化转型还没有像明天这般深刻,过后即便是江苏省内的一些大银行,在挪动端上的发力也才刚刚开始。但民丰农商行科技部联结销售部将信贷业务线上化的想法汇报下来没多久,就失去了行里高层十分踊跃的回复——可行。 说干就干。通过紧急调研、立项、招投标等流程之后,民丰农商银行找来的科技外包公司在2017年6月开发进去了一款只有线上信贷性能的App——“宿速e”。汪晓涛说,因为宿迁本地区同业外面也没有相似的线上信贷产品,再加上有很大的利率优惠,过后用户增长以及信贷申请量都很大。 背地起因也很简略,业务线上化,给贷款客户以及行里的营销经理带来了极大便当。 宿迁是苏北劳动力输入大市,农村大量青壮年外出务工。在没有推动业务线上化之前,在外务工的人如果须要申请贷款,须要跑回来,到银行柜台提交资料,还要找一两位担保人,当初手机上下载App,依靠数据智能剖析技术,用户实现注册认证之后,能够线上申请、即时签约、实时放款,全流程仅需5分钟。而以前,客户经理筹备这一套根底资料起码就须要30多分钟以上。 不用说,民丰农商行“宿速e”App藉此在省内银行零碎内一炮而红。 云上自主翻新周边兄弟银行反馈也很快,也开踊跃下马手机银行App,推动业务线上化。“给咱们提供服务的外包公司一下接到了6-7个开发App的需要,这家公司人力无限,看到咱们的零碎稳固之后,提出了撤场。” 外包公司撤场,但“宿速e”产品必定还要持续优化和裁减性能,这给没有前端App开发教训的汪晓涛出了一个大难题。“我作为整个我的项目负责人,外包公司离场之后,最关怀的是该如何保障产品的连续,然而咱们人员又十分无限。” 忽然之间,这个发展势头很好的App一下变成了有点烫手的山芋。过后,“宿速e”仅仅投放在Android端,依照布局还要开发iOS版.“咱们在挪动开发端比拟弱,只靠一个人忙不过来,如果要在每端配置两个人,人手又不够。” 汪晓涛说。 技术力量薄弱、人手短缺,这是中小型银行宽泛存在的困境,民丰农商行也不例外。尽管该行通过科技外包公司推动业务翻新,但少数状况下,外包公司其实很难精确了解银行的想法,导致后续开发出的产品不能满足银行须要。 简而言之,外包科技的模式尽管有利于管制老本,然而效率低,有时候还会贻误好的市场时机。 正是在这样的压力下, 民丰农行商银行遇到了在阿里云上刚刚对外商业化的mPaaS挪动利用开发套件。mPaaS套件是一套成熟的金融级挪动端开发解决方案,撑持了国民级App利用12306,可能一次开发多端投放,帮忙金融机构疾速搭建稳固高质量的挪动利用,将更多业务承载在挪动端。 作为阿里云新金融的主打技术产品之一,mPaaS已服务中国农业银行、广发银行,华夏银行,西安银行、南京银行、广东农信、国寿保险等多家金融机构,大幅度晋升了客户的活跃度和日均交易量。 “在阿里云下面看到这款产品之后,我对产品性能和介绍文档进行了深刻理解,很合乎咱们的状况。”汪晓涛说,再加上mPaaS产品技术团队专门到宿迁进行培训,并在钉钉上随时帮咱们解决问题,咱们本人的工程师尽管此前没有挪动端利用的开发教训,然而通过学习,很快就上手了,写很少代码甚至不写代码,通过利落拽相应的功能模块就能开发挪动利用。 2018 年初,刚从 12306 我的项目抽出身来的阿里云mPaaS工程师唐天,高铁之后再打车,辗转来到宿迁。摆在他背后的问题,是须要帮忙民丰农商行疾速解决技术力量薄弱、人手短缺与架构重构对立之间找到均衡。 唐天必须一头扎进我的项目中,帮忙民丰团队批改代码,定位问题,上手精简优化代码。当初回顾起来,唐天感叹道“客户的好学水平让人诧异,mPaaS 在后续迭代推出的新能力,他们简直都是第一工夫做了试用。” 在 mPaaS 产品技术团队的加持下,民丰农商银行得以在 2018 年底彻底重构 App,由此而来的是更晦涩的端上体验和极低的闪退率。第二年,还用时下风行的“小程序”构建了一系列生态,从付款码、扫码领取性能,到生存缴费、淘票票、天猫优选等新场景性能,通过本人独立经营就实现了挪动端App的获客和活客。  往年疫情期间,因为银行网点管控,民丰农商行的线下贷款比同期降落了十分多,而得益于业务很早就进行线上化部署,线上贷款业务反而逆势增长,达到4亿多元。 民丰农商行新发动成立的9家村镇银行因为没有及时推动业务线上化,“疫情期间贷款根本没有什么量。”得悉这样的状况,汪晓涛率领科技团队仅用1个多月,就帮忙他们开发出了线上贷款入口。 当初,挪动端App开始承当更多业务。以“宿速e”手机App贷款服务平台为载体,民丰农商行先后推出了“农e贷”“融e贷”“商e贷”“快e贷”等多种线上信用贷款种类。依照民丰农商行的布局,往年银行会有约40%的贷款业务会承载在挪动端,而在将来,这个比例会进一步增长。 而撑持这样的问题,背地的开发和运维团队至今也不过12集体,而且一年投入在阿里云mPaaS私有云上的费用也只有十几万元,单月均匀投入仅仅1万多元。 作为银行业少见的mPaaS私有云客户,汪晓涛非常渴望把这个套件举荐给江苏省农村信用社联合社,构建一套全省对立的专有云。他好几次前去游说省联社分管手机银行业务的领导,游说格调上也十分间接:你看,咱们只用这么些人,做成了这么多事! 数字化转型的样本意义从金融服务广度和深度来看,民丰农商行这样的银行是县域金融服务的主力队伍,在服务县域经济倒退、金融支农支小中作出了重大贡献。银保监会主席郭树清日前强调,县域金融是我国金融体系的重要组成部分,只能增强不能减弱。 然而要想参加将来竞争,中小银行积极参与数字化转型曾经成为必选项。然而一个残暴的事实摆在面前,相比城商行、股份行、大行等同业,它们数字化上曾经大大落后,局势十分严厉。 2020年10月,中国互联网金融协会进行的专项调研显示,在数字化转型方面,相较于大中型银行和新型互联网银行,中央中小银行总体处于初步摸索阶段。被调研中央中小银行数字化能力自评估均匀得分为2.75分(满分为5分),与大中型银行(3.41分)和新型互联网银行(3.87分)相比存在较大差距。 事实上,最近一年来有很多同类农商行到访民丰农商银行,进行学习。而民丰农商行也总是不厌其烦地分享在阿里云上翻新的实际和教训。有两家心动的兄弟银行间接把App开发的工作甚至间接交给了他们。 汪晓涛还在竭力游说江苏省级农信联社的领导,心愿江苏省内中央农信社可能对立应用一个技术平台,省内50多家农信社只须要把本身业务以小程序的模式投放在这个大平台之上,即可实现数字化转型,独特抱团参加强烈的市场竞争。“省联社也想换技术架构,咱们也始终想推动他们换。”汪晓涛笑称,“这是我短期内最大的指标。”  去年年底,民丰农商行曾思考联结阿里云一起搞一场中小银行数字化转型的论坛,向全国区域性的中小银行,介绍在云上做数字化转型教训,但因为疫情忽然暴发,打算搁浅了。 “咱们这种模式是完完全全能够复制的。” 汪晓涛说,复制胜利的要害,顶层要看一把手的气魄,上面就要看团队是不是有志愿,想做事件。他还认为,中小银行在做数字化转型上要有长远规划,找到一个能够撑持业务倒退的优良技术平台。“从零开始造轮子,并不合乎中小银行需要疾速迭代的要求。” 明天,小银行所处的环境相较几年前曾经有了彻底的扭转,经济增长大幅放缓,息差在进一步放大,另有大中型银行通过数字伎俩一直下沉,进一步争取区域内的客户……数字化能力“不及格”的县域小银行要怎样才能解围,持续连续所在区域的领先地位,民丰农行商银行的模式可能是一条不错的学习门路。 ...

January 4, 2021 · 1 min · jiezi

关于移动应用开发:排查指南-关于-mPaaSiOS-小程序打不开问题的解决方案

在咱们集成 mPaaS 插件并应用小程序的过程中,很多开发者遇到了打不开小程序的问题。明天就举例说明,开发者在实现根本接入后,尝试关上 H5 利用,但容器页面显示谬误提醒“设置标签”时,应该如何解决。 常见起因mPaaS 框架在关上一个H5利用前,首先须要获知该利用离线包的根本信息。 因而客户端会被动通过RPC接口alipay.client.getUnionResource去拉取离线包信息。如果离线包信息获取失败,或没有命中要关上的指标利用,容器会提醒谬误 “零碎忙碌,请稍后再试”。 针对这类问题,排查方向包含:查看 RPC 申请是否失常、查看环境和离线包公布是否匹配等。 问题排查步骤(一)查看 RPC 申请是否失常客户端须要被动拉取离线包信息,而拉取过程依赖 RPC 申请,如果RPC 链路存在问题,则无奈失常获取离线包信息,导致加载失败。要确认 RPC 申请是否存在问题,须要在 Xcode 控制台中搜寻 alipay.client.getUnionResource 察看 RPC 申请是否失常返回。如果存在谬误,个别的错误代码包含 7XXX 或 3XXX 系列等,例如: 失常返回样例(result-status 为 1000):1. Demo[83767:2555863] [mPaaSLog] APMobileNetwork alipay.client.getUnionResource resp:{ 2. "Content-Encoding" = gzip; 3. "Content-Type" = "text/plain;charset=UTF-8"; 4. Date = "Tue, 11 Aug 2020 05:01:37 GMT"; 5. Vary = "Accept-Encoding"; 6. "mgw-traceid" = 0a1cfd401597122097726853822435; 7. "result-status" = 1000; 8. "server-time" = 1597122097739; 9. } 谬误返回样例(result-status 不为 1000):1. Demo[83383:2546279] [mPaaSLog] APMobileNetwork alipay.client.getUnionResource resp:{ 2. "Content-Length" = 0; 3. "Content-Type" = "text/plain;charset=UTF-8"; 4. Date = "Tue, 11 Aug 2020 04:50:08 GMT"; 5. memo = "%E9%AA%8C%E7%AD%BERPC%E6%8E%A5%E5%8F%A3%20%E5%8A%A0%E7%AD%BE%E6%95%B0%E6%8D%AE%E4%B8%BA%E7%A9%BA"; 6. "mgw-traceid" = 0a1d7667159712140890222728553; 7. "result-status" = 7014; 8. "server-time" = 1597121408902; 9. tips = "%E9%AA%8C%E7%AD%BERPC%E6%8E%A5%E5%8F%A3%20%E5%8A%A0%E7%AD%BE%E6%95%B0%E6%8D%AE%E4%B8%BA%E7%A9%BA"; 10. }RPC 7XXX 系列谬误的解决办法7XXX 类谬误均与 RPC 申请的签名验证过程无关,常见错误代码及起因如下: ...

December 14, 2020 · 2 min · jiezi