钉钉小程序 - 由于用户钉钉客户端未升级,导致无法使用小程序问题解决

不久前遇到一个bug,某个用户的苹果手机钉钉小程序打开后弹窗提示错误,出现白屏(安卓手机打开直接白屏),研究了半天发现是他的钉钉版本过低(钉钉客户端版本低于5.1.5)导致无法使用。
查看钉钉官方文档得知是由于钉钉V1引擎不支持部分API,导致程序报错,所以才会出现白屏和弹窗提示的问题。

点击下方链接查看官方解释

小程序引擎升级
https://developers.dingtalk.com/document/app/mini-program-engine-upgrade

那如何解决这个问题呢?

官方提示可以通过基础库的版本判断当前运行在哪个版本的引擎上。所以按照这个思路开始找解决办法…

首先分析钉钉基础库的版本是比较常见的1.1.x类型,这样大大降低了比较的难度,于是开始在网上查找版本号的比较方法,基本思路都是字符串'.'切割,然后循环依次比较版本号每一位大小

最后想了一个笨办法:

先将当前版本旧版本进行字符串’.'切割,每一位数前补零,最高三位数,然后将补零后的每一位重新拼接成字符串,转为数字后进行差值比较。

/**
 * @description 比较客户端版本号,判断V1引擎还是v2引擎
 * @param {current} 当前版本 如1.1.1
 * @param {base} 基础版本 如1.2.1
 */
function versonCompare(current, base) {
  const arr1 = current.split('.') // ['1','1','1']
  const arr2 = base.split('.') // ['1','2','1']
  function pad(num, n) {
    let len = num.toString().length;
    while (len < n) {
      num = "0" + num;
      len++;
    }
    return num;
  }
  const v1 = +(arr1.map(element => {
    return pad(element, 3) // 001 001 001
  }).join('')) // 1001001
  const v2 = +(arr2.map(element => {
    return pad(element, 3) // 001 002 001
  }).join('')) // 1002001
  return v1 - v2 > 0 // true 当前版本是最新版本;false 当前版本不是最新版本
}

// 判断是V1引擎还是V2引擎
export function isVersion() {
  const version = dd.ExtSDKVersion || dd.SDKVersion; // 获取当前钉钉版本库版本号
  return versonCompare(version, '1.24.0')
}

这样比较版本号的问题解决了。

按理说比较版本号的方法应该是在onLaunch中调用,但是由于接口中需要传小程序的appid,appid通过dd.getAppIdSync().appId方法获取,而该方法V1引擎不支持。

并且由于钉钉小程序加载问题,故只能每次调用接口时进行版本号的判断,如果是V1引擎就提示用户升级钉钉应用。
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值