flutter
생체 인증 추가
이나주니
2025. 2. 25. 12:00
반응형
설치
local_auth: 2.3.0
https://pub.dev/packages/local_auth
local_auth | Flutter package
Flutter plugin for Android and iOS devices to allow local authentication via fingerprint, touch ID, face ID, passcode, pin, or pattern.
pub.dev
.
Android
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.[your.package]">
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
<application...
...
...
...
<manifest>
MainActivity.kt
package com.[your.package]
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterFragmentActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
class MainActivity: FlutterFragmentActivity() {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
}
}
IOS
Info.plist
<key>NSFaceIDUsageDescription</key>
<string>Why is my app authenticating using face id?</string>
위 내용들을 입력해 줍니다.
이후에 생체 인증을 지원하는지 여부를 확인합니다,
Future<void> checkBiometricSupport() async {
bool isAvailable = await localAuth.canCheckBiometrics;
// 생체 인증 있는경우
isBiometricAvailable = isAvailable;
if (isBiometricAvailable) {
String? id = await storage.read(key: 'email') ?? "";
String? password = await storage.read(key: 'password') ?? "";
if (id.isNotEmpty && password.isNotEmpty) {
loadCredentials();
} else {
Get.dialog();
}
}
}
생체인증이 등록되어있지 않으면 설정으로 이동시키는 팝업이 뜨고
생체 인증이 등록되어있다면 아래 사진처럼 생체인증이 뜹니다.
// 저장된 로그인 정보 불러오기 (생체 인증 필요)
Future<void> loadCredentials() async {
try {
bool isAuthenticated = await localAuth.authenticate(
localizedReason: '로그인을 위해 생체 인증을 진행해주세요.',
options: const AuthenticationOptions(biometricOnly: true),
authMessages: const <AuthMessages>[
AndroidAuthMessages(
signInTitle: '생체 인증 로그인',
biometricHint: '지문을 스캔하거나 얼굴을 인식해주세요.',
biometricNotRecognized: '생체 정보가 일치하지 않습니다. 다시 시도해주세요.',
biometricRequiredTitle: '생체 인증 필요',
biometricSuccess: '인증 성공!',
cancelButton: '취소',
deviceCredentialsRequiredTitle: '생체 인증이 필요합니다.',
deviceCredentialsSetupDescription: '기기 설정에서 생체 인증을 등록해주세요.',
goToSettingsButton: '설정으로 이동',
goToSettingsDescription: '기기 설정에서 생체 인증을 등록해야 사용할 수 있습니다.',
),
IOSAuthMessages(cancelButton: 'No thanks'),
],
);
} on PlatformException catch (e) {
if (e.code == "user_cancel") {
Get.dialog();
}
} finally {
}
}
생체인증시 화면 캡쳐가 안되는 이유로 다른폰으로 찰칵!
위의 설정을 했는대도 아래와 같은 에러가 뜬다면 로직이 두번실행되는지 봐야합니다.
분기 처리로 두번실행되지 않도록 막아주세여!
PlatformException(auth_in_progress, Authentication in progress, null, null)
I/flutter (17913): #0LocalAuthAndroid.authenticate (package:local_auth_android/local_auth_android.dart:56:9)
반응형