1

我正在使用基于 Expo Toolkit 的 ReactNative 开发应用程序,我想知道如何检查用户是否使用指纹(iPhone 上的 TouchID)或面部检测(iPhone X 上的 FaceID>)来解锁设备。

我已经知道如何使用 Expo SDK 检查设备是否具有所需的硬件,如下所示:

let hasFPSupport = await Expo.Fingerprint.hasHardwareAsync();

但我需要检查用户是否在您的设备上选择指纹/面部作为解锁方法,而不是图案或密码。

谢谢

4

4 回答 4

1

这是唐纳德回答的更新,其中考虑了 Expo 的新 iPhone XS 型号名称的空字符串。它还考虑了模拟器。

const hasHardwareSupport =
  (await Expo.LocalAuthentication.hasHardwareAsync()) &&
  (await Expo.LocalAuthentication.isEnrolledAsync());

let hasTouchIDSupport
let hasFaceIDSupport

if (hasHardwareSupport) {
  if (Constants.platform.ios) {
    if (
      Constants.platform.ios.model === '' ||
      Constants.platform.ios.model.includes('X')
    ) {
      hasFaceIDSupport = true;
    } else {
      if (
        Constants.platform.ios.model === 'Simulator' &&
        Constants.deviceName.includes('X')
      ) {
        hasFaceIDSupport = true;
      }
    }
  }
   hasTouchIDSupport = !hasFaceIDSupport;
}

编辑:Expo 发布了修复空白模型字符串的更新。但是,您可能需要对此进行检查,以防下一个 iPhone 发布周期导致同样的问题。

于 2018-11-01T22:25:25.883 回答
0

Expo.Fingerprint.hasHardwareAsync()目前,您可以通过检查和来确定用户是否拥有 Face ID Expo.Fingerprint.isEnrolledAsync(),然后使用Expo.Constants.platform此处的文档)检查他们是否拥有 iPhone X。

所以:

const hasHardwareSupport = await Expo.Fingerprint.hasHardwareAsync() && await Expo.Fingerprint.isEnrolledAsync();`
if (hasHardwareSupport) {
  const hasFaceIDSupport = Expo.Constants.platform.ios && Expo.Constants.platform.ios.model === 'iPhone X';
  const hasTouchIDSupport = !hasFaceIDSupport;
}
于 2018-08-02T01:30:51.050 回答
0

如果您尝试了上述答案但它不起作用,请注意在我发布博文时的文档已更改

- import * as LocalAuthentication from 'expo-local-authentication';
- let compatible = await LocalAuthentication.hasHardwareAsync()
于 2020-05-09T22:52:56.867 回答
-1

我们可以检查设备是否已扫描指纹:

await Expo.Fingerprint.isEnrolledAsync()

因此,这可用于达到以下目标:

let hasFPSupport = await Expo.Fingerprint.hasHardwareAsync() && await Expo.Fingerprint.isEnrolledAsync();
于 2018-02-28T21:04:48.243 回答