manifest勾选faceId和Fingerprint, 使用云打包切选择打自定义调试基座, 打包完成后进入页面点击按钮会直接闪退, 注释掉uni.checkIsSupportSoterAuthentication, uni.checkIsSoterEnrolledInDevice, uni.startSoterAuthentication这些方法后就可以正常使用
- 发布:2024-10-30 17:01
- 更新:2024-11-05 11:49
- 阅读:72
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: windows11
HBuilderX类型: 正式
HBuilderX版本号: 4.29
手机系统: iOS
手机系统版本号: iOS 18
手机厂商: 苹果
手机机型: iphone15pro
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
ios正常应该调用面部识别的
ios正常应该调用面部识别的
实际结果:
直接闪退, 唯有注释掉uni.checkIsSupportSoterAuthentication, uni.checkIsSoterEnrolledInDevice, uni.startSoterAuthentication后可以正常操作
直接闪退, 唯有注释掉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()
})
2 个回复
DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信
这个问题和 ios 版本有关系吗,有测试其他 ios 版本是否正常吗?补充更多信息,我转给相关同事
DCloud_iOS_WZT
没有复现,你试一下不要用Promise 直接调用你那边还闪退么