此篇接上一篇:

移动端H5混合开发,Touch触控,拖拽,长按, 滑屏 实现方案
https://www.cnblogs.com/buoge/p/9346699.html

app 场布设置已经上线了,用户可以通过手机端嵌入的h5网页进行场布设置,原来只能在pc端浏览器,还得带上个笔记本电脑很是不方便,这个功能很好的解决了目前设置不顺畅的问题。上线后得到大家的认可,提升了业务效率,这一个多月的辛苦开发还是值得的,接下来是对自己这一段时间开发过程的一个总结。

整体开发基于H5+Css3+Jquery,前端这个组合略显过时,不过我就这个用的熟悉,先做完再说

前后端开发混合开发

功能前端和后端是一起开发的,好处是自己灵活定制不需要沟通成本,但是缺点也有前后端切换需要切换大脑思维的上下文,一会再写JS一会回去写Java不利于思维发挥和深入思考

后端开发过程中还好有现成的方法可以调用,所以并没有耗费太多时间,大部分时间在前端开发上,假如后端也要做那才真是入水两腿泥

总结:后续在有类似开发,不要大包大榄,专注一端去做,这样高效省心,专注前端和专注后台分工开发速度快了,效率高了,遇到难题有时间和情景去深入思考,所以尽可能把任务分开下

android iOS 与h5 互相调用的问题

H5调用相机图片方向有问题:拍照是竖屏,展示成横屏,上传上去展示也是横屏
这两个帖子讲的很清楚,我就不展开了,思路就是利用 exif.js 判断方向,然后用CanvasApi从新生成base64
格式的图片

  • H5拍照应用开发经历的那些坑儿
    http://www.yuuuuc.me/problems-with-html5-file-api-while-uploading-images/

  • 利用exif.js解决ios手机上传竖拍照片旋转90度问题
    https://blog.csdn.net/linlzk/article/details/48652635

源码放在了这里:
https://github.com/buoge/gist/blob/master/FrontEnd/FixH5Oritention.html

相册调用去摄像头,图片大小限制

  • Android 有api去除摄像头相机拍照的选项

  • iOS 没法直接去除,只能通过环境判断,动态触发自定义函数,直接跳转到相册,选择完成后返回base64数据
    客户端直接使用base64类型的数据判断文件大小,展示,最终上传到服务端也是base64方式的

        // 前端    function selectDeviceImg(){console.log('selectDeviceImg');if (window.webkit) { // iOSwindow.webkit.messageHandlers.Photo.postMessage(null);} else { // Android and others$("#file_head").trigger("click");}}// 服务端是这样子的@ResponseBody@RequestMapping(value = "/upload", method = RequestMethod.POST)public Result uploadImage(@RequestParam(required = true) String imageBase64,@RequestParam(required = true) String projectId) {...}

h5与native交互方式

  • Android 通过WebView对象自定义的AndroidObjec注入到页面,页面调用AndroidObjec
  • iOS 实现机制类似,也是在UIWebView里面创建了一个对象,页面上直接给这个对象发送消息
  // 假如在iOS中 if (window.webkit) {// iOS post message 的方式window.webkit.messageHandlers.Signature.postMessage(null);} else if (typeof AndroidJSObj != "undefined") { // AndroidObjec 方式  AndroidJSObj.getSignature();}   
  • URL拦截的实现思路:Android和iOS的webview都在监听url的调转事件,拦截到后,不做跳转,
    直接执行本地的逻辑,在实现语音播放的时候用到这个技巧,这个技巧本来是做页面跳转时使用的,
    客户端拦截到url跳转到对应的 Controller或是Activity,如果是浏览器h5直接跳转到对应的html页面

  • 另外一种WebViewJavascriptBridge的库: https://github.com/marcuswestin/WebViewJavascriptBridge 1万多个start经过实战考研,后续项目中可以使用这个提升效率

浏览器返回问题:history

页面中有一个功能就是上传图片,这个功能会覆盖现有页面的背景,上传页面是一个html,完事后直接location.href跳转到了另一个,现在整个页面嵌入在app里面有返回按钮,但现在不想让页面返回到上传页面,
试了 location.replace 也不管用,这个方法在移动端不好用,而且还存在另一个问题就是在iOS需要点击两次返回按钮才能退出webview。

这个功能上也调试了好久,最后也是让客户端处理了,监听页面返回在指定页面点击返回键直接推出

总结:嵌套h5的时候尽量使用单页面的布局方式,方便管理,或是用react,vue这种都有对应的路由插件,这里也暴露了前端技能二把刀,遇到这种叼酸的bug就搞不定

屏幕像素与真实像素转换

之前一个帖子写过,背景是充满屏幕的,场布上是有点位的,长按可以添加点位,点位的定位算法就比较重要:

核心就是:计算点位在原始图片的left,top位置,在不同分辨率上等比展示

设备分辨率: 300600
图片分辨率: 600
1200

