跨平台应用开发进阶(六十一):uni-app 跨平台技术开发框架可行性调研

一、流程类

  1. IOS和安卓企业开发者账户申请流程(申请渠道、需要提供的相关证明、审核时间等)。

答:uni-app使用HBuliderX作为开发IDE,支持邮箱、密码方式注册,方便快捷。

  1. uni-app企业开发者账户申请流程。

答:不涉及

  1. 安卓和IOS发布上线流程(怎么发布主流应用商店)。

答:运维相关同事负责。

  1. 如果出现紧急情况代码是如何回滚的?

答:源码管理采用Git,使用Git命令行方式(git revert)实现代码回滚。

  1. 发布流程都有哪些规范要注意,大部分审核失败的原因是什么?

答:APP上架前,需熟知待上架应用市场安全合规准则, 目前中金火炬APP已上架华为、应用宝、APP Store应用市场。其中过渡索权(确保只保留应用需要的权限,否则会需要举证)、第三方SDK引入导致的其他问题(例如引入极光推送应用频繁自启动问题)、隐私政策提示前已索权、iOS中权限索取未添加描述信息、iOS要提交的审核资料图片等信息与实际提交的APP截图相一致、代码反编译风险、资源文件泄露风险等,提交上架申请后,相关平台会出具检测报告,详情可参考安全合规检测报告。

