안녕하세요. iOSangBong입니다.
프로젝트를 진행하다보니 로그인 프로세스에
생체인식(Face ID / Touch ID)을 적용해야됐었는데요!
이때 겪었던 경험을 공유하고자 합니다.
애플에서 제공하는 LocalAuthentication을 사용해보겠습니다.
https://developer.apple.com/documentation/localauthentication/lacontext
LAContext | Apple Developer Documentation
A mechanism for evaluating authentication policies and access controls.
developer.apple.com
일단 LocalAuthentication을 import 해줍니다.

그 다음 생채인식을 사용하는 함수를 만들어보도록 하겠습니다.

생체인식을 위해 LAContent()를 선언해준다음
canEvaluatepolicy로 생체인식 사용유무를 체크해줍니다.
여기서 저는
deviceOwnerAuthenticationWithBiometrics를 사용했는데
암호입력을 사용하시려면
deviceOwnerAuthentication를 사용하셔야됩니다.
withBiometrics를 사용해도 암호입력이 나오긴하지만

암호입력을 클릭시 do-try-catch문에서 error로 떨어지며
아무런 액션이 일어나지 않습니다.
그 다음
저는 async await를 사용해서 evaluatePolicy를 이용해서
성공시 Bool 값을 반대로 바꿔줬습니다.
이때는 DispatchQueue.main.async로 메인쓰레드에서
실행하게 만들어줍니다.
안그러면 컴파일에러가 나더라구요,,
또한 localizedReason에
“생체인식 안태 텍스트입니다.”를 해놓았는데요
TouchID & OpticID(비전프로)에서는
해당 텍스트가 잘 나오더라구요
현재 대부분 사용하는 기기가 FaceID기반이라고는
하지만 신경써야될 부분입니다. 한번 확인하시는게 좋을듯 하네요
이런식으로 간단하게 생체인식 하는 방법을 알아봤는데요...
기획서는 역시 좀더 심화적인 내용을 원하더라구요
그래서 좀더 찾아봤는데
일단 요구하는 화면은 아래와 같습니다.

이런식으로 암호입력을 없애는 걸 요구했습니다.
암호입력을 사용하고 싶지 않을 경우
LAContext를 선언해준 다음
localizedFallbackTitle을
“” 빈값으로 두면
됩니다

혹은 암호입력 버튼 없애지 않고 싶다면
다른 텍스트 값을 넣어주면 됩니다.
또한 취소 텍스트 대신 다른 텍스트를 넣고싶다면
localizedCancelTitle을 다른 값으로 넣어주면 됩니다.

이 프로젝트를 진행하면서
FaceID, TouchID, OpticID(비전프로) 까지 테스트를 해보았습니다.
OpticID는 FaceID의 인식되는 아이콘이 눈모양이더라구요
조금 신기했습니다ㅋㅋ
이렇게 생체인증 LocalAuthentication에 대해 알아보았는데요~
이걸 프로젝트에 잘 활용해보셨으면 좋겠습니다~!
참고를 위해 코드를 올려 놓겠습니다.
import SwiftUI
import LocalAuthentication
struct ContentView: View {
@State var isToggle: Bool = false
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text(self.isToggle ? "Hello, 상봉" : "Hello, world!")
}
.onTapGesture(perform: {
self.checkBioAuth()
})
}
func checkBioAuth() {
let context = LAContext()
context.localizedFallbackTitle = ""
context.localizedCancelTitle = "iOSangBong"
var error: NSError?
guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else {
return
}
Task {
do {
try await context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "생체인식 안내 텍스트입니다.")
DispatchQueue.main.async {
self.isToggle.toggle()
}
}
catch let error {
print(error)
print(error.localizedDescription)
}
}
}
}
이전 포스팅을 하고 거의 1년만인데요..
모든게 하기싫고 게임만했던ㅋㅋ 무기력 했던것 같네요
이제 마음을 다잡고 다시 포스팅을 하려고 합니다 ㅎㅎ
자주 찾아와주세요~!
그럼 다들 즐코딩하세요. 그럼 이만~!
'Swift' 카테고리의 다른 글
[iOS][Swift] shake motion 알아보기 (0) | 2023.08.22 |
---|---|
[iOS][Swift] 'keyWindow' was deprecated 간단하게 해결하기 (0) | 2023.08.11 |
[iOS][Swift] NWPathMonitor 네트워크 간단하게 감지하기 (0) | 2023.07.26 |
[iOS][Swift] MQTT 간단하게 연결하기 (0) | 2023.07.22 |
[iOS][Swift] QR Code 간단하게 만들기 (0) | 2023.07.12 |
안녕하세요. iOSangBong입니다.
프로젝트를 진행하다보니 로그인 프로세스에
생체인식(Face ID / Touch ID)을 적용해야됐었는데요!
이때 겪었던 경험을 공유하고자 합니다.
애플에서 제공하는 LocalAuthentication을 사용해보겠습니다.
https://developer.apple.com/documentation/localauthentication/lacontext
LAContext | Apple Developer Documentation
A mechanism for evaluating authentication policies and access controls.
developer.apple.com
일단 LocalAuthentication을 import 해줍니다.

