flutter [本地认证][iOS]插件在无权限、锁定和人脸未识别的情况下抛出NotAvailable异常,

ckocjqey  于 4个月前  发布在  Flutter
关注(0)|答案(1)|浏览(77)

重现步骤

代码:

try {
      return await auth.authenticate(
        localizedReason: 'Please authenticate to continue',
        options: const AuthenticationOptions(
          biometricOnly: true,
          useErrorDialogs: false,
        ),
      );
    } on PlatformException catch (e) {
//I get NotAvailable here
}

预期结果

它应该在以下情况下抛出不同的错误代码。

实际结果

在以下情况下,它会抛出NotAvailable:
无权限情况:当我在设备设置中为我的应用程序禁用面部识别权限时。
锁定情况:当我多次尝试面部识别失败时。
面部未识别情况:使用错误的面部进行认证,iOS会显示一个对话框,给出两个选项:1)输入密码,2)取消。当点击取消时,它会抛出NotAvailable。

代码示例

代码示例

//please run above code snippet

截图或视频

截图/视频演示
[上传媒体这里]

日志

日志

[Paste your logs here]

Flutter Doctor输出

Doctor输出

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.19.0, on macOS 14.3.1 23D60 darwin-arm64, locale
en-MM)
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 15.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2022.3)
[✓] IntelliJ IDEA Community Edition (version 2023.3.2)
[✓] VS Code (version 1.89.1)
[✓] Connected device (3 available)            
[✓] Network resources

• No issues found!
wz8daaqr

wz8daaqr1#

我没有一个支持FaceID的iOS设备,但我在我的设备上用指纹检查了这个:iPhone 7, iOS 15.8。在我这端,我可以看到第三个案例中的NotAvailable代码。

  • 第三个案例:无法识别的情况(用错误的手指认证时点击取消按钮):
flutter: PlatformException(NotAvailable, Authentication canceled., com.apple.LocalAuthentication, null)
  • 第二个案例:太多错误的尝试:

(没有打印错误)
我还检查了一个关闭密码(设置 > Touch ID & Passcode > 关闭密码)的情况,并看到了预期的代码输出:
flutter: PlatformException(PasscodeNotSet, 密码未设置。, com.apple.LocalAuthentication, null)
我看到有一个与这个问题类似的问题出现在#102734。似乎它正在检查Apple的API是否可以为上述情况返回不同的错误代码。也许第三个案例中的NotAvailable错误代码是Apple API中有意为之的代码。
为了大家的参考,这也可能与#113687有关。

相关问题