Taro × 钉钉小程序 【开发填坑指南】

前言

你好,我是 PakJeon.

这篇文章记录一下我大半年以来,使用 Taro3 开发钉钉第三方个人小程序过程中遇到的一些问题和经验。


版本控制相关

因为小程序在线上审批通过并发布后,并不是用户就会立即使用到最新版的小程序(参考文档钉钉小程序更新机制)。因此会存在新接口已经在线上运行了,但是用户的客户端版本可能是旧版,由此引发的版本相关问题。

接口字段兼容

线上业务中已经在使用的接口,在后面迭代中需要新增返回字段,需要考虑存量数据是否会正常返回,如果不能的话要提前做好兼容

缓存

上线新业务如果涉及到缓存的操作,需要考虑老用户客户端中已有的缓存,最好有一套强制让客户端缓存失效的方案,让新业务正常运行。

需要考虑新接口不影响旧版客户端

在测试环境,需要回归测试一遍新接口+旧版客户端功能是否正常。

展示小程序版本号相关信息,减少沟通成本

因为在测试环境频繁发版,为了让测试知道自己手上客户端是否最新版,避免开发跟测试经常 battle 这个不是bug,你用的都不是最新版 之类的低效沟通,需要在小程序某处放置当前发布的版本(比如:我的页面页脚或者一个关于页面)。更好的方法是搭配CI/CD,在测试分支发布时自动向OA发送版本通知。


开发者工具相关

此时笔者使用的是(小程序开发者工具 Version 3.7.13)

  1. 在真机调试的调试弹窗中,不能清空Storage,可以实现一个开发者工具页,在里面实现调用Taro.clearStorageSync()。而开发者工具页可以通过 cross-env 这个库注入运行的环境变量,判断是在开发、测试环境则开放工具页入口。
  2. 想要调试特定的页面(比如某二级、三级页面)加特定的访问参数,不用每次都从应用的入口开始逐步跳转,更高效的方法是在开发者工具右上角有"普通编译",下拉可以看到"添加编译模式",可以自定义编译条件,做到指定启动页面、启动参数配置等。
  1. 调用 Taro.getAuthCode 进行免登,如果报错"请求钉钉失败",请检查开发者工具所选的应用是否跟服务端环境对上(比如用了生产环境的应用,生成的 code 自然不能在 dev 环境使用)
  2. 图片资源存放的路径 不宜过深,建议是统一放在/src/imgs或者分包中的第一层(比如 /pagesEnterprise/imgs)曾经因为图片存放路径太深,导致引用后,开发者工具无法构建预览和真机模拟。
  3. 偶然出现自动退出登录,而且扫码登录不上的情况。无解之只能重启小程序开发者工具。

兼容性、功能性相关

底部安全区域(iOS 底部黑条的手势操作区域)

在第一级页面"tab 标签页"不需要适配(因为页面、抽屉弹窗都在 tab 标签页上面,tab 已经自带适配),在二级页面需要考虑"安全底部"样式进行适配。可以封装一个<SafeArea />组件,关键样式是 env(safe-area-inset-bottom);

dangerouslySetInnerHTML 属性的使用

需要考虑 script、style、iframe 等标签的影响,建议使用DOMPurify之类的轮子做一层清洗。

授权弹窗触发时,生命周期函数调用不统一

iOS 弹出手机授权弹窗,会触发页面的 useDidHide,授权结束(包括拒绝、允许、点击屏幕空白地方)会触发 useDidShow。但是在 Android 不会。

主包、分包之间页面跳转

当小程序主体体积较大时推荐使用分包(把首次加载小程序资源体积减少,启动时只加载主包)主包跳转分包页面时,URL 需要用相对路径

Map 地图组件 Label 不显示问题

使用地图组件 Map 的 makers 的 label 属性,关于色号需要填完整,不能像 CSS 里的缩写(比如需要赋值成 #FFFFFF,不能赋值 #FFF),否则在 Android 真机上会无法渲染 makers。

Promise.finally 兼容性问题

不要使用Promise.finally,iOS会报错。

页面跳转前发起异步请求,Promise 会全部变成 onReject 状态

发起一个异步请求,请求未返回时退出了页面(用navigateTo或者navigateBack等)即使异步请求返回了数据,也会走到接口请求的 catch。需要更改顺序为先跳转页面,再发起异步请求。ps: 一般是发生在使用消息通知机制触发其他页面的异步请求的场景。

关于请求方法

请勿使用PUT请求方法,在 Android 真机上可能会出现传参到后端丢失的情况,跟后端协商使用POST


Taro-ui 组件库相关

Tabs 组件灵敏度过高

Taro UI 的 Tabs 组件存在灵敏度太高的问题,上下滑动的时候如果在水平方向有移动,会触发切换 tab,体验不好。目前官方 GitHub 有人提了同样问题的 issue,仍然未解决。建议先禁用水平方向移动切换 tab。

FloatLayout 组件

Taro UI 的 FloatLayout 弹出层组件,无法阻止点击空白地方关闭弹窗;弹出层 z-index 继承于其父元素,其导致如果父元素的兄弟节点的 z-index 比父元素大,则弹出层的遮罩不能遮盖该父元素的兄弟节点。

组件引入后无样式

有时候引入了组件发现没有效果,或者没有组件样式,试试单独引入对应组件的样式文件


钉钉授权相关

个人基本信息授权

已授权的权限,如果重复调用授权,会继续抽屉底部弹出,但是会提示"该权限已授权"之类,并且抽屉很快就收回去,导致一个黑框一闪而过的感觉,体验不好。解决办法:后端记录授权状态,前端缓存授权状态

文档相关

文档找不到相关资源

提工单 ,不得不说,工单的解决速度还算可以。另,在钉钉小程序开发者文档里找不到,可以尝试到支付宝小程序文档里找找看

结语

以上是我实际使用 Taro 开发钉钉小程序中碰到的问题以及解决思路,希望能帮助到有需要的人。还有更多实战中总结出来的"最佳"实践,先挖个坑,有空再分享。

感谢阅读。

相关推荐
HyaCinth4 天前
taro3.x + tailwindcss + zustand微信小程序模板
前端·react.js·taro
少恭写代码8 天前
duxapp放弃了redux,在duxapp中局部、全局状态的实现方案
react native·taro·redux·duxapp
Engss14 天前
Taro React-Native Android apk 打包
android·react native·taro
少恭写代码19 天前
通过duxapp提供的基础方法、UI组件、全局样式,快速编写项目
react native·移动开发·taro·duxapp
Feather_7420 天前
taro微信小程序assets静态图片不被编译成base64
微信小程序·小程序·taro
hammer101020 天前
taro底部导航,Tabbar
前端·typescript·taro
那就可爱多一点点23 天前
Taro构建的H5页面路由切换返回上一页存在白屏页面过渡
前端·微信小程序·taro
雪球干死黄旭东1 个月前
taro+taro-ui学习
学习·ui·taro
搬砖的前端1 个月前
微信小程序:miniprogram-ci自动打包工具使用介绍以及支持配置环境变量、jekins打包、taro、uni-app三方工具
ci/cd·微信小程序·taro
Lanwarf-前端开发1 个月前
Taro 中 echarts 图表使用
前端·echarts·taro