새소식

iOS/Swift

[iOS] LocalAuthentication

  • -

LocalAuthentication


생체인식이나 이미 알고 있는 암호를 사용하여 사용자 인증

 

LocalAuthentication을 import 하고, LAcontext를 선언

import LocalAuthentication

private var context = LAContext()

 

인증 시도 함수

var error: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) {
    let reason = "Log in to your account"
    context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: reason) { [weak self] isSuccess, error in
        // 내부적으로 Face ID가 실패한 경우 자동으로 암호 입력
        // 성공하면 아래 DispatchQueue 실행
        if isSuccess {
            DispatchQueue.main.async { [weak self] in
                // 성공 시
            }
        } else {
            print(error?.localizedDescription ?? "Failed to authenticate")
        }
    }
} else {
    print(error?.localizedDescription ?? "Can't evaluate policy")
}

 

인증 오류 관련 처리 함수

// 인증 오류 메시지
func canEvaluatePolicyErrorMessage(_ errorCode : Int, _ context: LAContext) -> String{
        
        var message = String()
        
        switch(Int32(errorCode)){
            
            // 장치에서 생체 인증 사용 불가
        case kLAErrorBiometryNotAvailable:
            switch(context.biometryType){
                
            case LABiometryType.none:
                message = "Biometry Is Not Available"
                break
                
            case LABiometryType.touchID:
                message = "TouchID Permission False"
                break
                
            case LABiometryType.faceID:
                message = "FaceID Permission False"
                break
                
            default:
                message = "Biometry Sensor Not Recognized"
                break
            }
            break
            
            // TBD 실패가 너무 많아짐
        case kLAErrorBiometryLockout:
            switch(context.biometryType.rawValue){
                
            case 0:
                message = "Biometry Is Not Available".localized()
                break
                
            case 1, 2:
                message = "Biometry Is Locked".localized()
                break
                
            default:
                message = "Biometry Sensor Not Recognized".localized()
                break
            }
            
            break
            
            // 등록된 생체 인식 ID가 없음
        case kLAErrorBiometryNotEnrolled:
            switch(context.biometryType.rawValue){
            case 0:
                message = "Biometry Is Not Available"
                break
                
            case 1, 2:
                message = "Biometry Is Not Enrolled"
                break
                
            default:
                message = "Biometry Sensor Not Recognized"
                break
            }
            break
            
        default:
            message = "No Registered FaceID"
            break
        }
        return message
    }
    
    // 인증 실패 시
    func evaluatePolicyErrorMessage(_ errorCode: Int) -> String{
        
        var message = String()
        
        switch(Int32(errorCode)){
            
        case kLAErrorAuthenticationFailed:
            message = "Authentication Failure"
            break
            
        case kLAErrorAppCancel:
            message = "Authentication App Cancel"
            break
            
        case kLAErrorInvalidContext:
            message = "Context invalidated"
            break
            
        case kLAErrorNotInteractive:
            message = "Not Interactive UI Error"
            break
            
        case kLAErrorPasscodeNotSet:
            message = "Passcode Not Set"
            break
            
        case kLAErrorSystemCancel:
            message = "Authentication System Cancel"
            break
            
        case kLAErrorUserCancel:
            message = "Authentication User Cancel"
            break
            
        case kLAErrorUserFallback:
            message = "User Fallback"
            break
            
        default:
            message = "Not Managed Error"
            break
        }
        
        return message
    }

 

 

출처


 

 

Local Authentication | Apple Developer Documentation

Authenticate users biometrically or with a passphrase they already know.

developer.apple.com

 

[iOS - swift] 생체인증 페이스 아이디, 터치 아이디(Face ID, Touch ID)

Face ID 권한 요청 처음 Face ID 권한 요청을 위해 최초 한번 뜨는 alert touchID는 손가락을 댈때 인증이 시작하지만, FaceID는 폰과 얼굴을 마주보고 있어서 바로 인증이 진행되므로 필요 key: Privacy - Face

ios-development.tistory.com

728x90

'iOS > Swift' 카테고리의 다른 글

[Swift] Dispatch (2)  (0) 2024.01.07
[iOS] QR코드 리더기  (0) 2024.01.06
[Swift] URL, URLComponents  (0) 2023.12.30
[Swift] Dispatch (1)  (0) 2023.11.23
[Swift] RelativeDateTimeFormatter(상대시간)  (0) 2023.11.20
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.