質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1170閲覧

Xcode Face ID認証失敗時のパスワード入力画面

LATA-apple

総合スコア3

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/04/19 14:42

前提・実現したいこと

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

試したこと

検索してみましたが該当の機能を実装する方法が見つからず、現在に至ります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下のやり方でやってみてください。

@IBAction func startAuthentication(_ sender: Any) { let context = LAContext() var error: NSError? if context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthentication, error: &error) { var description: String! switch context.biometryType { case .faceID: description = "セキュリティに保護された情報を閲覧するためにFace IDを認証として用います。" break case .touchID: description = "セキュリティに保護された情報を閲覧するためにTouch IDを認証として用います。" break case .none: description = "セキュリティに保護された情報を閲覧するためにログインしてください。" break @unknown default: break } context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: description) { [unowned self] success, authenticationError in DispatchQueue.main.async { if success { } else { } } } } else { } }

投稿2021/04/19 23:24

tomato879241

総合スコア133

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問