Аутентификация Face Id для Android в React-Native

Мне нужен sdk для аутентификации android face_id для моей реакции на вход в собственное приложение для Android. Я использовал доступные плагины, которые поддерживают только аутентификацию по пальцу и пароль для Android. Пожалуйста, дайте мне знать, есть ли какой-либо плагин или SDK, чтобы я мог использовать его в реакции на родном Android.

Как я могу использовать этот код для реагирования на собственный модуль, создав собственный модуль. https://developer.android.com/training/sign-in/biometric-auth

private Executor executor;
private BiometricPrompt biometricPrompt;
private BiometricPrompt.PromptInfo promptInfo;

executor = ContextCompat.getMainExecutor(this);
biometricPrompt = new BiometricPrompt(MainActivity.this,
        executor, new BiometricPrompt.AuthenticationCallback() {
    @Override
    public void onAuthenticationError(int errorCode,
            @NonNull CharSequence errString) {
        super.onAuthenticationError(errorCode, errString);
        Toast.makeText(getApplicationContext(),
            "Authentication error: " + errString, Toast.LENGTH_SHORT)
            .show();
    }

    @Override
    public void onAuthenticationSucceeded(
            @NonNull BiometricPrompt.AuthenticationResult result) {
        super.onAuthenticationSucceeded(result);
        Toast.makeText(getApplicationContext(),
            "Authentication succeeded!", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onAuthenticationFailed() {
        super.onAuthenticationFailed();
        Toast.makeText(getApplicationContext(), "Authentication failed",
            Toast.LENGTH_SHORT)
            .show();
    }
});

promptInfo = new BiometricPrompt.PromptInfo.Builder()
        .setTitle("Biometric login for my app")
        .setSubtitle("Log in using your biometric credential")
        .setNegativeButtonText("Use account password")
        .build();

person Shivaraj Rajagolkar    schedule 09.09.2020    source источник


Ответы (2)


Обычно в Android используется отпечаток пальца и iOS Face ID для самых последних устройств, я считаю, что невозможно управлять таким же способом, как Face ID в Android.

Например, в этой библиотеке доступны только Face-ID и Touch-ID. для устройств iOS, а биометрия - для Android, работает аналогично Touch-ID.

Другие пользователи ответили на аналогичный вопрос. .

person Israel Alfaro    schedule 09.09.2020

Вот один из многих API-интерфейсов, в которых вы это делаете response-native-fingerprint-scanner и пример ниже:

const isBiometricValid = async () =>
  FingerprintScanner.authenticate({
    description: 'Scan your fingerprint on the device scanner to continue'
  });

const availableBiometric = async () => FingerprintScanner.isSensorAvailable();

const secureLogin = async ({
  cpf,
  password,
  setFieldError,
  storedUser,
  navigation,
  dispatch,
  setUseManualPassword,
  useManualPassword,
  setFieldValue
}) => {
  const authArgs = {
    cpf,
    password,
    setFieldError,
    navigation,
    dispatch
  };

  try {
    const availableBiometricType = await availableBiometric();

    if (!availableBiometricType) {
      return AuthCreators.getToken({ ...authArgs });
    }

    if (useManualPassword) {
      return AuthCreators.getToken({
        ...authArgs,
        cpf: storedUser[0]
      });
    }

    if (storedUser) {
      const userAccessGranted = await isBiometricValid();

      if (userAccessGranted) {
        const storedPasswordEncrypted = await AsyncStorage.getItem('@__:password');
        const decryptedPasswordBytes = CryptoJS.AES.decrypt(
          storedPasswordEncrypted,
          Config.USER_PASSWORD_ENCRYPTION_KEY
        );
        const decryptedPassword = decryptedPasswordBytes.toString(CryptoJS.enc.Utf8);

        return AuthCreators.getToken({
          ...authArgs,
          cpf: storedUser[0],
          password: decryptedPassword
        });
      }
    }

    return AuthCreators.getToken({
      ...authArgs,
      biometric: normalizedBiometricType(availableBiometricType)
    });
  } catch (error) {
    return biometricAuthFailure({
      ...authArgs,
      error,
      setUseManualPassword,
      setFieldValue,
      storedUser
    });
  }
};

Вы можете протестировать и отладить, например, открыв устройство, такое как iOS 11 (или любое другое устройство с FaceID по умолчанию), и зарегистрировать биометрические данные на странице «Возможности» ›FaceID› Enrolled.

person Murilo Medeiros    schedule 09.09.2020
comment
Я использовал упомянутый вами плагин, но идентификатор лица работает только с ios, а не с android. - person Shivaraj Rajagolkar; 09.09.2020
comment
Возможно, на устройстве, которое вы пытаетесь использовать FaceId, этот режим недоступен ... - person Murilo Medeiros; 11.09.2020