2015-12-14 19 views
10

È possibile annullare la finestra di dialogo di avviso TouchID in modo programmatico dopo la chiamata LAContext.evaluatePolicy? Se sì: come?iOS annulla la finestra di dialogo di autenticazione TouchID a livello di programmazione

+0

La domanda non è chiara, cosa stai cercando di ottenere? – Vijay

+0

'LAContext.evaluatePolicy' apre una finestra di avviso che richiede il TouchID. Voglio chiudere la finestra di dialogo dal mio codice. per esempio. dopo pochi secondi, se l'utente non ha fatto nulla. –

+0

È interessante notare che hanno aggiunto un codice di errore "AppCancel", ma non riesco a visualizzare alcuna API per annullarla nei documenti. C'è un metodo 'LAContext invalidate' nelle differenze di iOS 9.0, non è sicuro che sia sufficiente per essere considerato pubblico. – jcaron

risposta

12

Non tutte le API pubblicate da Apple lo rendono disponibile nella documentazione su developer.apple.com (o nel visualizzatore di documenti di Xcode). Le API diffs elencano le API pubbliche, quindi tutto ciò che vedi è contenuto nei file di intestazione (vedi LocalAuthentication/LAContext.h) e le interfacce Swift generate da quelle intestazioni. E tutto ciò che è nelle intestazioni è un'API pubblica, quindi sei libero di chiamarlo.

volte (ma non sempre) le API non documentate hanno intestazione commenti decenti che spiegano come usarli ... per fortuna LAContext.invalidate() è uno di questi:

/// Invalidates the context. 
/// 
/// @discussion The context is invalidated automatically when it is (auto)released. This method 
///    allows invalidating it manually while it is still in scope. 
/// 
///    Invalidation terminates any existing policy evaluation and the respective call will 
///    fail with LAErrorAppCancel. After the context has been invalidated, it can not be 
///    used for policy evaluation and an attempt to do so will fail with LAErrorInvalidContext. 
/// 
///    Invalidating a context that has been already invalidated has no effect. 
@available(iOS 9.0, *) 
public func invalidate() 

In effetti, sembra che chiamare invalidate() mentre il Touch ID l'avviso è visibile dovrebbe chiuderlo. (Non ho provato io stesso.)


iOS 11 aggiornamento: Si noti che su dispositivi con ID Volto invece di tocco ID, l'avviso/HUD simile interfaccia utente che appare quando si chiama LAContext.evaluatePolicy non lo fa richiedere o consentire l'interazione e si congeda da solo dopo l'autenticazione riuscita. In teoria, la chiamata invalidate lo rifiuta (o l'avviso di follow-up, effettivamente interattivo che appare se Face ID non identifica l'utente).

Ma non potrebbe essere saggio supporre che su tutti i dispositivi possibili e metodi di autenticazione avrete sempre abbastanza tempo per annullare l'autenticazione LAContext dopo aver chiesto per esso.

+0

Operando come previsto. :) –

+0

È davvero fantastico. Buona scoperta! –

+0

Non riesco a respingere usando 'invalidate()'. Che cosa sto facendo di sbagliato? :) – hfossli