前提・実現したいこと
XcodeでFaceIDまたはTouchIDを使用したログインを実装しようとしているのですが、通常複数回認証失敗した際にパスワードを入力する画面が表示されると思うのですが、そのボタンを押しても反応することなく終わってしまうのですがどう記述し直せば”パスコードを入力”でiPhoneのパスコード入力画面を表示できるのでしょうか。
発生している問題・エラーメッセージ
エラーメッセージなし
該当のソースコード
Swift
1import UIKit 2import LocalAuthentication 3 4class okViewController: UIViewController { 5 6 @IBOutlet weak var statusLabel: UILabel! 7 @IBOutlet var nextButton: UIButton! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 nextButton.isEnabled = false 12 statusLabel.text = "認証ボタンを押してくだい。" 13 14 // Do any additional setup after loading the view. 15 } 16 17 @IBAction func startAuthentication(_ sender: Any) { 18 let context = LAContext() 19 var error: NSError? 20 var description: String! 21 22 // Touch ID・Face IDが利用できるデバイスか確認する 23 if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) { 24 switch context.biometryType { 25 case .faceID: 26 description = "セキュリティに保護された情報を閲覧するためにFace IDを認証として用います。" 27 break 28 case .touchID: 29 description = "セキュリティに保護された情報を閲覧するためにTouch IDを認証として用います。" 30 break 31 case .none: 32 description = "セキュリティに保護された情報を閲覧するためにログインしてください。" 33 break 34 @unknown default: 35 break 36 } 37 // 利用できる場合は指紋・顔認証を要求する 38 context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: description, reply: {success, evaluateError in 39 if (success) { 40 // 認証成功時の処理を書く 41 DispatchQueue.main.async { 42 self.statusLabel.text = "認証成功" 43 self.statusLabel.textColor = UIColor.systemBlue 44 self.nextButton.isEnabled = true 45 self.statusLabel.text = "認証ボタンを押してくだい。" 46 self.nextButton.isEnabled = false 47 self.statusLabel.textColor = UIColor.label 48 self.performSegue(withIdentifier: "go", sender: nil) 49 } 50 } else { 51 // 認証失敗時の処理を書く 52 DispatchQueue.main.async { 53 self.statusLabel.text = "認証失敗" 54 self.statusLabel.textColor = UIColor.systemRed 55 self.nextButton.isEnabled = false 56 } 57 } 58 }) 59 } else { 60 // Touch ID・Face IDが利用できない場合 61 context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "テスト認証") { success, error in 62 if (success) { 63 // 認証成功時の処理を書く 64 DispatchQueue.main.async { 65 self.statusLabel.text = "認証成功" 66 self.statusLabel.textColor = UIColor.systemBlue 67 self.nextButton.isEnabled = true 68 self.statusLabel.text = "認証ボタンを押してくだい。" 69 self.nextButton.isEnabled = false 70 self.statusLabel.textColor = UIColor.label 71 self.performSegue(withIdentifier: "go", sender: nil) 72 } 73 } else { 74 // 認証失敗時の処理を書く 75 DispatchQueue.main.async { 76 self.statusLabel.text = "認証失敗" 77 self.statusLabel.textColor = UIColor.systemRed 78 self.nextButton.isEnabled = false 79 } 80 } 81 print(success) 82 } 83 } 84 } 85 override func didReceiveMemoryWarning() { 86 super.didReceiveMemoryWarning() 87 // Dispose of any resources that can be recreated. 88 } 89 90 @IBAction func next(_ sender: Any) { 91 statusLabel.text = "認証ボタンを押してくだい。" 92 nextButton.isEnabled = false 93 statusLabel.textColor = UIColor.label 94 } 95 96 97 /* 98 // MARK: - Navigation 99 100 // In a storyboard-based application, you will often want to do a little preparation before navigation 101 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 102 // Get the new view controller using segue.destination. 103 // Pass the selected object to the new view controller. 104 } 105 */ 106 107} 108
試したこと
検索してみましたが該当の機能を実装する方法が見つからず、現在に至ります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。