그 다음 생채인식을 사용하는 함수를 만들어보도록 하겠습니다.

생체인식을 위해 LAContent()를 선언해준다음
canEvaluatepolicy로 생체인식 사용유무를 체크해줍니다.
여기서 저는
deviceOwnerAuthenticationWithBiometrics를 사용했는데
암호입력을 사용하시려면
deviceOwnerAuthentication를 사용하셔야됩니다.
withBiometrics를 사용해도 암호입력이 나오긴하지만

암호입력을 클릭시 do-try-catch문에서 error로 떨어지며
아무런 액션이 일어나지 않습니다.
그 다음
저는 async await를 사용해서 evaluatePolicy를 이용해서
성공시 Bool 값을 반대로 바꿔줬습니다.
이때는 DispatchQueue.main.async로 메인쓰레드에서
실행하게 만들어줍니다.
안그러면 컴파일에러가 나더라구요,,
또한 localizedReason에
“생체인식 안태 텍스트입니다.”를 해놓았는데요
TouchID & OpticID(비전프로)에서는
해당 텍스트가 잘 나오더라구요
현재 대부분 사용하는 기기가 FaceID기반이라고는
하지만 신경써야될 부분입니다. 한번 확인하시는게 좋을듯 하네요
이런식으로 간단하게 생체인식 하는 방법을 알아봤는데요...
기획서는 역시 좀더 심화적인 내용을 원하더라구요
그래서 좀더 찾아봤는데
일단 요구하는 화면은 아래와 같습니다.

이런식으로 암호입력을 없애는 걸 요구했습니다.
암호입력을 사용하고 싶지 않을 경우
LAContext를 선언해준 다음
localizedFallbackTitle을
“” 빈값으로 두면
됩니다

혹은 암호입력 버튼 없애지 않고 싶다면
다른 텍스트 값을 넣어주면 됩니다.
또한 취소 텍스트 대신 다른 텍스트를 넣고싶다면
localizedCancelTitle을 다른 값으로 넣어주면 됩니다.

이 프로젝트를 진행하면서
FaceID, TouchID, OpticID(비전프로) 까지 테스트를 해보았습니다.
OpticID는 FaceID의 인식되는 아이콘이 눈모양이더라구요
조금 신기했습니다ㅋㅋ
이렇게 생체인증 LocalAuthentication에 대해 알아보았는데요~
이걸 프로젝트에 잘 활용해보셨으면 좋겠습니다~!
참고를 위해 코드를 올려 놓겠습니다.
import SwiftUI
import LocalAuthentication
struct ContentView: View {
@State var isToggle: Bool = false
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text(self.isToggle ? "Hello, 상봉" : "Hello, world!")
}
.onTapGesture(perform: {
self.checkBioAuth()
})
}
func checkBioAuth() {
let context = LAContext()
context.localizedFallbackTitle = ""
context.localizedCancelTitle = "iOSangBong"
var error: NSError?
guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else {
return
}
Task {
do {
try await context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "생체인식 안내 텍스트입니다.")
DispatchQueue.main.async {
self.isToggle.toggle()
}
}
catch let error {
print(error)
print(error.localizedDescription)
}
}
}
}
이전 포스팅을 하고 거의 1년만인데요..
모든게 하기싫고 게임만했던ㅋㅋ 무기력 했던것 같네요
이제 마음을 다잡고 다시 포스팅을 하려고 합니다 ㅎㅎ
자주 찾아와주세요~!
그럼 다들 즐코딩하세요. 그럼 이만~!
'Swift' 카테고리의 다른 글
[iOS][Swift] shake motion 알아보기 (0) | 2023.08.22 |
---|---|
[iOS][Swift] 'keyWindow' was deprecated 간단하게 해결하기 (0) | 2023.08.11 |
[iOS][Swift] NWPathMonitor 네트워크 간단하게 감지하기 (0) | 2023.07.26 |
[iOS][Swift] MQTT 간단하게 연결하기 (0) | 2023.07.22 |
[iOS][Swift] QR Code 간단하게 만들기 (0) | 2023.07.12 |