iOS 지문 로그 인(Touch ID)통합 방안 상세 설명

TouchID 지문 인식 은 아이 폰 5S 기기 에 추 가 된 중대 한 기능 이다.애플 의 후속 모 바 일 기기 에 도 지문 기능 이 추가 되 어 실제 사용 에 있어 상당히 편리 하 다.예 를 들 어 빠 른 로그 인,빠 른 결제 등 이다.시스템 은 해당 하 는 프레임 워 크 를 제공 하고 사용 하기에 비교적 편리 하 다.LAContext 대상 을 사용 하면 지문 인식 을 완성 하고 사용자 체험 을 향상 시 킬 수 있다.

알림:지문 인식 은 반드시 실제 컴퓨터 로 테스트 하고 iOS 8 이상 시스템 에서 해 야 합 니 다.
TouchID API 사용
1.헤더 파일 추가
#import
2.시스템 버 전 판단

 //      
if (NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0) {
  NSLog(@"       TouchID");
  return;
}
3.LAPolicy
여기 서 간단히 LAPolicy 를 소개 합 니 다.이것 은 매 거 진 것 입 니 다.우 리 는 자신의 필요 에 따라 LAPolicy 를 선택 합 니 다.이것 은 두 개의 값 을 제공 합 니 다.
LAPolicy DeviceOwner Authentication With Biometrics 와 LAPolicy DeviceOwner Authentication.
<1>.LAPolicy DeviceOwner Authentication With Biometrics 는 iOS 8 이상 을 지원 하 는 시스템 으로 이 장치 의 TouchID 를 사용 하여 검증 합 니 다.TouchID 인증 을 5 번 입력 하 는 데 실 패 했 을 때 TouchID 가 잠 겨 잠 금 후 장 치 를 잠 글 때 정확 한 잠 금 해제 암 호 를 입력 하여 TouchID 를 풀 수 있 습 니 다.
<2>.LAPolicy DeviceOwner Authentication 은 iOS 9 이상 을 지원 하 는 시스템 으로 이 장치 의 TouchID 나 장치 비밀 번 호 를 사용 하여 검증 합 니 다.TouchID 인증 을 5 번 입력 하 는 데 실패 하면 TouchID 가 잠 겨 장치 암호 페이지 를 터치 하여 검증 합 니 다.
4. canEvaluatePolicy
canEvaluate Policy 방법 으로 장치 가 TouchID 를 지원 하 는 지 판단 하고 BOOL 을 YES 로 되 돌려 줍 니 다.이 장 치 는 TouchID 를 지원 합 니 다.

 if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
error 는 인증 오류 코드 를 되 돌려 줍 니 다.구체 적 으로 설명 하지 않 습 니 다.
5. evaluatedPolicyDomainState
context.evaluated Policy DomainState 는 장치 의 지문 이 변경 되 었 는 지 판단 하 는 데 사 용 됩 니 다.LAContext 가 생 성 되 었 을 때 evaluated Policy DomainState 가 효력 이 발생 합 니 다.TouchID 인증 이 성공 할 때 기록 하여 다음 에 TouchID 를 사용 할 때 검증 하고 안전성 을 높 일 수 있 습 니 다.
6. evaluatePolicy
evaluate Policy 방법 은 TouchID 를 검증 하 는 것 입 니 다.Block 리 셋 에서 success 가 YES 이면 검증 에 성공 하고 NO 검증 에 실 패 했 으 며 error 를 분석 합 니 다.

- (IBAction)loginButtonClick:(UIButton *)sender {
  
 //      
 if (NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0) {
  NSLog(@"       TouchID");
  return;
 }
  
  
 LAContext *context = [[LAContext alloc] init];
 context.localizedFallbackTitle = @"    ";
 if (@available(iOS 10.0, *)) {
//  context.localizedCancelTitle = @"22222";
 } else {
  // Fallback on earlier versions
 }
 NSError *error = nil;
 
 if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
   
  [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"  Home         " reply:^(BOOL success, NSError * _Nullable error) {
    
   if (success) {
    dispatch_async(dispatch_get_main_queue(), ^{
     NSLog(@"TouchID     ");
    });
   }else if(error){
     
    switch (error.code) {
     case LAErrorAuthenticationFailed:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID     ");
      });
      break;
     }
     case LAErrorUserCancel:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID        ");
      });
     }
      break;
     case LAErrorUserFallback:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"     TouchID,        ");
      });
     }
      break;
     case LAErrorSystemCancel:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID       (     ,  ,  Home  )");
      });
     }
      break;
     case LAErrorPasscodeNotSet:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID     ,          ");
      });
     }
      break;
     case LAErrorTouchIDNotEnrolled:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID     ,        TouchID");
      });
     }
      break;
     case LAErrorTouchIDNotAvailable:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID   ");
      });
     }
      break;
     case LAErrorTouchIDLockout:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID    (      TouchID  ,            )");
      });
     }
      break;
     case LAErrorAppCancel:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"              ( App      )");
      });
     }
      break;
     case LAErrorInvalidContext:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"              (LAContext    )");
      });
     }
      break;
     default:
      break;
    }
   }
  }];
   
 }else{
  NSLog(@"       TouchID");
 }
}
위의 이 코드 는 전체 TouchID 의 핵심 이자 거의 모든 코드 입 니 다.
검증 하 다.
검증 은 반드시 실제 컴퓨터 를 사용 해 야 한다.

결실

입력 오류
요약:TouchID 를 사용 하 는 것 은 어렵 지 않 습 니 다.중요 한 것 은 절차 논 리 를 사용 하 는 것 입 니 다.
로그 인 을 예 로 들 면 일반적으로 절 차 는 다음 과 같다.
  • 지문 로그 인 오픈:첫 로그 인 시 비밀번호 로 로그 인 합 니 다.로그 인 후 지문 ID 로그 인 버튼 을 눌 러 지문 인증 을 할 수 있 습 니 다.
  • 검증:TouchID 를 지원 하 는 지 확인 합 니 다.
  • 장치 계 정/비밀번호 생 성:TouchID 인증 이 통과 되면 현재 로그 인 한 계 정과 하드웨어 장치 Token 에 따라 장치 계 정/비밀번호(규칙 은 스스로 정할 수 있 고 비밀 번 호 는 길 어야 복잡 합 니 다)를 생 성하 고 keychain 에 저장 합 니 다.
  • 바 인 딩:장치 계 정/비밀 번 호 를 생 성 한 후 원래 계 정과 장치 계 정/비밀 번 호 를 암호 화한 후(문제 주 는 RSA 암호 화 를 사용)서버 에 보 내 바 인 딩 합 니 다.
  • 성공:원래 계 정과 설비 계 정의 유효성 을 검증 한 후 해당 상태 로 돌아 가 고 귀속 성공 시 전체 TouchID(설비)귀속 절 차 를 완성 합 니 다.
  • 이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기