今回はタッチIDの認証を使ってログインするようなアプリを作る場合の実装について書いていきます。
「ログイン画面
タッチID認証
次の画面」
のように画面遷移をする場合です。





注意点としては、タッチIDによる認証はサブスレッドで実行されるため、そのメソッドの中で画面遷移のような描画処理を実装してしまうと画面の表示更新が遅くなりちゃんと描画されない状態になってしまいます。
なので、performSegueWithIdentifierなどで画面遷移をする場合はメインスレッドへディスパッチしてから呼び出してください。
以下が、タッチIDボタンを押下して認証して画面遷移するメソッドの実装です。
// TouchIDによるログインボタン
@IBAction func loginTouchID(sender: AnyObject) {
let context = LAContext()
var message = ""
var error :NSError?
let localizedReason = "Authentication of login."
// TouchID認証はサブスレッドで実行される
if context.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &error){
//TocuhIDに対応している場合
context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: localizedReason, reply: {
success, error in
if success {
// 画面遷移はmainスレッドで実行する
self.dispatch_async_main {
self.incorrectPwTimes = 0
self.performSegueWithIdentifier("listViewSegue", sender: nil)
}
} else {
switch error!.code {
case LAError.AuthenticationFailed.rawValue:
message = "Authentication failure."
case LAError.UserCancel.rawValue:
message = "Authentication has been canceled."
case LAError.UserFallback.rawValue:
message = "Select the password input."
case LAError.PasscodeNotSet.rawValue:
message = "Passcode is not set."
case LAError.SystemCancel.rawValue:
message = "It has been canceled by the system."
default:
message = "Unknown error."
return
}
self.dispatch_async_main {
self.navigateLabel.text = message
}
}
})
}else{
//TocuhIDに対応していない場合
navigateLabel.text = "It does not correspond to TouchID."
}
}
// mainスレッドへのディスパッチ
func dispatch_async_main(block: () -> ()) {
dispatch_async(dispatch_get_main_queue(), block)
}
最近リリースしたアプリ「パスワードメモ」で実装しているので、ぜひ使ってみてください!
レビューも待ってますっ。
「ログイン画面
タッチID認証
次の画面」のように画面遷移をする場合です。





注意点としては、タッチIDによる認証はサブスレッドで実行されるため、そのメソッドの中で画面遷移のような描画処理を実装してしまうと画面の表示更新が遅くなりちゃんと描画されない状態になってしまいます。
なので、performSegueWithIdentifierなどで画面遷移をする場合はメインスレッドへディスパッチしてから呼び出してください。
以下が、タッチIDボタンを押下して認証して画面遷移するメソッドの実装です。
// TouchIDによるログインボタン
@IBAction func loginTouchID(sender: AnyObject) {
let context = LAContext()
var message = ""
var error :NSError?
let localizedReason = "Authentication of login."
// TouchID認証はサブスレッドで実行される
if context.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &error){
//TocuhIDに対応している場合
context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: localizedReason, reply: {
success, error in
if success {
// 画面遷移はmainスレッドで実行する
self.dispatch_async_main {
self.incorrectPwTimes = 0
self.performSegueWithIdentifier("listViewSegue", sender: nil)
}
} else {
switch error!.code {
case LAError.AuthenticationFailed.rawValue:
message = "Authentication failure."
case LAError.UserCancel.rawValue:
message = "Authentication has been canceled."
case LAError.UserFallback.rawValue:
message = "Select the password input."
case LAError.PasscodeNotSet.rawValue:
message = "Passcode is not set."
case LAError.SystemCancel.rawValue:
message = "It has been canceled by the system."
default:
message = "Unknown error."
return
}
self.dispatch_async_main {
self.navigateLabel.text = message
}
}
})
}else{
//TocuhIDに対応していない場合
navigateLabel.text = "It does not correspond to TouchID."
}
}
// mainスレッドへのディスパッチ
func dispatch_async_main(block: () -> ()) {
dispatch_async(dispatch_get_main_queue(), block)
}
最近リリースしたアプリ「パスワードメモ」で実装しているので、ぜひ使ってみてください!
レビューも待ってますっ。