2015-04-18 34 views
5

Ho un AVCaptureDevice per visualizzare un'anteprima della telecamera dal vivo sullo schermo.Touch ID si blocca AVCaptureDevice

Quando una vista Touch ID è sovrapposta all'anteprima della fotocamera (utilizzando CAContext's evaluatePolicy), l'anteprima della fotocamera si blocca. Quando la vista Touch ID viene chiusa, l'anteprima della videocamera lampeggia una schermata nera prima di riavviare.

Sia il congelamento che il flash dello schermo nero sono problematici. Come posso mantenere viva l'anteprima della fotocamera con la vista Touch ID sovrapposta?

+0

Sospetto che Apple prenda realmente il controllo dell'app quando viene visualizzata la schermata Touch ID. So che la mia app non ha metodi di rotazione e so anche che quando si esamina la tua app con un ispettore visivo come Reveal.app la schermata Touch ID non fa parte della gerarchia della vista. Spero che questo aiuti ... –

+1

Wow, non mi ero reso conto che esistessero cose come Reveal App. Sembra utile – Randomblue

+0

È un prodotto straordinario. Molto di ciò che fa può essere fatto in Xcode ora, ma non su un dispositivo, e se stai catturando video o utilizzando Touch ID hai bisogno di un dispositivo reale. –

risposta

4

Non sono sicuro che sia possibile. L'app sembra perdere il controllo quando sullo schermo viene visualizzato l'avviso Touch ID. So che la nostra app non riceve eventi di rotazione quando la finestra di dialogo è attiva, e so quando esamino la gerarchia della vista con Reveal.app non vedo la vista Touch ID nella mia gerarchia.

È possibile eseguire la fotocamera in modalità sfondo? Questo potrebbe fare il trucco, ma non credo che l'uso della fotocamera sia permesso in background.

+0

Cosa intendi esattamente per "perdere il controllo"?Poiché l'app entra nello stato 'applicationWillResignActive' con Touch ID, e di solito in quello stato la telecamera continua a funzionare (ad esempio se l'utente tocca due volte il pulsante home). – Randomblue

+0

Ok, ho provato a far funzionare la fotocamera in modalità background (entrambi con 'dispatch_async' e' addOperationWithBlock'). Si blocca ancora. – Randomblue

+1

applicationDidResignActive è ciò che intendevo. Ci arriva? Sembra che funzioni, e che la telecamera funzioni in quello stato, a meno che Touch ID non sia attivo. Puzza per te. –

1

Sono d'accordo con Paul Cezanne, non penso che si possa fare l'acquisizione mentre il processo TouchID è attivo. Mentre non vedo alcuna informazione specifica nei documenti o nei file di intestazione, attraverso alcuni test puoi vedere cosa sta succedendo.

In primo luogo, il prompt TouchID è in esecuzione al di fuori del processo.
1. Avviare l'applicazione abilitata per TouchID su un dispositivo nel debugger.
2. Ottenere l'applicazione per visualizzare il prompt TouchID.
3. In Xcode, mettere in pausa l'app.

Normalmente, l'app viene congelata sul dispositivo, ma in questo caso è comunque possibile utilizzare l'impronta digitale o il pulsante Annulla per chiudere la finestra di dialogo. Una volta chiuso il prompt TouchID, l'app viene messa in pausa come previsto.

Impostare un punto di interruzione nel callback evaluatePolicy. Accetta TouchID con il tuo dito e vedrai che il blocco viene chiamato da CoreAuthentication.daemon.

-[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) 
... 

Dal TouchID sta sfruttando l'hardware del dispositivo per leggere l'identificazione personale e confrontarlo con la stampa memorizzati sul chip penso che ha bisogno di limitare l'accesso a qualsiasi altro hardware dispositivo mentre il processo è in esecuzione.

Dalla tua esperienza e una app di test che ho appena lanciato insieme, questo sembra essere vero. Ho aperto la fotocamera usando UIImagePickerController e, mentre aperta, ho chiamato laContext evaluationPolicy: ... e ha messo in pausa l'acquisizione della videocamera.

Quindi, in sintesi, quando si utilizza la convalida TouchID:
- Il vostro processo è ancora l'applicazione attiva, ma hanno chiamato fuori del vostro processo di
- Apple sta limitando l'accesso al dispositivo hardware per la durata