z***@bayconnect.com.cn
z***@bayconnect.com.cn
  • 发布:2024-10-30 17:01
  • 更新:2024-11-05 11:49
  • 阅读:72

【报Bug】ios18.0.1 调用uni.checkIsSupportSoterAuthentication方法会直接闪退app

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: windows11

HBuilderX类型: 正式

HBuilderX版本号: 4.29

手机系统: iOS

手机系统版本号: iOS 18

手机厂商: 苹果

手机机型: iphone15pro

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

manifest勾选faceId和Fingerprint, 使用云打包切选择打自定义调试基座, 打包完成后进入页面点击按钮会直接闪退, 注释掉uni.checkIsSupportSoterAuthentication, uni.checkIsSoterEnrolledInDevice, uni.startSoterAuthentication这些方法后就可以正常使用

预期结果:

ios正常应该调用面部识别的

实际结果:

直接闪退, 唯有注释掉uni.checkIsSupportSoterAuthentication, uni.checkIsSoterEnrolledInDevice, uni.startSoterAuthentication后可以正常操作

bug描述:

uni.checkIsSupportSoterAuthentication 会导致应用闪退
不分代码如下

  return new Promise((resolve, reject) => {  
    uni.checkIsSupportSoterAuthentication({  
      success ({ supportMode }) {  
        console.log('支持模式:', supportMode)  
        resolve(supportMode[0])  
      },  
      fail () {  
        console.log('设备不支持生物认证')  
        reject(new Error({ msg: '设备不支持生物认证' }))  
      }  
    })  
  })  
}  
// 检查是否录入  
const checkEnrolled = (checkAuthMode) => {  
  return new Promise((resolve, reject) => {  
    uni.checkIsSoterEnrolledInDevice({  
      checkAuthMode,  
      success ({ isEnrolled }) {  
        if (isEnrolled) {  
          resolve()  
        } else {  
          reject(new Error({ errMsg: '设备未曾录入如指纹等生物信息' }))  
        }  
      },  
      fail () {  
        reject(new Error({ errMsg: '设备未曾录入如指纹等生物信息' }))  
      }  
    })  
  })  
}  

// 开始生物认证  
const startSoter = (requestAuthModes, challenge) => {  
  return new Promise((resolve, reject) => {  
    uni.startSoterAuthentication({  
      requestAuthModes,  
      challenge,  
      // authContent: '',  
      success (res) {  
        resolve(res)  
      },  
      fail () {  
        reject(new Error({ errMsg: '认证失败' }))  
      }  
    })  
  })  
}  

// 表单值  
const fingerprint = ref(false)  
const switchChange = async (e) => {  
  try {  
    // const mode = await checkSupport()  
    // console.log('支持模式', mode)  
    // await checkEnrolled(mode)  
    const randomCode = uni.getStorageSync('TOKEN')  
    console.log('开始认证', randomCode)  
    // const vildRes = await startSoter(['facial'], randomCode)  
    // console.log(vildRes)  
    if (e.detail.value) {  
      request.getSpring('/api/user/open_fingerprint', {  
        cid: getDeviceId(),  
        appId: getAppId()  
      }).then(({ body, msg, code }) => {  
        fingerprint.value = code === '0'  
        uni.showToast({  
          title: msg,  
          icon: 'none'  
        })  
        uni.setStorageSync('fingerprint', body)  
      })  
    } else {  
      request.getSpring('/api/user/close_fingerprint', {}).then(({ msg, code }) => {  
        fingerprint.value = code === '0'  
        uni.showToast({  
          title: msg,  
          icon: 'none'  
        })  
        uni.setStorageSync('fingerprint', '')  
      })  
    }  
  } catch ({ errMsg }) {  
    fingerprint.value = false  
    uni.showToast({  
      title: errMsg + '抓到问题了',  
      icon: 'none'  
    })  
  }  
}  

const getDeviceId = () => {  
  return uni.getDeviceInfo().deviceId  
}  
const getAppId = () => {  
  return uni.getAppBaseInfo().appId  
}  
onMounted(() => {  
  fingerprint.value = !!uni.getStorageSync('fingerprint')  
  // checkSupport()  
})
2024-10-30 17:01 负责人:DCloud_iOS_WZT 分享
已邀请:
DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

这个问题和 ios 版本有关系吗,有测试其他 ios 版本是否正常吗?补充更多信息,我转给相关同事

DCloud_iOS_WZT

DCloud_iOS_WZT

没有复现,你试一下不要用Promise 直接调用你那边还闪退么

要回复问题请先登录注册