考虑到苹果审核员工作场所可能在国外(美国加利福尼亚州、爱尔兰科克),也有可能在上海,可通过访问IP得知审核员所在国家,国外的话,由于服务器测的安全策略,导致境外IP无法访问或出现访问延迟、抖动问题。故考虑采取增大请求响应等待时间及域名/IP网络测试。可通过设置配置文件实现: "networkTimeout" : { "request" : 120000 // 设置请求超时时间为2min },

二、研发类(uni-app框架)

  1. App和Webview H5是如何交互的,有无现成的基础库如 JSBridge?

答:uni-app APP若存在页面嵌套,可使用web-view实现,并引用uni.webview.1.5.4.js SDK实现了双端通信。也可通过 window.postMessage 实现双端通信,详参博文《跨平台应用开发进阶(十七) :uni-app 内嵌 H5 应用并实现双端通信》 示例代码如下: currentWebview.evalJS(${_funName}(${JSON.stringify(_data)})); window.msgFromUniapp= function(arg) { console.log('<<<<<<<<<<<<>>>>>>>>>>:', arg); console.log('<<<<<<<<<<<<<JSON.stringify(arg)>>>>>>>>>>>:', JSON.stringify(arg)); } // 向应用发送消息 uni.postMessage({ data: { order: 'playRecord' } }); APP 通过 @message接收 message(arg) { console.log('-------------------message-------------------:', JSON.stringify(arg)) this.sendMsgToWebview(); },

  1. 是否有现成的基础工具方法,比如提升开发效率、调试工具库等?

答:H5中可引入vconsole进行问题定位。 DCloud有丰富的插件市场,包括官方与个人,付费与收费插件,根据项目所需进行引用。

  1. VDI开发IOS代码,如何调试?

答:代码同步至本地真机调试,或使用虚拟机。

  1. 引入SDK需要支持全平台吗?还是指定各端?(比如H5端的神策sdk被小程序包裹再被app包裹的场景)

答:视SDK提供方是否支持全平台,若H5端的神策sdk被小程序包裹再被app包裹,应用间属于跳转关联关系,只要集成H5端的神策sdk。

  1. App是否可以跳转微信小程序指定页面,跳到小程序之后是否有方式返回?

答:未进行技术预研。

  1. uniApp调优配置方案、比如编译速度、打包资源有些控制等?

答:uni-app

  1. uni-app是否支持不发版审核更新?

答:支持,使用 uni-app 开发跨终端应用,可将代码编译到iOS、Android、微信小程序等多个平台,升级时也需考虑多平台同步升级。其中,uni-app发布为小程序的升级模式较简单,只需将开发完的代码提交小程序后台,待审核通过后用户将自动升级。uni-app支持wgt 资源升级包升级,不支持资源升级包情况如下:

  • SDK 部分有调整,比如新增了 Maps 模块等,不可通过此方式升级,必须通过整包的方式升级。
  • 原生插件的增改,同样不能使用此方式。
  • 对于老的非自定义组件编译模式,这种模式已经被淘汰下线。但以防万一也需要说明下,老的非自定义组件编译模式,如果之前工程没有 nvue 文件,但更新中新增了 nvue 文件,不能使用此方式。因为非自定义组件编译模式如果没有nvue文件是不会打包weex引擎进去的,原生引擎无法动态添加。自定义组件模式默认就含着weex引擎,不管工程下有没有nvue文件。
  • ⚠️安装 wgt 资源包成功后,必须执行 plus.runtime.restart(),否则新的内容并不会生效。
  • 如果App的原生引擎不升级,只升级wgt包时,需要注意测试wgt资源和原生基座的兼容性⚠️。平台默认会对不匹配的版本进行提醒,如果自测没问题,可以在manifest.json中配置忽略提示。
  • ⚠️应用市场为了防止开发者不经市场审核许可,给用户提供违法内容,对热更新大多持排斥态度。
  • 🙅‍♂️上架审核期间不要弹出热更新提示;
  • ⚠️热更新内容使用https下载,避免被三方网络劫持;
  • 🙅不要更新违法内容、不要通过热更新破坏应用市场的利益,比如iOS的虚拟支付要老老实实给Apple分钱。 详参博文《跨平台应用开发进阶(三): uni-app 实现资源在线升级/热更新
  1. los打包发布流程

答:运用uni-app IDE HBuilderX自带的云打包功能实现打包。

  1. 微信授权App登录需要申请哪些资质?

答:需要注册微信开发者账号。详参微信开发者账号申请详情。

  1. 有没有好的ui框架推荐?

答:APP使用uni-app自带的UI框架已经能够覆盖基本的样式需求,其他UI框架可选择 Vant UIuViewNut UIMint UI等。考虑到UI库整体体积比较大,为减少APP安装包大小,UI库引入时建议按需引入。

  1. WebViewH5页面是如何跳转uni-app指定页面的?

答:uni-app 通过URLScheme方式唤醒APP 。 window.location = installUrl + ?urlpa=${this.urlpa} :urlpa="'t' + encodeURIComponent(JSON.stringify(urlData))" 详参博文《跨平台应用开发进阶(十六) :uni-app实现URLScheme方式唤醒APP

  1. H5需要引入uniapp的sdk吗?比如跳转app的指定页面并携带参数?

答:不需要

  1. uniapp有集成登录功能插件可以使用吗?有什么坑?

答: DCloud前端团队在插件市场提供有云端一体登录模板,需要调用其云函数,不建议使用,建议自己实现。

  1. 在uniapp插件市场引入插件想修改插件的内容如何修改?

答:取决于插件是否支持源码查看,大部分插件是不支持源码查看的,只支持使用,不支持个性化修改。

  1. uniapp uni_modules需要每次都重新下载吗?如果本地修改了需要怎样维护?

答:uni_modules依赖包不需要每次都重新下载。如果本地修改了建议推送至远程仓库进行管理维护。

  1. 安卓打包需要自己申请私有证书吗?私有证书和云端证书的区别?

答:安卓测试的话,私有证书可以自己通过工具生成,云端证书也是通过云服务器工具生成。上架证书需要在组上架包时提供,用于标识APP ID。

三、心得分享(研发踩坑&uni-app踩坑)

  1. uni-app框架开发的一些限制,比如哪些效果可能实现不了,是否有其它的解决方案?

答:uni-app采用Vue作为底层技术栈,为考虑平台兼容性,有些功能本身是H5不支持的,例如APP视频播放的小窗播放功能,需应用原生开发技术栈实现,也可通过插件市场插件实现,不过考虑到插件市场有大部分为个人开发者,插件功能测试充分性未知,插件质量不好保证。

  1. 一些开发的坑、兼容问题

答:APP开发需要做到系统、机型、版本的兼容性,布局方面采用Flex弹性布局,减少样式属性值常量设置,同时需要考虑iOS刘海屏。

  1. 把APP分一个小程序版本,大概需要多长时间?工作量大致多少?

答:考虑到APP与小程序在组件和API、样式、事件绑定、数据绑定、路由实现方面的差异性,将APP现有功能搬到小程序,工作量大致为APP的80%。将APP现有功能搬到PC Web,工作量大致为APP的65%。

  1. 2套APP安装,生产、验收APP,需生成2套证书。包名、签名验证APP唯一性。
  2. 不要频繁已上架申请,APP Store会怀疑恶意测试,封号

四、拓展阅读

相关推荐
加班是不可能的,除非双倍日工资2 小时前
css预编译器实现星空背景图
前端·css·vue3
wyiyiyi2 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip3 小时前
vite和webpack打包结构控制
前端·javascript
excel3 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国3 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼3 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin
Jimmy3 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
ZXT4 小时前
promise & async await总结
前端
Jerry说前后端4 小时前
RecyclerView 性能优化:从原理到实践的深度优化方案
android·前端·性能优化
画个太阳作晴天4 小时前
A12预装app
linux·服务器·前端