2016-08-09 4 views
2

ログイン用のタッチIDを使用するアプリで作業しています。最初の起動時にのみタッチIDを要求する必要があります(アプリがバックグラウンドからフォアグラウンドに入るときにタッチID認証を要求しません)。ここで私はtouchIDを表示するために何をすべきかです:TouchIDエラーコード:-1004 NSLocalizedDescription:ユーザーのやりとりが必要です

AppDelegate.swift:

LoginViewController.swift:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    let loginViewController = storyboard.instantiateViewControllerWithIdentifier("login") as! LoginViewController 
    rootViewController = loginViewController 
    let navigationController = UINavigationController(rootViewController: rootViewController) 
    window!.rootViewController = navigationController 
} 

その後LoginViewControllerのviewDidAppear()で、私はそうのようなタッチを求めます

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    let context = LAContext() 
    if context.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: nil) { 
     context.evaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, 
             localizedReason: NSLocalizedString("Login To Your Account", comment: ""), 
             reply: { [weak self] (success, error) in 
      dispatch_async(dispatch_get_main_queue(), { 
      if success { 
       self?.loginUser() 
      } else if error!.code != LAError.UserCancel.rawValue { 
       self?.focusOnPassword() 
      } else 
      }) 
     }) 
    } else { 
     loginUser() 
    } 
} 

テスターの中には、n TouchIDアラートをまったく受け取れません。すぐにパスワード画面が表示されます。エラーログを追加しました。エラーは次のようになります。

Domain: com.apple.LocalAuthentication Code: -1004 NSLocalizedDescription: User interaction is required. 

私はそれをまったく再現できません。 Touch IDはすべてのテストデバイスで正常に動作するため、その理由がわかりません。 iPhone 6、6S、6s Plus、iOS 9.3.1-9.3.3からバグが届きました。

答えて

0

チェックアウトthis SO post regarding the same issue

答えはアプリがバックグラウンドからウェイクアップされ、どこかにあなたのコードの上にあなたが(私の場合は、ローカル認証タイプですタッチIDを求めているとき

は基本的にこのエラーが発生したことを言って、私はそうではありませんキーチェーンタイプでテスト済み)。アプリがバックグラウンドで実行されている間にTouch IDの入力を要求されるため、エラーメッセージは表示されません。

この同じ場合もあなたと一緒に起こっている場合は、あなたがAppDelegate方法を以下にいくつかのロジックを追加する必要があります。

- (void)applicationWillEnterForeground:(UIApplication *)application 
+0

に動作します。しかし、AppDelegateのメソッドでは、バックグラウンドモードのtouchID関連コードは実行しません。私がtouchIDを求める時間は、アプリケーションが最初に起動されたときで、今回は 'applicationWillEnterForeground'が呼び出されることはありません。 –

+0

@ A.Bukshaこの記事では、「あなたのアプリがバックグラウンドから目覚めてコードのどこかで目を覚ましたときにTouch IDを要求しています」というメッセージが表示されます。 – D4ttatraya

+0

同じエラーが発生します。私のアプリは間違いなくタッチIDを要求するところで前景にいる。 – onnoweb

3

これは、アプリケーションがフォアグラウンドにあるときでもiOSの10で発生します。コメントの1つにAndroid Noobで述べたように。

私はさらに調査を行い、同じ製品名または実行可能ファイル名を持つ複数のアプリを持っている場合に発生することが判明しました。

私のシナリオでは、異なるバンドルIDと表示名を持つ同じアプリケーション(コード)の3つのバージョンがありました。それらのうち、最後にインストールされたものの1つだけがTouch IDで作業しました。他のユーザーが「ユーザー対話に必要なエラー」を返しました。

OPの問題についてテスターに​​は、デバイスにインストールされている同じ実行可能名の別のアプリがある可能性があります。これはあなたのアプリや別の開発者のアプリの別のバージョンかもしれません。

あなたの実行可能ファイルまたは製品名を変更し、問題を回避するには、次のターゲット - > [ターゲット名] - > [設定]をビルド - >梱包 - >製品名

私のテストや調査結果:

同じコードと製品名で、バンドルIDと表示名が異なる3つのアプリケーション(CI、UAT、Prod)が指定されています。タッチIDインストールUAT

作品 -

  • CIは:

    CIがインストール

    • UAT - タッチID「ユーザーとの対話で失敗 - タッチIDは
    • CIの作品必要なエラー

    は、製品版のインストール:

    • のProd - タッチIDが機能を
    • UAT - タッチのIDは、 '必要なユーザーとの対話'
    • CIエラーで失敗する - タッチIDが '必要なユーザーとの対話' というエラーで失敗し

    アンインストールのProd:

    • UAT - タッチIDが動作します(ただしので、文脈を失っているようです

        :、タッチIDが動作します(ただし、それはアプリケーション名が表示されませんので、文脈を失っているようだ)

      アンインストールUATとCI CIを再インストールしてください - それは

    • CIに)アプリ名が表示されません。
    • CI - タッチIDが

    変更UATの製品名を動作し、UATをインストールします。

    • CI - タッチIDが
    • UATの作品 - タッチIDは私が前にその質問を見た
+0

素晴らしい発見...ありがとう。これは私を助けました。 – nacho4d

関連する問題