Expo项目Local Authentication Face ID无法使用问题求助
Expo中Face ID无法正常触发的解决方法
1. 确保配置真正生效
你的app.json配置格式正确,但修改infoPlist后需要让配置生效:
- 若使用托管式Expo项目:重启Expo开发服务器,或执行
expo prebuild --clean(已预构建过的情况)后重新运行项目。 - 若使用裸项目:执行
npx pod-install更新iOS依赖,再重新构建运行项目。
2. 修复useEffect逻辑问题
你的useEffect存在两处问题:无依赖数组导致重复执行、异步setState后立即判断值未更新。修改如下:
useEffect(() => { const checkBiometricAndAuthenticate = async () => { const compatible = await LocalAuthentication.hasHardwareAsync(); setIsBiometricSupported(compatible); // 直接基于返回值判断,无需等待state更新 if (compatible) { onAuthenticate(); } }; checkBiometricAndAuthenticate(); }, []); // 空依赖数组确保仅执行一次
3. 明确请求生物识别权限
提前主动请求权限,避免系统因权限问题取消验证:
async function onAuthenticate() { const permission = await LocalAuthentication.requestPermissionsAsync(); if (permission.granted) { const result = await LocalAuthentication.authenticateAsync({ promptMessage: "Authenticate with Face ID", // 提示文字匹配Face ID更合理 fallbackLabel: "Enter Password", }); setIsAuthenticated(result.success); console.log(result); } else { console.log("生物识别权限已拒绝"); } }
4. 检查设备系统设置
- 确认设备已开启Face ID(设置 > Face ID与密码)。
- 检查当前App是否被授权使用Face ID(设置 > 你的App名称 > Face ID)。
内容的提问来源于stack exchange,提问作者yobydev
相关产品推荐
相关产品推荐