点在屏幕上的位置是(left,top):(30,60)
对应到图片上原始像素就是(left,top):(60,120)

在另外一个设备分辨率是: 200*400的话
图片上原始像素:(60,120),存在数据库,前端展示会返回
在此设备上对应的位置就是:(20,40)

我这里为了方便演绎参数值经过调整,大概意思就是这样

网络异常的处理,loading...,成功失败

所有Ajax请求刚开始的时候没有使用一个统一的异常处理,请求开始加loading...,出错或网络异常,取消loading,提示业务异常或网络异常,这块应该提早规划,再有类似需求一定注意

网页认证授权的问题

ajax api 的认证方式是目前考虑到3种:

  • 自己按照一定规则md5计算出来的,根据时间戳算一个不可逆的签名,客户端算好,调用h5传给页面,发送ajax时放在header里面(目前是这种)

  • 我之前实现过一种思路是使用md5和base64一起算好之后放在cookie里面,页面发送的时候带上cookie,计算过程任然在客户端,客户端计算完成调用h5的js函数,然后在发起ajax请求,由服务器验证,验证通过返回json

  • OAuth2 标准不解释了,这个服务暂时还没有自己搭建过倒是用过别人的,后续也会单独学习这块把这个技能点补充上来

关于移动前端开发效率

Jquery 为主的开发方式还可以在优化
Jquery 效率比起 mvvm 的vue,react 代码效率要低,但是比较简单,目前代码已经接近2000行功能再要叠加肯定是要混乱起来,改不好改,修不好修,除了我每人敢动

css3 与前端工程实践的积累不足
在浏览器返回,手机相册选取,样式兼容性展示显示出很多力不从心的感觉,只能是大家一起协作解决,或是workaround 用曲线救国的方式实现,这块其实没办法,主力没有在前端,只能遇到问题多总结,多去实践才行

移动端触控库选择

  • hammer.js 做手势交互和点击,长按的操作简直太棒,这个库1024!
  • 其实回过头来讲,js开发库不该用jquery应该用 zepto.js,它本身是为移动端而生,jquery 在移动端点击事件处理有很多问题,好些时候不能响应,只能用touchstart,touchend来触发,但是使用touch事件会发生很多误操作和无触碰,体验不是很好

UI 框架和样式库的选择

前面说过css不是很溜,不希望自己花时间在前端样式上,所以寻找一个合适的UI库是尤为重要的,这里我选择的是mui https://github.com/dcloudio/mui/
Bootstrap4 一些基础样式
iconfont 免费的icon

** 模态弹层layui **
使用的 layer.js的移动版非常好用,解决了移动端模态弹层的问题,推荐大家使用:
https://layer.layui.com/mobile/

tmpl
前端模板老组件了,虽然比起mvvm逊色不少,好在够用

滚动穿透

  • 这里有一些详细的解释,其实在模态弹窗那里也没有解决滑动穿透的问题
    https://uedsky.com/2016-06/mobile-modal-scroll/

** 点击300毫秒延迟问题 **
在iOS端尤为强烈,这里放两个链接解释下,缘由,解决方案很多自行搜索

* 为啥会有300毫秒延迟?https://thx.github.io/mobile/300ms-click-delayhttps://stackoverflow.com/questions/12238587/eliminate-300ms-delay-on-click-events-in-mobile-safari

动态播放音频的问题

H5页面动态播放音频,在iOS一直没有弄好,可能是页面动态添加音视频的缘故,动态播放一直有问题,从测试结果来看是我们自己的音频文件服务器不稳定导致的,无法动态预览mp3语音文件,只能通过调用原生app的方法播放声音

  • 但音频播放问题
    https://www.ibm.com/developerworks/cn/web/wa-ioshtml5/index.html

  • 下面是几个播放音频比较好的库
    https://github.com/goldfire/howler.js#examples
    https://github.com/mediaelement/mediaelement
    https://github.com/CreateJS/SoundJS

上线时间点

本来说是8月15号上线,延期到8月底上线,但是由于我弄了两天发布脚本,研究了一天的部署环境,没有尽早提测,但是感觉主要是没有沟通到位,我从其他处得知这次功能要在月底一次发版,我就没在意,没有继续推进这个事,又在打磨一些细节,一个是调试音视频播放,一个是调试window.hostory接口尝试解决页面返回的问题,最后没解决和客户端协商解决,因此耽误了时间,下次在商谈好时间节点后要尽量按照时间节点来进行活动安排,时间点关键点要多沟通,上还是不能上,还是延期上都要有个明确的结论。

是时候升级一下前端技术栈了:VUE

转载于:https://www.cnblogs.com/buoge/p/9691573.html

