dev/flutter
flutter - local_auth, 지문인증, Unresolved reference: activity
wlrn566
2023. 8. 2. 13:12
1. 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
2. AndroidManifest.xml에 권한 추가
<uses-permission android:name="android.permission.USE_BIOMETRIC"/>
3. MainActivity.kt 파일 수정
// class MainActivity: FlutterActivity()
// FlutterFragmentActivity로 바꿔준다.
class MainActivity: FlutterFragmentActivity()
4. 생채인증 관련 코드 구현
import 'dart:developer';
import 'package:flutter/services.dart';
import 'package:local_auth/local_auth.dart';
class LocalAuth {
late LocalAuthentication auth;
LocalAuth() {
auth = LocalAuthentication();
}
/// 기기 지원 여부 확인
Future<bool> checkDeviceSupported() async {
try {
return auth.isDeviceSupported();
} on PlatformException catch (e) {
log(e.message.toString());
return false;
}
}
/// 생체인증 가능 여부 확인
Future<bool> checkBiometrics() async {
try {
return await auth.canCheckBiometrics;
} on PlatformException catch (e) {
log(e.message.toString());
return false;
}
}
/// 등록된 바이오인증 목록 구하기
Future<List<BiometricType>> getAvailableBiometrics() async {
try {
return await auth.getAvailableBiometrics();
} on PlatformException catch (e) {
log(e.message.toString());
return [];
}
}
/// 생채인증
Future<bool> authenticate() async {
try {
return await auth.authenticate(
localizedReason: '생체인증',
options: const AuthenticationOptions(
stickyAuth: true,
),
);
} on PlatformException catch (e) {
log(e.message.toString());
return false;
}
}
}
5. 메세지 수정
authMessages 속성을 사용하면 된다.
import 'package:local_auth_android/local_auth_android.dart';
import 'package:local_auth_ios/local_auth_ios.dart';
/// 생체인증
Future<bool> authenticate() async {
try {
return await auth.authenticate(
authMessages: const <AuthMessages>[
AndroidAuthMessages(
signInTitle: '안드로이드 생체인증',
cancelButton: '취소',
),
IOSAuthMessages(
cancelButton: '취소',
),
],
localizedReason: '생체인증을 시도합니다.',
options: const AuthenticationOptions(
stickyAuth: true,
),
);
} on PlatformException catch (e) {
log(e.message.toString());
return false;
}
}
Unresolved reference: activity / Unresolved reference: context 오류
FlutterActivity()를 사용했을 때 activity 또는 context는 그냥 activity, context 를 사용하면 되지만,
FlutterFragmentActivity() 에서는 this, applicationContext 로 변경해줘야 한다.
...
ActivityCompat.requestPermissions(activity, permissions, PERMISSION_CODE)
...
// 아래로 변경
...
ActivityCompat.requestPermissions(this, permissions, PERMISSION_CODE)
...