Integrazione tocco ID
Ora arriviamo alla parte principale del tutorial ... integrando touch ID con l'applicazione. A quanto pare, Apple ha realizzato un codice abbastanza standard per l'accesso a Touch ID.Il codice viene dal quadro Autenticazione locale ed è la seguente:
LAContext *myContext = [[LAContext alloc] init];
NSError *authError = nil;
NSString *myLocalizedReasonString = @"Used for quick and secure access to the test app";
if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {[myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:myLocalizedReasonString
reply:^(BOOL success, NSError *error) {
if (success) {
// User authenticated successfully, take appropriate action
}
else {
// User did not authenticate successfully, look at error and take appropriate action
}
}];
}
else {
// Could not evaluate policy; look at authError and present an appropriate message to user }
consente di dare uno sguardo a ogni riga per vedere che cosa fa:
Linea 1: Qui creiamo un oggetto LAContext. La classe LAContext è responsabile della gestione del contesto per l'autenticazione. In parole semplici, usiamo un oggetto LAContext per verificare se è disponibile un tipo di autenticazione. Nel caso di questo tutorial, in seguito verificheremo che "se" touch ID è un'opzione.
Riga 2: Abbiamo bisogno di un NSError in modo che LAContext possa utilizzarlo per restituire se c'è un errore.
Riga 3: Impostiamo una NSString con una descrizione che viene visualizzata sullo schermo per consentire all'utente di sapere perché la vista ID touch è stata visualizzata sullo schermo.
Riga 5: qui si inserisce la costante LAContext chiamando il metodo canEvaluatePolicy: e inviando una costante LAPolicy come argomento. In questo caso, passiamo a LAPolicyDeviceOwnerAuthenticationWithBiometrics. In caso di esito negativo, l'ID touch non è configurato su un dispositivo compatibile o l'ID touch non è disponibile sul dispositivo ... pensa un iPhone 4S, 5 o 5c che esegue l'app. Inoltre, questo non tiene conto di un dispositivo con iOS 7, quindi se si prevede di eseguire l'autenticazione con impronta digitale su un'app, assicurarsi di controllare che si stia lavorando con un dispositivo compatibile e, in caso contrario, rendere disponibili altre opzioni come come password sul codice pin per accedere all'app.
Righe 6, 7 e 8: Se l'utente può autenticarsi con dati biometrici, ora è possibile chiamare il metodo evaluatePolicy sul nostro oggetto LAContext. Lo facciamo passando la stessa costante su, LAPolicyDeviceOwnerAuthenticationWithBiometrics, oltre che passando la nostra stringa di motivazione e quindi specificando un blocco per la risposta da gestire.
Come risultato otterremo SÌ o NO. Se sì, allora la riga 10 è dove mettiamo il codice per una risposta positiva. Allo stesso modo, la riga 12 è dove inseriamo il nostro codice di errore.
Finalmente sulla riga 15, abbiamo l'istruzione ELSE che viene eseguita se la riga 5 non supera il test ... vale a dire, la biometria non è disponibile. Possiamo controllare il puntatore authError per ottenere il motivo e presentarlo all'utente se necessario.
Infine, per ottenere questo di non mostrare gli errori, abbiamo bisogno di importare il framework di autenticazione locale al nostro progetto:
Quindi, consente di aggiungere questo codice al nostro progetto. Aprire ViewController.m e in alto, importare il framework di autenticazione locale.
Per maggiori dettagli visitare questo link: http://www.devfright.com/touch-id-tutorial-objective-c/
Questa risposta di Engineering ricorda il consiglio per richiedere il permesso di posizione (se l'utente lo ha spento o non autorizzato l'app, quindi non chiedere di nuovo). Il problema è che presume la familiarità con le funzionalità e le impostazioni da parte dell'utente, cioè che saprebbero sempre accenderli nuovamente in Impostazioni. Tuttavia, nella mia esperienza questo è un pio desiderio ... Gli utenti dimenticano queste cose, comprensibilmente. – StephenT
Sembra che Apple abbia risolto questo problema: iOS 8.1 iPad 3 (senza touch) - LAErrorPasscodeNotSet, iOS 8.4 iPad 3 (senza touch) - LAErrorTouchIDNotAvailable – Uladzimir
Solo per curiosità, sul design della tua app: perché ti importa se il dispositivo ha il supporto hardware TouchID , quando l'utente lo ha disabilitato specificamente e non è comunque disponibile per la tua app? –