Estoy usando ReactNative basado en Expo Toolkit para desarrollar una aplicación y quiero saber cómo puedo verificar si el usuario está usando la huella digital (TouchID en iPhone) o la detección de rostros (FaceID en iPhone X>) para desbloquear el dispositivo.

Ya sé cómo verificar si el dispositivo tiene el hardware requerido usando Expo SDK, de la siguiente manera:

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

Pero necesito verificar si el usuario elige la huella digital / cara como método de desbloqueo en su dispositivo, en lugar de patrón o pin.

Gracias

1
Rodrigo Tessarollo 23 feb. 2018 a las 23:54

4 respuestas

La mejor respuesta

Podemos verificar si el dispositivo ha escaneado las huellas digitales:

await Expo.Fingerprint.isEnrolledAsync()

Entonces, esto se puede utilizar para alcanzar el objetivo de la siguiente manera:

let hasFPSupport = await Expo.Fingerprint.hasHardwareAsync() && await Expo.Fingerprint.isEnrolledAsync();
-1
Rodrigo Tessarollo 28 feb. 2018 a las 21:04

Actualmente, puede determinar que un usuario tiene Face ID marcando Expo.Fingerprint.hasHardwareAsync() y Expo.Fingerprint.isEnrolledAsync(), y luego también verificando que tiene un iPhone X usando Expo.Constants.platform (documentos aquí).

Así que:

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;
}
0
Donald 2 ago. 2018 a las 01:30

En caso de que haya intentado la respuesta anterior y no funciona, tenga en cuenta que, en el momento de la publicación, la documentación de la exposición ha cambiado

- import * as LocalAuthentication from 'expo-local-authentication';
- let compatible = await LocalAuthentication.hasHardwareAsync()
0
Chinedu Ofor 9 may. 2020 a las 22:52

Aquí hay una actualización de la respuesta de Donald que tiene en cuenta la cadena vacía de Expo para el nombre del modelo del nuevo iPhone XS. También tiene en cuenta el simulador.

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;
}

EDITAR : Expo lanzó una actualización que corrige la cadena de modelo en blanco. Sin embargo, es posible que desee controlar eso en caso de que el próximo ciclo de lanzamiento de iPhone cause el mismo problema.

1
Chase McElroy 6 nov. 2018 a las 18:02