[Swift] LocalAuthentication을 사용해 생채 인증 구현

Harry Lee·2024년 11월 3일
0
post-thumbnail

스냅 사진, 자기 관리와 같은 개인정보 보호를 위해 생체인증을 사용해 앱 잠금을 구현하는 방법을 정리해보려고 한다. 이 과정은 LocalAuthentication 프레임워크를 기반으로 구현하였다.

Info.plist 설정

생체인증을 사용하려면 Info.plist 파일에 아래의 키를 추가해야 한다.
키 값은 Face ID 사용을 허용하기 위한 설명 문구이고 처음으로 Face ID를 요청할 때 사용자에게 표시된다. 배포 시 리젝당하지 않게 인증 목적을 명확하게 써주어야한다.

생체인증 함수 구현

LocalAuthenticationViewModel 클래스의 execute 메소드에서 인증 관리를 한다.

final class LocalAuthenticationViewModel {
    static func execute(completion: @escaping (Bool, Error?) -> Void) {
        let context = LAContext()
        var error: NSError?
        
        if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) {
            context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "인증이 필요합니다.") { (response, error) in
                if let error = error {
                    self.handleAuthenticationError(error: error as NSError)
                }
                completion(response, error)
            }
        } else {
            print("Local Authentication is not available")
        }
    }
}
  • canEvaluatePolicy: 인증을 수행하기 전 생체인증 가능 여부를 확인하는 메서드. 인증 메커니즘이 지원되지 않는 경우나 설정이 되어 있지 않은 경우를 걸러준다.
  • evaluatePolicy: 실제 인증을 수행하는 메서드.

앱 잠금 상태 확인

SceneDelegate에서 UserDefaults에 저장된 appLockState 값을 통해 앱 잠금 기능이 켜져 있는지 확인한다. 잠금 기능은 앱 내에 설정 화면의 토글을 통해 ON/OFF가 가능하도록 하였으며 ON으로 설정하면 UserDefaults에 appLockState 값이 true로 저장된다.

let appLockState = UserDefaults.standard.bool(forKey: "appLockState")
      if appLockState {
          LocalAuthenticationViewModel.execute { (success, error) in
              if success {
                  self.showMainScreen()
              }

테스트

시뮬레이터에 Face ID Enrolled 후 테스트 가능

인증 성공시

인증 실패시

profile
A keyboard player

0개의 댓글