expo install expo-local-authentication
app.json
파일에 다음과 같이 설정을 추가해줍니다.{
"expo": {
"plugins": [
[
"expo-local-authentication",
{
"faceIDPermission": "Allow $(PRODUCT_NAME) to use Face ID."
}
]
]
}
}
android/app/src/main/AndroidManifest.xml
파일에 다음과 같이 설정을 추가해줍니다.<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
npx pod-install
ios/Info.plist
파일에 다음과 같이 설정을 추가해줍니다.<key>NSFaceIDUsageDescription</key>
<string>Allow $(PRODUCT_NAME) to use FaceID</string>
import * as LocalAuthentication from 'expo-local-authentication';
import React from 'react';
import { Button, Text, View } from 'react-native';
export default function App() {
const handleAuthentication = async () => {
const hasHardware = await LocalAuthentication.hasHardwareAsync();
if (!hasHardware) {
alert('생체 인증을 사용할 수 없는 기기입니다.');
return;
}
const isEnrolled = await LocalAuthentication.isEnrolledAsync();
if (!isEnrolled) {
alert('생체 인증이 등록되어 있지 않습니다.');
return;
}
const result = await LocalAuthentication.authenticateAsync({
promptMessage: '생체 인증을 사용하여 로그인하세요.',
});
if (result.success) {
alert('로그인 성공!');
} else {
alert('로그인 실패!');
}
};
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>생체 인증을 사용하여 로그인하세요.</Text>
<Button title="로그인" onPress={handleAuthentication} />
</View>
);
}
Promise<boolean>
입니다.Promise<boolean>
입니다.LocalAuthenticationOptions
를 받습니다.
LocalAuthenticationOptions의 쓸만한 parameter 몇 가지를 살펴보면 다음과 같습니다.strong
은 Android 클래스 3 생체 인증만 허용합니다. 예를 들어 지문 또는 3D 얼굴 스캔이 있습니다.
weak
에서는 Android 클래스 3 및 클래스 2 생체인증을 모두 허용합니다. 클래스 2 생체인식은 클래스 3보다 보안성이 떨어집니다. 예를 들어 카메라 기반 얼굴 잠금 해제가 있습니다.hasHardwareAsync
를 사용하여 생체 인증을 사용할 수 있는지 확인합니다.isEnrolledAsync
를 사용하여 생체 인증이 등록되어 있는지 확인합니다.authenticateAsync
를 사용하여 생체 인증을 시도합니다.