如何以编程方式检查React-Native中对Touch ID,Face ID,密码和模式锁定的支持

时间:2019-10-03 12:03:18

标签: react-native touch-id face-id passcode android-biometric

我已经在我的应用程序中实现了react-native-fingerprint-scanner的运行Touch Id

现在,我想为两个平台的 Touch ID,人脸ID,密码进行身份验证

是否可以分别检查您的设备是否支持lock pattern

我也尝试使用react-native-touch-id,但对于Face Id来说却不起作用

在这两个平台(iOS / Android)上都可以实现这一目标吗?

参考:Link

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:1)

react-native-touch-id应该同时适用于TouchID和FaceID。

  

如果faceid / touch不可用,iOS允许设备使用密码进行回退。这并不意味着如果touchid / faceid最初几次失败,它将恢复为密码,而是如果未注册后者,则它将使用密码。

from the docs

您可以检查其是否首先受支持。

const optionalConfigObject = {
  fallbackLabel: 'Show Passcode', 
  passcodeFallback: true,
}

TouchID.isSupported(optionalConfigObject)
  .then(biometryType => {
    // Success code
    if (biometryType === 'FaceID') {
        console.log('FaceID is supported.');
    } else {
        console.log('TouchID is supported.');
    }
  })
  .catch(error => {
    // Failure code
    console.log(error);
  });

答案 1 :(得分:0)

react-native-touch-id也支持FaceId。但是,不再积极维护了。因此,他们建议使用expo本地身份验证。它可以在所有React本机应用程序中运行,无论是否具有EXPO。

要使用此功能,首先必须安装react-native-unimodules。遵循本指南https://docs.expo.io/bare/installing-unimodules/

一旦安装,您可以通过

安装
npm install expo-local-authentication

之后,我们可以使用它。

async function biometricAuth(){
  const compatible = await LocalAuthentication.hasHardwareAsync();
  if (compatible) {
    const hasRecords = await LocalAuthentication.isEnrolledAsync();
    if (hasRecords) {
      const result = await LocalAuthentication.authenticateAsync();
      return result;
    }
  }
}

它将自动在可用的本地身份验证(TouchID,FaceID,数字锁定,模式锁定等)之间进行选择,并对用户进行身份验证。

答案 2 :(得分:-1)

TouchID.isSupported()
      .then(biometryType => {
        // Success code
        if (biometryType === 'FaceID') {
          console.log('FaceID is supported.');
        } else if (biometryType === 'TouchID'){
          console.log('TouchID is supported.');
        } else if (biometryType === true) {
          // Touch ID is supported on Android
    }
      })
      .catch(error => {
        // Failure code if the user's device does not have touchID or faceID enabled
        console.log(error);
      });