2014-10-16 11 views
7

Yönergeleri ve Apple belgelerinden Touch ID API örneğini takip ettim. Uygulamamdaki örneği kullandım. Touch ID kullanarak giriş yapabildim. Ama problem onun duyarlılığı çok yavaş. Parmağımı Touch ID'ye koyduğumda, en az 10 saniye sonra başarıyı/başarısızlığı doğrulamak için beklemem gerekiyor. Kodu uygulama delegesi dosyasında kullandım. Farklı uygulamalarla da test ettim, ancak sonuç aynı "gecikmeli yanıt". Bu durumda bana yardım et lütfen.Dokunma Kimliği API'sı yanıtı çok yavaş

+0

Kodu kod sırasına yazmalı mıyım? – user4150758

+0

Bunu da fark ettim. Apple'ın örneğini takip ettim ve bu geri bildirimi almadan önce birkaç saniye alıyor. Birisinin bazı cevapları olduğunu umuyorum çünkü Apple'ın bu konudaki belgeleri yetersizdir. – Inertiatic

+0

Evet. Fakat 1password’un kusursuz bir şekilde nasıl yürüdüğünden emin değilim. – user4150758

cevap

22
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 
} 
+0

@vishal ... Teşekkürler. Kusursuz çalıştı :) – user4150758

+0

@ user4150758 welcome .. !! –

+0

, iş parçacığının blok yürütme işleminden sonra ne yaptığını açıklayabilir mi? – Rainelz

6

Başka}

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]; 
         } 
         }); 
        }]; 
} 

ile ana iş parçacığı alertviews gösterilecek olan diğer, UI şey yapmak zorunda söylediği gibi {

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

}

1

ana iş parçacığı üzerinde, Swift 3.0 için:

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