[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
}
출처
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 |