iOS 지문 인식 - 바이오메트릭 인식

4535 단어

간단한 소개


4
  • 아이폰5s 지원이 시작됩니다

  • 4
  • iOS 8.0은 터치 ID의 인터페이스를 개방합니다.

  • 코드 준비

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    
        [self inputUserinfo];
    }
    
    ///        
    - (void)inputUserinfo {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"  " message:@"  " delegate:self cancelButtonTitle:@"  " otherButtonTitles:@"  ", nil];
        alertView.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
    
        [alertView show];
    }
    
    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
        NSLog(@"%zd", buttonIndex);
    
        if (buttonIndex == 0) {
            return;
        }
    
        UITextField *usernameText = [alertView textFieldAtIndex:0];
        UITextField *pwdText = [alertView textFieldAtIndex:1];
    
        if ([usernameText.text isEqualToString:@"zhang"] && [pwdText.text isEqualToString:@"123"]) {
            [self purchase];
        } else {
            [[[UIAlertView alloc] initWithTitle:@"  " message:@"        " delegate:nil cancelButtonTitle:@"  " otherButtonTitles:nil, nil] show];
        }
    }
    
    ///    
    - (void)purchase {
        NSLog(@"  ");
    }
    

    지문 인식


    헤더 파일

    #import 
    

    지문 인식 지원 여부 판단

    //     
    if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) {
        [self inputUserinfo];
        return;
    }
    
    //           
    LAContext *ctx = [[LAContext alloc] init];
    
    if ([ctx canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:NULL]) {
        NSLog(@"      ");
    
        //       
        [ctx evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"  " reply:^(BOOL success, NSError *error) {
            NSLog(@"%d %@ %@", success, error, [NSThread currentThread]);
            if (success) {
                [self purchase];
            } else if (error.code == LAErrorUserFallback) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    [self inputUserinfo];
                });
            }
        }];
        NSLog(@"come here");
    } else {
        [self inputUserinfo];
    }
    

    오류 번호


    잘못
    묘사
    LAErrorAuthenticationFailed
    지문이 인식되지 않음
    LAErrorUserCancel
    사용자가 "취소"단추를 눌렀다
    LAErrorUserFallback
    사용자가 취소하고 "비밀번호 입력"단추를 눌렀다
    LAErrorSystemCancel
    시스템이 취소되었습니다. 예를 들어 다른 프로그램이 활성화되었습니다.
    LAErrorPasscodeNotSet
    디바이스에 암호가 설정되어 있지 않으므로 확인을 시작할 수 없습니다.
    LAErrorTouchIDNotAvailable
    장치에 터치 ID가 없으므로 인증을 시작할 수 없습니다.
    LAErrorTouchIDNotEnrolled
    지문을 입력하지 않았기 때문에 검증을 시작할 수 없습니다.

    UIAlertController 사용

    - (void)inputUserInfo {
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"  " message:@"         " preferredStyle:UIAlertControllerStyleAlert];
    
        [alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
            textField.placeholder = @"      ";
        }];
        [alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
            textField.placeholder = @"       ";
            textField.secureTextEntry = YES;
        }];
    
        [alert addAction:[UIAlertAction actionWithTitle:@"  " style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
            [self dismissViewControllerAnimated:YES completion:nil];
        }]];
    
        [alert addAction:[UIAlertAction actionWithTitle:@"  " style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
            NSString *username = [alert.textFields[0] text];
            NSString *pwd = [alert.textFields[1] text];
    
            if ([username isEqualToString:@"zhang"] && [pwd isEqualToString:@"1"]) {
                [self purchase];
            } else {
                [self showErrorMsg];
            }
        }]];
    
        [self presentViewController:alert animated:YES completion:nil];
    }
    
    - (void)showErrorMsg {
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"  " message:@"         " preferredStyle:UIAlertControllerStyleAlert];
    
        [alert addAction:[UIAlertAction actionWithTitle:@"  " style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
            [self dismissViewControllerAnimated:YES completion:nil];
        }]];
    
        [self presentViewController:alert animated:YES completion:nil];
    }
    
    - (void)purchase {
        NSLog(@"  ");
    }
    

    좋은 웹페이지 즐겨찾기