uni-app uni.startSoterAuthentication 拉起指纹 不同手机型号会拉起不同的拟态框 且拉起拟态框后不进行指纹验证 拟态框无相关关闭方法
uni-app uni.startSoterAuthentication 拉起指纹 不同手机型号会拉起不同的拟态框 且拉起拟态框后不进行指纹验证 拟态框无相关关闭方法
操作步骤:
- 登录-指纹登录
预期结果:
- 统一指纹弹出框 并且有相应关闭方法
实际结果:
- 不同机型 弹框不同 而且没有相应关闭方法
bug描述:
【报Bug】uni.startSoterAuthentication 拉起指纹 不同手机型号会拉起不同的拟态框?而且拉起拟态框之后,不进行指纹验证。拟态框没有相关关闭方法?
| 信息类别 | 信息内容 |
|------------------|----------------------------|
| 产品分类 | uniapp/App |
| PC开发环境 | Mac |
| PC操作系统版本 | Mac OS 14.1.2 (23B92) |
| HBuilderX类型 | 正式 |
| HBuilderX版本 | 3.98 |
| 手机系统 | Android |
| 手机系统版本 | Android 11 |
| 手机厂商 | 华为 |
| 手机机型 | mate 30 |
| 页面类型 | vue |
| vue版本 | vue2 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
1 回复
在 uni-app 中使用 uni.startSoterAuthentication
进行指纹验证时,可能会遇到不同手机型号拉起不同的拟态框,并且拉起后不进行指纹验证,且拟态框没有相关关闭方法的问题。以下是一些可能的解决思路和建议:
1. 确认设备支持指纹识别
在调用 uni.startSoterAuthentication
之前,建议先检查设备是否支持指纹识别。可以使用 uni.checkIsSoterEnrolledInDevice
和 uni.checkIsSupportSoterAuthentication
来确认设备是否支持指纹识别以及是否已经录入了指纹。
uni.checkIsSupportSoterAuthentication({
success(res) {
if (res.supportMode.includes('fingerPrint')) {
console.log('设备支持指纹识别');
} else {
console.log('设备不支持指纹识别');
}
},
fail(err) {
console.log('检查失败', err);
}
});
uni.checkIsSoterEnrolledInDevice({
checkAuthMode: 'fingerPrint',
success(res) {
if (res.isEnrolled) {
console.log('设备已录入指纹');
} else {
console.log('设备未录入指纹');
}
},
fail(err) {
console.log('检查失败', err);
}
});
2. 处理不同手机型号的兼容性问题
不同手机型号的指纹识别实现可能有所不同,尤其是 Android 设备,不同厂商可能会定制不同的指纹识别界面。如果遇到拟态框拉起后不进行指纹验证的问题,可能是设备本身的问题或者 API 的实现问题。
可以尝试以下方法:
- 重新调用 API:在拟态框拉起后不进行指纹验证的情况下,可以尝试重新调用
uni.startSoterAuthentication
,或者等待一段时间后再次调用。 - 捕获错误信息:在调用
uni.startSoterAuthentication
时,捕获错误信息并进行相应的处理。
uni.startSoterAuthentication({
requestAuthModes: ['fingerPrint'],
challenge: '123456',
authContent: '请验证指纹',
success(res) {
console.log('指纹验证成功', res);
},
fail(err) {
console.log('指纹验证失败', err);
// 可以在这里进行重试或提示用户
}
});
3. 手动关闭拟态框
如果拟态框没有提供关闭方法,可以尝试通过以下方式手动关闭:
- 返回键监听:监听设备的返回键,当用户按下返回键时,手动关闭拟态框。
- 超时处理:设置一个超时时间,如果在一定时间内没有进行指纹验证,可以提示用户并手动关闭拟态框。
let timeout = setTimeout(() => {
console.log('指纹验证超时');
// 可以在这里提示用户并关闭拟态框
}, 10000); // 10秒超时
uni.startSoterAuthentication({
requestAuthModes: ['fingerPrint'],
challenge: '123456',
authContent: '请验证指纹',
success(res) {
clearTimeout(timeout);
console.log('指纹验证成功', res);
},
fail(err) {
clearTimeout(timeout);
console.log('指纹验证失败', err);
}
});