2015-04-18 5 views
5

Ich habe eine AVCaptureDevice, um eine Live-Kamera-Vorschau auf dem Bildschirm anzuzeigen.Touch-ID friert ein AVCaptureDevice

Wenn eine Touch-ID-Ansicht in die Kameravorschau eingeblendet wird (unter Verwendung der CAContextevaluatePolicy), wird die Kameravorschau eingefroren. Wenn die Touch ID-Ansicht ausgeblendet wird, blinkt vor dem Neustart in der Kameravorschau ein schwarzer Bildschirm.

Sowohl das Einfrieren als auch der Schwarzbildblitz sind problematisch. Wie kann ich die Kameravorschau bei überlagerter Touch ID-Ansicht am Leben erhalten?

+0

Ich vermute, dass Apple die App wirklich übernimmt, wenn der Touch ID-Bildschirm angezeigt wird. Ich weiß, dass meine App keine Rotationsmethoden erhält, und ich weiß auch, dass der Touch ID-Bildschirm nicht einmal Teil der Ansichtshierarchie ist, wenn Sie Ihre App mit einem visuellen Inspector wie Reveal.app untersuchen. Hoffe, das hilft ... –

+1

Wow, ich wusste nicht, Dinge wie Reveal App existiert. Scheint nützlich zu sein. – Randomblue

+0

Es ist ein erstaunliches Produkt. Vieles von dem, was es tut, kann jetzt in Xcode getan werden, aber nicht auf einem Gerät, und wenn Sie Video aufnehmen oder Touch ID verwenden, benötigen Sie ein echtes Gerät. –

Antwort

4

Ich bin mir nicht sicher, dass dies möglich ist. Die App scheint die Kontrolle zu verlieren, wenn der Touch ID-Alarm auf dem Bildschirm angezeigt wird. Ich weiß, dass unsere App keine Rotationsereignisse erhält, wenn das Dialogfeld geöffnet ist, und ich weiß, wenn ich die Ansichtshierarchie mit Reveal.app untersuche, sehe ich die Touch ID-Ansicht in meiner Hierarchie nicht.

Können Sie die Kamera im Hintergrundmodus ausführen? Das könnte den Trick bringen, aber ich denke nicht, dass die Kamera im Hintergrund erlaubt ist.

+0

Was genau meinen Sie mit "Kontrolle verlieren"?Weil die App mit Touch ID in den Status "applicationWillResignActive" wechselt und in diesem Zustand die Kamera normalerweise weiterläuft (z. B. wenn der Benutzer die Home-Taste zweimal antippt). – Randomblue

+0

Ok, ich habe versucht, die Kamera im Hintergrundmodus laufen zu lassen (beide mit 'dispatch_async' und' addOperationWithBlock'). Friert immer noch ein. – Randomblue

+1

applicationDidResignActive ist was ich meinte. Geht es dahin? Es hört sich so an und die Kamera läuft in diesem Zustand, es sei denn, Touch ID ist aktiv. Das stinkt nach dir. –

1

Ich stimme Paul Cezanne zu, ich glaube nicht, dass Sie die Erfassung durchführen können, während der TouchID-Prozess aktiv ist. Obwohl ich weder in den Dokumenten noch in den Header-Dateien bestimmte Informationen sehe, können Sie durch einige Tests sehen, was passiert.

Zuerst wird die TouchID-Eingabeaufforderung außerhalb Ihres Prozesses ausgeführt.
1. Führen Sie Ihre TouchID-fähige App auf einem Gerät im Debugger aus.
2. Rufen Sie die App auf, um die TouchID-Eingabeaufforderung anzuzeigen.
3. Pausieren Sie in Xcode die App.

Normalerweise wäre die App auf dem Gerät eingefroren, aber in diesem Fall können Sie den Dialog weiterhin mit Ihrem Fingerabdruck oder der Abbrechen-Schaltfläche schließen. Sobald Sie die TouchID-Eingabeaufforderung schließen, wird die App wie erwartet angehalten.

Legen Sie einen Haltepunkt im Callback von evaluatePolicy fest. Übernehmen Sie TouchID mit Ihrem Fingerabdruck und Sie werden sehen, dass der Block von CoreAuthentication.daemon aufgerufen wird.

-[ViewController startTouchID:]_block_invoke at .../testTouchIDThreadding/testTouchIDThreadding/ViewController.m:60 
-[LAContext evaluatePolicy:options:reply:]_block_invoke() /*THIS IS MY BLOCK*/ 
... 
-[NSXPCConnection _sendInvocation:withProxy:remoteInterface:withErrorHandler:timeout:userInfo:]_block_invoke310() 
... 
Enqueued from com.apple.NSXPCConnection.m-user.com.apple.CoreAuthentication.daemon (Thread 3)Queue : com.apple.NSXPCConnection.m-user.com.apple.CoreAuthentication.daemon (serial) 
... 

Da TouchID nutzt die Gerätehardware des Fingerabdrucks und vergleichen Sie es mit dem Druck auf dem Chip gespeichert lesen Ich denke, das den Zugriff auf andere Geräte Hardware beschränken muss, während der Prozess ausgeführt wird.

Aus Ihrer Erfahrung und einer Test-App, die ich gerade zusammengeworfen habe, scheint das wahr zu sein. Ich habe die Kamera mit UIImagePickerController geöffnet und während ich geöffnet habe, habe ich laContext evaluatePolicy: ... aufgerufen und die Aufnahme der Kamera angehalten.

Also zusammenfassend, wenn Sie die TouchID Validierung verwenden:
- Ihr Prozess ist immer noch die aktiven App, aber Sie haben aus Ihrem Prozess namens
- Apple Beschränkung des Zugriffs auf die Gerätehardware für die Dauer