移动端H5混合开发设置复盘与总结相关推荐

  1. 混合开发与移动端--H5混合开发、H5页面的开发布局、开发注意事项、H5与原生(安卓)交互、webpack打包优化解决方案、H5调试工具、webview

    H5混合开发 混合开发.原生开发.H5开发的区别: 简述:主流APP:原生APP.H5(webapp).混合APP,相对应的定制研发即原生开发.H5开发.混合开发 原生APP开发优缺点: 可以访问手机 ...

  2. androidh5混合开发_Android H5混合开发(3):原生Android项目里嵌入Cordova

    前言 如果安卓项目已经存在了,那么如何使用Cordova做混合开发? 方案1(适用于插件会持续增加或变化的项目): 新建Cordova项目并添加Android平台,把我们的安卓项目导入Android平 ...

  3. 移动端H5网页开发必备知识

    简介 工欲善其事必先利其器,今天这篇文章主要讲解移动端H5开发必备的一些基础知识以及移动端适配和布局方案.如果已经看过这篇文章了或者已经掌握了移动端基础的话可以看笔者写的 移动端H5网页开发常见问题汇 ...

  4. Meetup 回顾 | 多场景下的 H5 混合开发与 Flutter 多平台应用开发

    9 月 7 日,RTC 开发者社区与北京 GDG 联合主办的「前端技术专场」在北京中关村圆满结束啦.周末北京的天气再热,也比不上社区小伙伴们的学习心气更热,现场 100 多位开发者在 3 位演讲人的分 ...

  5. 移动端H5网页开发常见问题汇总

    简介 这篇文章主要是总结下移动端开发常见问题,帮助大家一起避坑.如果已经看过这篇文章了的话也可以看看笔者写的 移动端H5网页开发必备知识 移动端开发必备知识-Hybrid App HTML方面 调用系 ...

  6. 招募技术合伙人(H5混合开发+秒开流应用)

    本司因技术开发的需要,特向社会.高校招募技术合伙人,希望不甘于工薪收入,有志创业的人士踊跃报名,无需投资.无需离开原单位. 要求:擅长H5混合开发,会秒开(流应用)的优先 邮箱:Mr.liao@ali ...

  7. ioswebview混编_iOS 原生和H5混合开发总结

    最近一段时间开发一个App,由于时间紧采用原生+H5混合开发,这里记录一下开发过程中遇到的问题. 之前在项目中使用过WebViewJavascriptBridge,使用起来很简单,但是这次项目中没有使 ...

  8. H5混合开发二维码扫描教程之大圣众娱十人牛牛源码搭建架设

    今天用H5调用本地摄像头进行扫描二维码,我之前有做过原生安卓的二维码扫一扫,主要是通过调用zxing插件进行操作的,其中还弄了个闪光灯.但是纯H5的没接触过,心里没底,于是晚上回家开始网上各处找方案. ...

  9. 移动端h5游戏开发中的动画和动效展示

    在移动端h5游戏开发中,经常会遇到动画和动效的展现需求,比较常用的实现方法有css3.svg.定时器等,针对不同的场景和需求使用不同的技术,可以提升设计和开发的效率,保证产品的效果和质量,也能让用户有 ...

最新文章

  1. 推荐一款常用的IDE插件,越用越喜欢
  2. 如果没有了Redis...
  3. c语言 结构成员 变量引用,C++结构体变量的引用
  4. C# WinForm程序App.Config数据库连接配置文件的使用过程
  5. python中的断点是什么_python中简单的递归(断点报错的小福利)
  6. 他读书时挣了五十万,找工作时收获阿里腾讯快手等ssp offer
  7. -字符串-搜索和替换--聚合
  8. swift5 修改Accessibility order读取的顺序
  9. 软件工程4 用例建模
  10. 使用Qt开发中国象棋(七):网络对战
  11. 少儿编程市场调研分析
  12. 【平面设计基础】11:配色——配色原理
  13. 音视频剪辑 DIY:用 Python 快速入门音视频剪辑
  14. 报考软件资格考试过程详解--附学习分享
  15. 媒体查询@media
  16. 《私募股权基金投资基础知识》---第十章
  17. DataV 你值得拥有的大屏展示工具
  18. 苏建林DGCNN模型代码详解
  19. 中断上下文以及下文延后执行
  20. oracle计算两行差值

热门文章

  1. 黄金——家家都应藏有的投资品(转载自新浪)
  2. vs05b2中给dataset添加表间关系
  3. 机器学习与统计学的本质差异
  4. C++用string 定义字符串数组
  5. Linux solr 启动命令,linux – 重启Solr的正确方法是什么
  6. android系统电量优化,基于Android系统网络耗电量优化方法的.pdf
  7. 武汉锅检所检测机器人_嵊州市管道cctv机器人-检测服务,武汉天仪ty333,诚信承诺...
  8. getjsonobject字符串解析出错_【干货分享】达梦DISQL工具使用解析之 DISQL环境变量设置...
  9. Python---编写一个函数,提示输入两个数字a,b,并进行a与b的除法运算。
  10. c++如何让字符串重复输出_2020.10.02错题总结之字符串相关函数