2016-08-09 2 views
2

나는 로그인 ID로 터치 ID를 사용하는 앱을 개발 중입니다. 앱이 처음 출시 될 때만 터치 ID를 요청해야합니다 (예 : 앱이 백그라운드에서 전경에 들어가면 터치 ID 인증을 요청하지 않음). 여기에 내가 touchID을 표시 할 것입니다 :TouchID 오류 코드 : -1004 NSLocalizedDescription : 사용자 상호 작용이 필요합니다.

AppDelegate.swift : 내가 지금처럼 터치를 요청 LoginViewController의 viewDidAppear()에서 다음

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.swift :

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를 요구하는 경우

는 기본적으로이 오류가 발생하는 것을 말한다, 내가하지 않은 키 체인 유형으로 테스트 됨). 앱이 백그라운드에서 실행 중일 때 터치 ID가 표시되면 터치 할 수 없기 때문에 오류 메시지가 표시됩니다. 이 같은 경우는 당신과 함께 일어나는 경우

, 당신은 AppDelegate 방법을 다음과 같은 몇 가지 논리를 추가해야합니다 : 응용 프로그램이 포 그라운드에있는 경우에도이 아이폰 OS (10)에서 발생

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

는 내가 전에 그 질문을보고 작품 - 터치 ID는

  • UAT가 작동합니다. 그러나 AppDelegate의 백그라운드 모드를 나타내는 메소드에서 touchID 관련 코드를 수행하지 않습니다. touchID를 요청할 때만 앱이 처음 시작되었고 이번에는 'applicationWillEnterForeground'가 호출되지 않습니다. –

  • +0

    @ A.Buksha 그 게시물은 "앱이 백그라운드에서 깨어나고 코드의 어딘가에서 깨어나 Touch ID를 요청할 때"라고 말합니다. 즉, 사용자가 생체 인식을 제공하기 전에 앱이 백그라운드에서 전경으로 갈 수도 있습니다. – D4ttatraya

    +0

    동일한 오류가 발생합니다. 내 앱이 터치 ID를 묻는 지점에서 포 그라운드에 확실히 있습니다. – onnoweb

    3

    . 의견 중 하나에 안드로이드 Noob에서 언급했듯이.

    나는 더 많은 조사를했는데 동일한 제품/실행 파일 이름을 가진 여러 개의 앱이있는 경우에 문제가 있음을 발견했습니다.

    제 시나리오에는 번들 식별자와 표시 이름이 다른 동일한 앱 (코드) 3 가지 버전이 있습니다. 마지막으로 설치된 ID 중 하나만 터치 ID로 작업했습니다. 다른 사용자가 '사용자 상호 작용에 필요한 오류'를 반환했습니다.

    OP 문제에 관해서. 테스터가 동일한 실행 파일 이름을 가진 다른 앱을 기기에 설치했을 가능성이 큽니다. 앱 또는 다른 개발자의 앱의 다른 버전 일 수 있습니다.

    이 문제를 회피 실행 파일 또는 제품 이름을 변경하려면 : 대상 -> [대상 이름] -> 빌드 설정 -> 포장 -> 제품 이름

    내 테스트 및 결과 :

    동일한 코드 및 제품 이름이지만 번들 ID 및 표시 이름이 다른 3 개의 앱 (CI, UAT 및 Prod)이 제공됩니다.터치 ID 설치 UAT

    일 -

    • CI가 :

      CI가 설치

      • UAT - 터치 ID '사용자 상호 작용 실패 - 터치 ID는
      • CI 작동 필수 오류 '
      ,

      것은 생산성 설치 :

      • 생산성 - 터치 ID가 작동을
      • UAT - 터치 ID가 '필요한 사용자 상호 작용'
      • CI 오류와 함께 실패 - 터치 ID가 '필요한 사용자 상호 작용'오류와 함께 실패

      제거 생산성 :

      • UAT - 터치 ID 작품 (그러나 때문에 문맥을 잃은 것 같다 가)
      • CI를 응용 프로그램의 이름을 표시하지 않습니다 - 터치 ID의 작품 (하지만 응용 프로그램 이름)

      제거 UAT 및 CI를 표시하지 않기 때문에 손실 문맥을 갖고있는 것 같아요, 다시 CI :

        -
      • CI 터치 ID는

      변경 UAT 제품 이름 및 설치 UAT 작동 :

      • CI는 - 터치 ID
    +0

    위대한 발견들 ... 고맙습니다. 이것은 나를 많이 도왔다. – nacho4d

    관련 문제