Touch ID API响应速度非常慢

时间:2014-10-16 18:04:27

标签: ios objective-c authentication touch-id

我已遵循指南以及Apple文档中的Touch ID API示例。我在我的应用程序中使用了该示例。我可以使用Touch ID登录。但问题是它的响应速度非常慢。在我将手指放在Touch ID上之后,至少10秒钟我必须等待验证成功/失败。我已经在app delegate文件中使用了代码。我也测试了不同的应用程序,但结果是相同的"延迟响应"。在这种情况下,伙计们请帮助我。

3 个答案:

答案 0 :(得分:23)

LAContext *myContext = [[LAContext alloc] init];

NSError *authError = nil;

NSString *myLocalizedReasonString = <#String explaining why app needs authentication#>;

if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {

    [myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
              localizedReason:myLocalizedReasonString
                        reply:^(BOOL success, NSError *error) { 

                            if (success) {
                                   // User authenticated successfully, take appropriate action
                                   dispatch_async(dispatch_get_main_queue(), ^{
                                          // write all your code here
                               });
                            } else {
                                   // User did not authenticate successfully, look at error and take appropriate action

                               switch (error.code) {
                                   case LAErrorAuthenticationFailed:
                                       NSLog(@"Authentication Failed");
                                       break;

                                   case LAErrorUserCancel:
                                       NSLog(@"User pressed Cancel button");
                                       break;

                                   case LAErrorUserFallback:
                                       NSLog(@"User pressed \"Enter Password\"");
                                       break;

                                   default:
                                       NSLog(@"Touch ID is not configured");
                                       break;
                               }

                               NSLog(@"Authentication Fails");
                            }
                        }];
} else {
    // Could not evaluate policy; look at authError and present an appropriate message to user
}

答案 1 :(得分:7)

您必须使用

在主线程中显示警报视图
dispatch_async(dispatch_get_main_queue(), ^{ 
//update ui
});

LAContext *context = [[LAContext alloc] init];

NSError *error = nil;

if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
// Authenticate User

NSError *error = nil;
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
  [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
          localizedReason:@"Please verify that you are the device owner in order to place the order"
                    reply:^(BOOL success, NSError *error) {
                      dispatch_async(dispatch_get_main_queue(), ^{
                        if (error) {
                          UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                                          message:@"There was a problem verifying your identity."
                                                                         delegate:nil
                                                                cancelButtonTitle:@"Ok"
                                                                otherButtonTitles:nil];
                          [alert show];
                          return;
                        }

                        if (success) {
                          UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success"
                                                                          message:@"You are the device owner!"
                                                                         delegate:nil
                                                                cancelButtonTitle:@"Ok"
                                                                otherButtonTitles:nil];
                          [alert show];

                        } else {
                          UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                                          message:@"You are not the device owner."
                                                                         delegate:nil
                                                                cancelButtonTitle:@"Ok"
                                                                otherButtonTitles:nil];
                          [alert show];
                        }
                      });
                    }];
}

}其他{

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                message:@"Your device cannot authenticate using TouchID."
                                               delegate:nil
                                      cancelButtonTitle:@"Ok"
                                      otherButtonTitles:nil];
[alert show];

}

答案 2 :(得分:1)

正如其他人所说,你必须在主线程上做UI事情,对于Swift 3.0来说:

myContext.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: myLocalizedReasonString) { (success, evaluateError) in
            DispatchQueue.main.async {
                    if (success) {
                        //success
                    } else {
                        //failure
                    }
                }
            }