[iOS] LocalAuthentication
2024. 1. 6. 14:56
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
}
출처
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 |