터치아이디와 페이스아이디 복습하세요!!(AppleWatch 인증 없음)

20441 단어 iOSSwifttech

경로 코드 인증, 터치 ID 인증, faceID 인증...
4번째 인증 AppleWatch 인증
iOS 14.5는 아직 어플리케이션에서 사용할 수 없습니다.
말은 그렇지만 여기서 복습하고 인증하는 것도 괜찮을 것 같아요.
Mac면 이전부터 사용했죠.

info.plist에 추가



일단 추가해.NSFaceIDUsageDescription 키만 추가합니다.
Xcode에서 "Prevacy-Face ID Usage Description"으로 표시됩니다.

InfoPlist.strigs로 제작된 현지화 제품을 잊지 마세요.
info.plist에 추가하지 않아도 FaceID에 대한 라이센스가 표시됩니다.
하지만 "Face ID가 지원되지 않을 수 있음"등의 메시지가 표시됩니다.조심해.

실제로 써 내려가다🖋


import LocalAuthentication
LocalAuthentication는 미리 가져와야 합니다.

어떤 생물 측정을 사용할 수 있는지 검사하다



아이폰X(10) 이후 단말기는 터치 ID가 아닌 페이스 ID다.biometryType 이 설비가 가지고 있는 생물 측정을 나타낸다.
case .touchID
터치 ID를 사용할 수 있습니다.
case .faceID
faceID를 사용할 수 있습니다.
case .none
사용할 수 있는 생물 측정은 존재하지 않습니다.
초기 값은 입니다.는 none이며 LAContext에서 처리하지 않으면 초기 값이 유지됩니다.
따라서 사용해야 한다canEvaluatePolicy.
let context = LAContext()
var error: NSError?

if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
  
  switch context.biometryType {
  case .touchID:
    // touchID が使える場合
  case .faceID:
    // faceID が使える場合
  default:
    // 新たな生体認証が増えた場合、呼ばれる可能性あり
    break
  }
  
} else {
  // 生体認証が使えない場合(faceID を許可していない場合)
  print("BiometryType Error: " + (error?.localizedDescription ?? "Unknown Error"))
}
생물 측정을 허가하지 않은 경우
User has denied the use of biometry for this app.
이런 코드는 확인할 수 있다.
biometryType는 iOS 11 이후 추가됐다.(그 전에는 터치 ID만 있었다)
iOS 10 이전을 지원하는 경우에도 다음 작업이 필요합니다.
・・・
if #available(iOS 11.0, *) {
  switch context.biometryType {
  case .touchID:
    // touchID が使える場合
  case .faceID:
    // faceID が使える場合
  default:
    // 新たな生体認証が増えた場合、呼ばれる可能性あり
    break
  }
} else {
  // touchID のみ
}
・・・

인증 실행



let context = LAContext()
let localizedReason = "ロックの解除に、認証を使用します。"
context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: localizedReason, reply: {success, error in
  if success {
    // 認証成功時の処理
  } else {
    // キャンセルされた場合
    print("Authenticate Cancel: " + (error?.localizedDescription ?? "Unknown Error"))
  }
})
참고로 사용자가 취소 버튼을 누르면
Canceled by user.
되돌아오다error.
policy
인증 방법.
상세한 상황은 아래와 같다.
localizedReason
인증 화면에 표시된 인증 요청 이유(텍스트).
상세한 상황은 아래와 같다.
reply
인증이 끝났을 때 호출된 블록입니다.
​ success
인증 성공 시true실패하거나 취소된 경우false.
​ error
인증 성공 시nil.
실패하거나 취소된 경우에만 돌아갑니다.

1. 인증 방법


