FaceID 지원하도록 기존 코드를 migration 하기

내일이면 1차 출시국에는 iPhone X 이 사용되기 시작하겠군요. (슬픕니다..)

아시다시피 iPhone X에서는 기존의 생체 인증 장치인 Touch ID 가 아닌 얼굴을 인식하는 Face ID만 지원됩니다.
사용자의 단말에 내장된 생체 인증 장치가 Touch ID인지 Face ID인지 구분은 어떻게 하지? 뭔가 다른 걸 해줘야하나? 란 고민에 빠지셨으니 이 글을 보고 계신거겠죠?

이미 Touch ID를 구현하여 사용하고 계시다면 사실 큰 고민이 필요없습니다. LAContext 클래스의 구조는 기존과 거의 동일하니까요.
다른 점은 아래에 나열해보겠습니다.

info.plist에 안내 문구 명시하기.

Touch ID를 앱 내에서 사용할 때. 즉, LAContext 의 evaluate 메소드가 호출될 때는 아무런 안내 문구가 없었습니다. Touch ID 가 evaluate 될 때 얼럿이 나타나니까요.
하지만 Face ID는 얼럿이 아니라 얼굴 모양의 뷰가 뜨며, 문구를 정의할 수 없도록 되어 있습니다. 그렇다보니 앱 내에서 최초로 활성화 될 때 아래처럼 권한 허용 안내문구가 뜹니다.

그런데, 문구가 개발자 입장에서 참 기분 나쁜 문구죠.. (저만 그런가요…?)
이 부분은 info.plist에 아래와 같이 필드를 추가하면 됩니다.

<key>NSFaceIDUsageDescription</key>
<string>금전 이동 및 본인 확인을 위해서 사용됩니다.</string>

Touch ID / Face ID 구분하기.

LAContext 클래스를 살펴보시면 biometryType 이란 프로퍼티가 존재합니다. 이 프로퍼티는 iOS11 부터 사용이 가능해서 조금 성가시긴 합니다만
이보다 더 중요한 것은 canEvaluatePolicy:error: 메소드를 호출한 후에 제대로 된 값이 리턴이 된다는 점입니다.

끝입니다.

덧붙임

  1. iOS 11.1 기준 Simulator에서 iPhone X 으로 LAContext evaluate 메소드 호출 시 간헐적으로 “Lost connection to coreauthd.” 오류가 나타납니다만 버그라고 합니다. (애플 포럼 참고)
  2. Touch ID 는 유저의 인증을 받을 때 UIAlert 기반으로 evaluate 시 입력한 reason이 description에 나타나지만, Face ID는 이 reason을 무시합니다. 버그 아니랍니다.

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.