uni-app开发的钉钉小程序在部分机型调用uni.scanCode扫码偶现闪退

uni-app开发的钉钉小程序在部分机型调用uni.scanCode扫码偶现闪退

开发环境 版本号 项目创建方式
Windows Windows 11 家庭中文版 HBuilderX
产品分类:uniapp/小程序/阿里

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.4.7

第三方开发者工具版本号:Version 2.7.2

基础库版本号:3.4.7.20220422

项目创建方式:HBuilderX

示例代码:

```javascript
 uni.scanCode({  
    scanType: ["qrCode"],  
    success: (res) => {  
      try {  
        const qrCodeData = JSON.parse(res.result) || {};  
        const qrInfo = this.parseScanCode(qrCodeData);  

      } catch (e) {  
        //TODO handle the exception  
        uni.showToast({  
          title: "请扫对应码!",  
          icon: "none",  
          duration: 2000,  
        });  
      }  
    },  
    fail: function (e) {  
      console.log("eeee", e);  
    },  
  })

操作步骤: 进入小程序 点击按钮触发扫码 会偶现闪退

预期结果: 扫码功能正常

实际结果: 调用扫码功能 会偶现小程序闪退

bug描述: 使用uniapp开发的钉钉小程序 在oppo手机 android 11系统 会偶现调用uni.scanCode后 闪退回钉钉app工作台界面问题


更多关于uni-app开发的钉钉小程序在部分机型调用uni.scanCode扫码偶现闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app开发的钉钉小程序在部分机型调用uni.scanCode扫码偶现闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在开发钉钉小程序时,使用 uni.scanCode 进行扫码操作时偶现闪退,可能是由于以下原因导致的。以下是一些可能的原因和解决方案:


1. 机型兼容性问题

  • 原因:部分机型(尤其是低端机型或特定品牌)可能对 uni.scanCode 的实现支持不完善,导致内存溢出或崩溃。
  • 解决方案
    • 测试并记录闪退的机型,检查是否有共同点(如系统版本、内存大小等)。
    • 尝试在 uni.scanCode 调用前后增加日志,定位问题发生的具体位置。
    • 如果问题集中在低端机型,可以尝试优化代码,减少内存占用。

2. 权限问题

  • 原因:扫码功能需要调用摄像头权限,如果权限未正确获取或用户拒绝授权,可能导致闪退。
  • 解决方案
    • 在调用 uni.scanCode 之前,先检查并申请摄像头权限:
      uni.authorize({
          scope: 'scope.camera',
          success() {
              uni.scanCode({
                  success(res) {
                      console.log(res.result);
                  },
                  fail(err) {
                      console.error('扫码失败', err);
                  }
              });
          },
          fail(err) {
              console.error('摄像头权限未授权', err);
          }
      });
      
    • 如果用户拒绝授权,可以引导用户手动开启权限。

3. uni.scanCode 参数问题

  • 原因uni.scanCode 的参数设置不当可能导致闪退,例如 scanType 设置错误。
  • 解决方案
    • 检查 uni.scanCode 的参数,确保其合法性和正确性:
      uni.scanCode({
          scanType: ['qrCode', 'barCode'], // 明确指定扫码类型
          success(res) {
              console.log(res.result);
          },
          fail(err) {
              console.error('扫码失败', err);
          }
      });
      
    • 如果不需要特定类型,可以尝试不传 scanType 参数。

4. 钉钉小程序 SDK 问题

  • 原因:钉钉小程序的 SDK 可能存在 Bug 或兼容性问题,导致 uni.scanCode 调用失败。
  • 解决方案
    • 确保使用的是最新版本的 uni-app 和钉钉小程序 SDK。
    • 查看钉钉小程序的官方文档和社区,确认是否有已知问题。
    • 如果问题持续,可以尝试使用钉钉原生 API 替代 uni.scanCode
      dd.scan({
          type: 'qrCode', // 扫码类型
          success(res) {
              console.log(res.code);
          },
          fail(err) {
              console.error('扫码失败', err);
          }
      });
      

5. 内存不足

  • 原因:扫码功能需要占用较多内存,如果设备内存不足,可能导致闪退。
  • 解决方案
    • 在调用 uni.scanCode 之前,尽量减少内存占用,例如释放不必要的资源。
    • 在低端机型上,可以提示用户关闭其他应用以释放内存。

6. 代码逻辑问题

  • 原因:扫码后的回调函数中可能存在未捕获的异常,导致闪退。
  • 解决方案
    • successfail 回调中增加异常捕获:
      uni.scanCode({
          success(res) {
              try {
                  console.log(res.result);
              } catch (e) {
                  console.error('扫码成功回调异常', e);
              }
          },
          fail(err) {
              console.error('扫码失败', err);
          }
      });
回到顶部