LAPolicy, 인증 방법을 지정할 수 있습니다.그나저나 iOS는 두 가지밖에 없다.
Case
rawValue
iOSdeviceOwnerAuthenticationWithBiometrics바이오메트릭 측정(TouchID 또는 FaceID)
1
iOS 8~deviceOwnerAuthenticationWithWatchAppleWatch 인증
3
지원되지 않음deviceOwnerAuthenticationWithBiometricsOrWatch바이오메트릭 또는 AppleWatch
4
지원되지 않음deviceOwnerAuthenticationApple Watch(iOS 불가), 바이오메트릭 측정, 경로 코드 중 하나
2
iOS 9~
애플 워치 인증, 맥OS 한정된 것 같다.
'deviceOwnerAuthenticationWithWatch' is unavailable in iOS
\1. 'deviceOwnerAuthenticationWithWatch' has been explicitly marked unavailable here (LocalAuthentication.LAPolicy)
아이폰도 iOS 14.5부터 새로 실시(잠금 해제)했기 때문에 며칠 지나면 앱도 사용할 수 있는데...?
(...라고요?)

deviceOwner Authentication의 경우



생물 측정을 한 후 실패하면 경로 코드 인증을 선택할 수 있습니다.
FaceID를 사용하지 않으면 경로 코드 인증이 건너뜁니다.

d e v i c e Ow e r Au t hentication WithBiometrics의 경우



