作者:babe | 来源:互联网 | 2023-09-15 02:43
不久前遇到一个bug,某个用户的苹果手机钉钉小程序打开后弹窗提示错误,出现白屏(安卓手机打开直接白屏),研究了半天发现是他的钉钉版本过低(钉钉客户端版本低于5.1.5)
导致无法使用。
查看钉钉官方文档得知是由于钉钉V1引擎不支持部分API,导致程序报错,所以才会出现白屏和弹窗提示的问题。
点击下方链接
查看官方解释
小程序引擎升级
https://developers.dingtalk.com/document/app/mini-program-engine-upgrade
那如何解决这个问题呢?
官方提示可以通过基础库的版本判断当前运行在哪个版本的引擎上。所以按照这个思路开始找解决办法…
首先分析钉钉基础库的版本是比较常见的1.1.x类型,这样大大降低了比较的难度,于是开始在网上查找版本号的比较方法,基本思路都是字符串'.'切割
,然后循环依次比较版本号每一位大小
。不过看了好多种方法感觉有点头秃。
最后想了一个笨办法:
先将当前版本
和旧版本
进行字符串’.'切割,每一位数前补零,最高三位数,然后将补零后的每一位重新拼接成字符串,转为数字后进行差值比较。
function versonCompare(current, base) {const arr1 &#61; current.split(&#39;.&#39;) const arr2 &#61; base.split(&#39;.&#39;) function pad(num, n) {let len &#61; num.toString().length;while (len < n) {num &#61; "0" &#43; num;len&#43;&#43;;}return num;}const v1 &#61; &#43;(arr1.map(element &#61;> {return pad(element, 3) }).join(&#39;&#39;)) const v2 &#61; &#43;(arr2.map(element &#61;> {return pad(element, 3) }).join(&#39;&#39;)) return v1 - v2 > 0
}
export function isVersion() {const version &#61; dd.ExtSDKVersion || dd.SDKVersion; return versonCompare(version, &#39;1.24.0&#39;)
}
这样比较版本号的问题解决了。
按理说比较版本号的方法应该是在onLaunch
中调用&#xff0c;但是由于接口中传小程序的appid&#xff0c;需要用到dd.getAppIdSync().appId
方法获取&#xff0c;而该方法V1引擎不支持。
并且由于钉钉小程序加载问题&#xff0c;故只能每次调用接口时进行版本号的判断&#xff0c;如果是V1引擎就提示用户升级钉钉应用。