티스토리 뷰
안녕하세요.
요즘은 로그인 할때 비밀번호 외에도 여러가지 방법이 있죠?
물론 저번의 패턴 잠금도 있지만 오늘은 많이 쓰이는 생체 인식을 알아보려고 합니다.
생채인식이란?
- 신체 부위를 이용해서 자신임을 증명하는 방법을 의미합니다.
- 현재 지원해주는 종류는 지문(TouchID) / 얼굴 (FaceID) / 홍채 (OpticID) 이렇게 3가지 입니다.
- 각 휴대폰에서 지원해주는 종류(지문/얼굴/홍채)에 따라 사용이 가능합니다.
- 홍채 (OpticID) 는 iOS 17부터 지원해줍니다. (나머지는 iOS 11부터)
필요 권한
- 당연히 Apple 에서 제공해주는 기능인 만큼 권한을 받아야 합니다
- NSFaceIDUsageDescription 를 Info.plist 에 넣어줍니다.
기본 준비
- 생각보다 간단하게도 아래 한줄을 추가하시면 간단히 사용이 가능합니다.
- 이름 보면 아시겠지만 단순 신체인증 뿐 아니라 다른 인증에도 관여하는 친구입니다.
import LocalAuthentication // 생체 인식
// 줄여서 LA
- 그리고 편한 사용을 위해 따로 클래스랑 변수 하나를 선언해 줄께요.
import LocalAuthentication
// 생체 인증에 관한 처리 정리
class BioUtil{
static let context = LAContext()
//인증 정책과 엑세스를 제어해주는 도구
}
- 이제 이 안에다가 함수를 채워가겠습니다.
내 기기에서 지원해주는 종류 확인
- 정말 종류만 확인하는 방법입니다.
- 참고로 시뮬레이터에 돌리시면 LABiometryType.none이 발생합니다.
// 타입 확인
static func getBioType(){
let type = self.context.biometryType
switch type{
case LABiometryType.none:
print("Nothing") // 없음
break
case LABiometryType.faceID: // ios 11
print("Face") // 얼굴인식
break
case LABiometryType.touchID: //ios 11
print("Finger") //지문인식
break
case LABiometryType.opticID: //ios 17 부터 지원
print("Optic") // 홍채
break
default:
print("I don't know")
break
}
}
인증 사용 가능 여부 확인
- 옵션에 따라 해당 인증을 진행할 수 있는지를 알려줍니다.
- 필요에 따라 왜 인증이 안되는지 오류코드로 알 수 있습니다.
- 만약 나는 오류 코드는 알 필요없다 하시는 분은 nil 넣으시면 됩니다.
- deviceOwnerAuthenticationWithBiometrics : 생체인증을 사용한 인증
- deviceOwnerAuthentication : 생체인증이 안되면 비밀번호같은 다른 인증도 가능
static func canBioAuth()->Bool{
// error 를 알 필요 없는 경우
return self.context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil)
// deviceOwnerAuthenticationWithBiometrics : 생체 인증을 사용한 인증
// deviceOwnerAuthentication : 인증 그 자체 생체인증 안되면 딴걸로
// 기본 리턴 값은 Bool
}
static func canBioAuth()->Bool{
var newError : NSError? = nil
let result = self.context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &newError)
let errorArray = [LAError.appCancel,LAError.authenticationFailed,LAError.biometryLockout,LAError.biometryNotAvailable,LAError.biometryNotEnrolled,LAError.invalidContext,LAError.notInteractive,LAError.passcodeNotSet,LAError.systemCancel,LAError.userCancel,LAError.userFallback]
if !result{
for error in errorArray{
if(LAError(_nsError: newError!).code == error){
print(error) // 어떤 오류인지 알고 싶은 경우
}
}
}
return result
}
- 시뮬레이터에서 돌려보면 아래처럼 보이게 됩니다.
- 참고로 각 오류 코드가 의미하는 것은 아래 링크를 참고해주세요.
https://developer.apple.com/documentation/localauthentication/laerror-swift.struct/code
LAError.Code | Apple Developer Documentation
Errors issued by the LocalAuthentication framework.
developer.apple.com
인증 진행하기
- 정작 인증을 실행하는 방법을 안 적었네요.
- 생각보다 간단한데 아래처럼 작성하고 (저는 생체인증만 쓸거니까 deviceOwnerAuthenticationWithBiometrics 로 할께요.)
static func startBioAuth(completion: @escaping (Bool)->Void){
self.context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "인증을 진행하는 이유", reply: {suc,err in
if(err != nil){
print(err as Any) //오류 뱉기
}
completion(suc)
})
}
- 사용할 곳에 아래처럼 넣어주시면 작동합니다.
BioUtil.startBioAuth(){suc in
print(suc)
}
- 시뮬레이터에 넣으면 False 떨어집니다 (오류코드가 뜨긴 하지만 앱이 꺼지거나 하지는 않아요)
실제로 해보면 처음에는 권한 창이 뜨고
얼굴 인식이 진행되게 됩니다
(근데 이거 빨라서 캡쳐가 힘들어요;;;)
아무튼 잘 작동하는 것 같네요.
저처럼 궁금한 분들에게 도움이 되길 바라며
그럼 오늘도 파이팅입니다.
'iOS개발 > Swift 기본' 카테고리의 다른 글
App Groups 에 대해 알아보자 (0) | 2024.07.19 |
---|---|
iOS 13 미만 AppDelegate / SceneDelegate 설정 (0) | 2024.06.27 |
Swift 컴파일 조건 추가하기 (#if 사용법과 뜻) (0) | 2024.03.29 |
Swift Shadow(그림자) 설정 알아보기 (0) | 2024.02.27 |
UICollectionView reloadData 이후 이벤트 처리 (0) | 2023.09.18 |