Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 리팩토링
- Human interface guide
- collectionview
- map
- Clean Code
- ribs
- RxCocoa
- combine
- 리펙터링
- SWIFT
- Xcode
- swift documentation
- tableView
- Observable
- Protocol
- 스위프트
- UITextView
- MVVM
- uitableview
- rxswift
- 클린 코드
- swiftUI
- HIG
- 애니메이션
- Refactoring
- uiscrollview
- ios
- UICollectionView
- clean architecture
- 리펙토링
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 생체인증 페이스 아이디, 터치 아이디(Face ID, Touch ID) 본문
Face ID 권한 요청
- 처음 Face ID 권한 요청을 위해 최초 한번 뜨는 alert
- touchID는 손가락을 댈때 인증이 시작하지만, FaceID는 폰과 얼굴을 마주보고 있어서 바로 인증이 진행되므로 필요
- key: Privacy - Face ID Usage Description
- value: 사용자에게 표출되는 안내 문구
- Face ID 인증 alert
- value값 문구 정의 주의
- Face ID 인증을 사용할 땐 문구에 접근하는 이유를 명확히 할 것 (Touch ID는 필요 x)
구현 방법
- LocalAuthentication 임포트
import LocalAuthentication
- LAContext() 인스턴스 생성
- 앱과 Secure Enclave를 연결해주는 인스턴스
- App과 Secure Enclave
- 인증 결과 관련 델리게이트
public protocol AuthenticateStateDelegate: AnyObject {
/// loggedIn상태인지 loggedOut 상태인지 표출
func didUpdateState(_ state: BiometricsAuth.AuthenticationState)
}
- 모듈 구현
public class BiometricsAuth {
public enum AuthenticationState {
case loggedIn
case LoggedOut
}
public weak var delegate: AuthenticateStateDelegate?
private var context = LAContext()
init() {
configure()
}
private func configure() {
/// 생체 인증이 실패한 경우, Username/Password를 입력하여 인증할 수 있는 버튼에 표출되는 문구
context.localizedCancelTitle = "Enter Username/Password"
}
public func execute() {
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
self?.delegate?.didUpdateState(.loggedIn)
}
} else {
print(error?.localizedDescription ?? "Failed to authenticate")
}
}
} else {
print(error?.localizedDescription ?? "Can't evaluate policy")
}
}
}
사용
- 최초 인증 시도 - alert 표출
- face id 인증 작동
- 실패한 경우
- 여러번 실패한 경우 - 암호 입력 버튼 생성, 또 Face ID로 실패한 경우 바로 암호 입력창으로 이동
* 전체 소스 코드: https://github.com/JK0369/ExFaceIDTouchID
* 참고
Integrating Face ID/ Touch ID: https://medium.com/swift2go/integrating-face-id-touch-id-in-ios-78da7080f742
apple document:
'iOS 응용 (swift)' 카테고리의 다른 글
Comments