2015-06-02 124 views
3

我正在用登錄表單製作iOS應用程序(Obj-c)。我試圖找出是否有辦法使用Touch ID登錄。這對我的應用來說將是一個驚人的功能,但我找不到一種方法來實現它。 在最近的PayPal更新中,它們包括Touch ID登錄 - 所以有辦法做到這一點。登錄iOS的觸摸ID

編輯:我知道如何得到,如果用戶輸入正確的觸摸ID,但我不知道該怎麼做後。 如果用戶輸入他的用戶名,然後正確添加Touch ID,該怎麼辦?我怎麼知道這個用戶有這個Touch ID?

+0

http://code.tutsplus.com/tutorials/ios-8-integrating-touch-id--cms-21949 – luk2302

+0

試試這個:HTTP://www.sitepoint。 com/integrate-touch-id-ios-app/ – itsji10dra

+0

這不是我正在尋找的。這很清楚 - 我可以使用觸摸ID來查找這是設備所有者,但我想使用用戶Touch ID作爲LOGIN。 –

回答

5

好吧首先創建一個動作,像這樣:

我們需要更詳細的艱難,因爲我不知道你指的OBJ-C或SWIFT,我就張貼兩者。

對象 -

首先導入本地認證框架

#import <LocalAuthentication/LocalAuthentication.h>

然後我們創建一個IBAction爲,並添加以下代碼:

- (IBAction)authenticateButtonTapped:(id)sender { 
    LAContext *context = [[LAContext alloc] init]; 

    NSError *error = nil; 
    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { 
     [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics 
       localizedReason:@"Are you the device owner?" 
         reply:^(BOOL success, NSError *error) { 

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

     }]; 

    } else { 

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

    } 
} 

剛剛連接您的IBAction將提示認證的按鈕。

但是在斯威夫特你可以使用:

添加以下框架到您的項目:LocalAuthentication 然後將其導入您的快捷文件:

import LocalAuthentication 

然後創建下面的方法會提示你使用touch id:

func authenticateUser() { 
     // Get the local authentication context. 
     let context = LAContext() 

     // Declare a NSError variable. 
     var error: NSError? 

     // Set the reason string that will appear on the authentication alert. 
     var reasonString = "Authentication is needed to access your notes." 

     // Check if the device can evaluate the policy. 
     if context.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &error) { 
      [context .evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reasonString, reply: { (success: Bool, evalPolicyError: NSError?) -> Void in 

       if success { 

       } 
       else{ 
        // If authentication failed then show a message to the console with a short description. 
        // In case that the error is a user fallback, then show the password alert view. 
        println(evalPolicyError?.localizedDescription) 

        switch evalPolicyError!.code { 

        case LAError.SystemCancel.rawValue(): 
         println("Authentication was cancelled by the system") 

        case LAError.UserCancel.rawValue(): 
         println("Authentication was cancelled by the user") 

        case LAError.UserFallback.rawValue(): 
         println("User selected to enter custom password") 
         self.showPasswordAlert() 

        default: 
         println("Authentication failed") 
         self.showPasswordAlert() 
        } 
       } 

      })] 
     } 
     else{ 
      // If the security policy cannot be evaluated then show a short message depending on the error. 
      switch error!.code{ 

      case LAError.TouchIDNotEnrolled.rawValue(): 
       println("TouchID is not enrolled") 

      case LAError.PasscodeNotSet.rawValue(): 
       println("A passcode has not been set") 

      default: 
       // The LAError.TouchIDNotAvailable case. 
       println("TouchID not available") 
      } 

      // Optionally the error description can be displayed on the console. 
      println(error?.localizedDescription) 

      // Show the custom alert view to allow users to enter the password. 
      self.showPasswordAlert() 
     } 
    } 

最後從func viewDidLoad調用函數就像這樣:authenticateUser()

希望有所幫助。繼續編碼。

來源: 斯威夫特: App Coda iOS 8 Touch ID Api

的Objective-C: tutPlus iOS Touch ID

感謝馬特·洛根爲更新的SWIFT代碼。

+0

感謝您的回答,但我想使用指紋進行登錄。如果指紋是正確的,我該怎麼辦?讓用戶輸入該用戶名? –

+0

只需在其中快速記錄他的if成功方法。例如,務必輸入他的用戶名和密碼,或者提供所需的視圖控制器。 –

+0

或者obj-c代碼的if成功方法 –

1

我想我明白我必須做什麼! 第一個用戶登錄後,我將保存他的密碼(例如在NSUserdefaults)。

如果用戶想在下次登錄時使用他的Touch ID--我會問他Touch ID,如果是正確的,我會讓他在開始時保存密碼。

感謝朱利安:)

+0

想想第一次登錄。你在錯誤的軌道上 –

+0

歡迎你。如果您感到高興,請接受我的回答正確,以便其他人在面臨同樣問題時可以看到它。很高興我可以幫助:-) –

+0

還有一件事,如果你的應用程序包含一些用戶特定的數據,那麼它會創建問題區分用戶特定的數據,只有基於觸摸ID的登錄 –