생체 측정(TouchID 또는 FaceID)만 수행됩니다.
더 정확히 말하면 비밀번호를 입력할 수 없는 설정이다.
따라서 두 가지 주의점이 있다.
  • [경로 코드 입력]을 숨깁니다.

  • 인증이 실패하면 암호를 입력할 수 있는 항목이 표시됩니다.
    Fallback authentication mechanism selected.
    눌러도 아무것도 안 나와.
    iOS 9부터 시작하는 것 같은데.
    let context = LAContext()
    context.localizedFallbackTitle = ""
    
    localizedFallbackTitle가 비어 있으면 표시되지 않습니다.
    이쪽은 나무랄 데가 없잖아.
  • FaceID를 무효화하면 즉시 취소합니다.

  • User has denied the use of biometry for this app.
    생물 측정을 사용할 수 없다면 본래 이 처리를 하지 않는 것이 비교적 안전하다.
    아니면, 잘못된 내용에 따라 따로 처리하거나... 등.

    2. 인증의 사용 목적


    인증 시 이유를 표시합니다.
    FaceID를 사용할 때는 확인할 수 없지만 터치 ID 및 암호를 입력할 때는 표시됩니다.
    let context = LAContext()
    let localizedReason = "ロックの解除に、認証を使用します。"
    

    ※ 이미지 부분 현지화.


    상술한 내용만 있으면 처리가 완성된다.
    상세한 내용에 주의한 부분은 다음과 같이 요약한다.

    취소 사유에 따라 분리 처리하다


    let context = LAContext()
    let localizedReason = "ロックの解除に、認証を使用します。"
    context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: localizedReason, reply: {success, error in
      
      if let error = error {
        switch LAError(_nsError: error as NSError).code {
        case .appCancel:
          // システムによるキャンセル① アプリのコード
        case .systemCancel:
          // システムによるキャンセル② システム
        case .userCancel:
          // ユーザーによってキャンセルされた場合
        case .biometryLockout:
          // 生体認証エラー① 失敗制限に達した際のロック
        case .biometryNotAvailable:
          // 生体認証エラー② 許可していない
        case .biometryNotEnrolled:
          // 生体認証エラー③ 生体認証IDが1つもない
        case .authenticationFailed:
          // 認証に失敗してエラー
        case .invalidContext:
          // システムによるエラー① すでに無効化済み
        case .notInteractive:
          // システムによるエラー② 非表示になっている
        case .passcodeNotSet:
          // パスコード認証エラー① パスコードを設定していない
        case .userFallback:
          // パスコード認証エラー② LAPolicyによって無効化
        default:
          // そのほかの未対応エラー
        }
      } else if success {
        // 認証成功時の処理
      } else {
        // 予期せぬエラーの場合
      }
      
      if !success {
        print("Authenticate Cancel: " + (error?.localizedDescription ?? "Unknown Error"))
      }
    })
    
    LAError.code
    까닭
    설명.appCancel시스템 취소invalidate()에서 명시적으로 비활성화된 경우.systemCancel시스템 취소
    응용 프로그램을 닫을 때.userCancel사용자가 취소한 경우
    사용자가 취소 버튼을 눌렀을 때(다른 이유가 있어도 취소 버튼을 눌렀을 때).biometryLockout생물 측정 오류
    인증 실패 횟수가 일정 횟수에 도달하면 생물 측정이 잠긴 상태.biometryNotAvailable생물 측정 오류
    생체측정(FaceID) 라이센스가 거부된 경우.biometryNotEnrolled생물 측정 오류
    바이오메트릭 ID(FaceID 또는 TouchID)가 없는 경우.authenticationFailed인증 실패, 오류
    인증 실패 시?(취소 버튼.userCancel을 눌러 확인하지 않음).invalidContext시스템 오류
    비활성화된 Context를 invalidate()에 사용하는 경우.notInteractive시스템 오류interactionNotAllowedtrue, 인증 UI를 표시할 수 없음.passcodeNotSet경로 코드 인증 오류
    경로 코드가 설정되지 않은 경우.userFallback경로 코드 인증 오류
    LAPolicy가 경로 코드 인증을 사용하지 않는 유형인 경우 [경로 코드 입력]을 눌러도 인증 화면이 표시되지 않습니다.
    장치 내 상황으로 인한 오류, 코드 등으로 인한 시스템 오류의 절반 정도가 아닐까.
    실제적으로 사용하는 것은 상반부다.
    .biometryLockout 등 생체측정 관련 오류는 iOS 11에서 기존 항목에서 교체됐다.
    iOS 10 이전에는 터치 ID만 있었습니다.
    아래의 오래된 항목은 현재 추천하지 않습니다.
    case .touchIDNotAvailable:
      // touchID認証エラー① 失敗制限に達した際のロック
    case .touchIDNotEnrolled:
      // touchID認証エラー② 許可していない
    case .touchIDLockout:
      // touchID認証エラー③ touchIDが1つもない
    

    시뮬레이터 방법


    [Features]→[Face ID]→[Enrolled]로 인증할 수 있습니다.
    인증 성공 동작.
    인증 실패 동작 [Non-matching Face].

    터치 ID 터미널에서 FaceID가 아닌 터치 ID입니다.
    방법은 거의 같다.

    참고 자료


  • LAContext //Apple Developer
    자세한 건 여기 있습니다.
  • 응용 프로그램의 터치 ID를 사용하는 사용자 인증
  • Face ID와 Touch ID의 대응이 의외로 간단합니다.qiita

  • iOS 10에서 필요한 사용자 데이터에 액세스하기 위한 로컬화된 문
    InfoPlist.strings(Info.plist의 현지화)에 대한 기사입니다.
    에..?본편과 상관없어...??
  • 그러니까


    터미널 내에서 완성된 인증이기 때문에 설치 자체가 매우 간단하다.
    조잡하게 쓴 것이기 때문에 세심하지 못한 점이 있으면 반드시 쓰십시오.
    AppleWatch 인증은 아직 응용 프로그램에서 사용할 수 없습니다.(향후 사용 여부는 불분명)
    그렇긴 하지만 추가 가능성이 있다면 들여다보는 게 좋을 것 같다.
    밖에서 마스크를 써야 하는 지금은 페이스ID가 별로 유용하지 않다.
    그래서 애플워치 인증에 큰 도움이 됐는데...
    매우 편리합니다.네.
    그렇긴 하지만 잠금 해제 이외에도 (프로그램 포함) 사용할 수 없습니다.
    참, 터치 ID 아직 부활 안 했나요?🤔

    좋은 웹페이지 즐겨찾기