-
반응형
설치
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)
반응형'flutter' 카테고리의 다른 글
pub.dev - flutter package publish (패키지 올리기) (1) 2025.03.06 Flutter WebView 버전 이슈 대응 (1) 2025.02.20 RiverPod 배우기 (0) 2025.02.13 PlatformException(VideoError, Failed to load video: Operation Stopped, null, null) (0) 2025.02.12 Flutter - ios 인앱 결제 (1) 2025.01.09