热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

不久前遇到一个bug,某个用户的苹果手机钉钉小程序打开后弹窗提示错误,出现白屏(安卓手机打开直接白屏),研究了

不久前遇到一个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 &#61; current.split(&#39;.&#39;) // [&#39;1&#39;,&#39;1&#39;,&#39;1&#39;]const arr2 &#61; base.split(&#39;.&#39;) // [&#39;1&#39;,&#39;2&#39;,&#39;1&#39;]/* 质朴长存法 by lifesinger */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) // 001 001 001}).join(&#39;&#39;)) // 1001001const v2 &#61; &#43;(arr2.map(element &#61;> {return pad(element, 3) // 001 002 001}).join(&#39;&#39;)) // 1002001return v1 - v2 > 0 // true 当前版本是最新版本&#xff1b;false 当前版本不是最新版本
}// 判断是V1引擎还是V2引擎
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引擎就提示用户升级钉钉应用。
在这里插入图片描述

在这里插入图片描述


推荐阅读
  • 本文介绍了如何使用elementui分页组件进行分页功能的改写,只需一行代码即可调用。通过封装分页组件,避免在每个页面都写跳转请求的重复代码。详细的代码示例和使用方法在正文中给出。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
  • Vue3中setup函数的参数props和context配置详解
    本文详细介绍了Vue3中setup函数的参数props和context的配置方法,包括props的接收和配置声明,以及未通过props进行接收配置时的输出值。同时还介绍了父组件传递给子组件的值和模板的相关内容。阅读本文后,读者将对Vue3中setup函数的参数props和context的配置有更深入的理解。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
author-avatar
babe
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有