uni-app企业微信端应用扫码安卓手机扫描后闪退

发布于 1周前 作者 yibo5220 来自 Uni-App

uni-app企业微信端应用扫码安卓手机扫描后闪退

扫描功能代码示例

handleScan 方法

handleScan() {
  // #ifndef H5
  const that = this;
  uni.scanCode({
    onlyFromCamera: true,
    success: function (res) {
      if (that.detail.hardwareType && that.detail.hardwareType === 2) {
        that.handleGetHardware(res.result);
      } else {
        that.$navTo(`./scan?id=${that.id}&qrcode=${res.result}`);
      }
    },
  });
  // #endif
  
  // #ifdef H5
  this.handleGetQYWX();
  // #endif
}

async handleGetQYWX 方法

async handleGetQYWX() {
  try {
    const that = this;
    const { data } = await getConfig({
      url: `${window.location.href}`,
    });
    that.obj.config({
      beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
      appId: data.corp_id, // 必填,企业微信的corpID
      timestamp: data.timestamp, // 必填,生成签名的时间戳
      nonceStr: data.nonceStr, // 必填,生成签名的随机串
      signature: data.signature, // 必填,签名,见附录-JS-SDK使用权限签名算法
      jsApiList: ['scanQRCode'], //必填,传入需要使用的接口名称
    });
    
    console.log(2);
    
    that.obj.ready(function () {
      console.log(4);
      console.log('success', wx);
      
      that.obj.scanQRCode({
        desc: 'scanQRCode desc',
        needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
        scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是条形码(一维码),默认二者都有
        success: function (res) {
          let result = res.resultStr;
          if (that.detail.hardwareType === 2) {
            that.handleGetHardware(result);
          } else {
            that.$navTo(`./scan?id=${that.id}&qrcode=${result}`);
          }
        },
        error: function (res) {
          that.$refs.uToast.show({
            title: '扫码失败,请重试',
            type: 'default',
          });
        },
      });
    });
    
    that.obj.error(function (res) {
      console.log(3);
      console.log(res);
    });
  } catch {}
}

1 回复

在开发uni-app企业微信端应用时,遇到安卓手机扫描二维码后闪退的问题,通常可能是由于多种原因导致的,包括但不限于代码兼容性问题、内存泄漏、第三方库冲突等。虽然无法直接提供确切的修复建议(因为具体问题需要具体分析),但我可以提供一个基本的错误捕获和日志记录的代码示例,这有助于你在调试过程中定位问题。

错误捕获与日志记录

首先,确保你的应用中有全局的错误捕获机制,以便在发生异常时能够记录相关信息,这有助于后续的问题分析。

1. 在 App.vue 中添加全局错误捕获

export default {
  onLaunch() {
    // 全局错误捕获
    plus.runtime.onError = function (e) {
      console.error('全局错误捕获:', e.message);
      // 这里可以添加日志记录到服务器或本地文件的逻辑
      // 例如,使用uni.request发送错误日志到服务器
      uni.request({
        url: 'https://your-server.com/log',
        method: 'POST',
        data: {
          errorMessage: e.message,
          stack: e.stack,
          timestamp: new Date().toISOString()
        },
        success: (res) => {
          console.log('日志发送成功', res);
        },
        fail: (err) => {
          console.error('日志发送失败', err);
        }
      });
    };
  },
  // ... 其他代码
};

2. 页面级别的错误捕获

在每个页面的 onLoad 或其他生命周期函数中,也可以添加类似的错误捕获逻辑,特别是对于那些涉及扫码功能的页面。

export default {
  onLoad() {
    try {
      // 你的扫码逻辑代码
    } catch (error) {
      console.error('页面错误捕获:', error);
      // 同样可以添加日志记录逻辑
    }
  },
  // ... 其他代码
};

注意事项

  • 日志安全:确保日志中不包含敏感信息。
  • 日志量控制:避免因为日志量过大而影响应用性能或导致其他问题。
  • 环境区分:在生产环境中,可能需要更精细地控制日志的发送频率和内容。

通过上述代码,你可以在发生闪退时捕获到一些关键信息,这些信息对于后续的问题定位和修复至关重要。如果问题依旧存在,建议结合Android Studio的Logcat工具进一步分析崩溃日志,查找具体的崩溃原因。

回到顶部