Inizia con l'autenticazione Firebase per iOS

Firebase è una piattaforma di database mobile in tempo reale multipiattaforma che consente ai programmatori di concentrarsi su ciò che sanno fare meglio, codificando le loro app, senza doversi preoccupare dei problemi di DevOps come l'infrastruttura del server e la modellazione del database. Supportato da Google, Firebase elimina le complessità dall'occuparsi di database back-end in tempo reale, dall'autenticazione degli utenti e dal lavoro con i flussi di lavoro di sincronizzazione offline. 

Mentre ci sono molte soluzioni là fuori per BaaS, come Realm (controlla il mio tutorial Realm.io qui su Envato Tuts +) Firebase non richiede alcuna configurazione precedente del server di infrastruttura, poiché la piattaforma si occupa di hosting e in cambio espone un SDK.

Oltre a un database in tempo reale NoSQL, con Firebase si ottengono analisi, rapporti sugli arresti anomali, autenticazione degli utenti, messaggistica cloud, notifiche push e altro. I costi associati si adattano anche al tuo progetto: man mano che cresci, passi da un modello freemium a un modello per utilizzo.

In questo tutorial, ti mostrerò come configurare Firebase su iOS utilizzando CocoaPods e come autenticare gli utenti utilizzando due metodi popolari: email e password o tramite telefono con SMS. 

Per ulteriori informazioni su Firebase per Android, consulta alcuni dei nostri tutorial qui su Envato Tuts+. 

La tua prima app Firebase

Prerequisiti

Avrai bisogno di quanto segue:

  • iOS 10 con Xcode 8
  • CocoaPods installato
  • un account Firebase gratuito

Conoscenza presunta

Questo tutorial presume che tu abbia una conoscenza pratica di iOS e Swift, oltre ad alcune esperienze di base con CocoaPods. Se hai bisogno di saperne di più, dai un'occhiata ai tutorial di Swift e ai tutorial di CocoaPods.

Obiettivi di questo tutorial

Alla fine di questo tutorial, avrai avviato una semplice app basata su Firebase che utilizza l'SDK di Firebase per autenticare gli utenti, utilizzando email, password e SMS. Lungo la strada, imparerai a:

  1. installazione di Firebase con CocoaPods
  2. configurare il Delegato app per connettersi a Firebase
  3. impostazione delle autorizzazioni di provisioning per l'autenticazione utente SMS / SMS
  4. utilizzando FirebaseUI per autenticare facilmente gli utenti

Nelle future esercitazioni di questa serie, imparerai a lavorare con altri aspetti della piattaforma Firebase, ad esempio utilizzando il database in tempo reale per archiviare i dati dell'app.

Imposta il progetto

In questa serie, costruiremo una app da fare chiamata FirebaseDo. Iniziamo clonando il progetto da GitHub:

$ [email protected]: tutsplus / get-started-with-firebase-authentication-for-ios.git ... $ git fetch --all --tags ... $ git checkout tags / START

Quindi iniziamo a inizializzare il progetto per generare un nuovo PodFile, come segue:

pod init

Dovresti vedere un nuovo file chiamato Podfile situato nella directory principale del tuo progetto. Questo file indica in pratica le librerie che vogliamo utilizzare nel nostro progetto. Aprilo e aggiungi le seguenti righe di dichiarazione di Firebase:

pod 'FirebaseUI' Pod 'Firebase'

Salva e quindi inserisci quanto segue nel tuo terminale per creare i pod:

installazione pod

Useremo FirebaseDo.xcworkspace invece di FirebaseDo.xccodeproj, permettendoci di lavorare con le librerie delle dipendenze che abbiamo configurato su CocoaPods, quindi vai avanti e apri lo spazio di lavoro e poi passa al browser.

Ora vai al pannello Firebase e crea un nuovo progetto:

Quindi, fare clic su Aggiungi Firebase alla tua app iOS, che ti guiderà passo dopo passo nel processo di registrazione della tua app su Firebase.

Ad un certo punto, ti consiglierà di aggiungere il GoogleService-info.plist file nel tuo progetto Xcode:

Hai già aggiunto le librerie tramite CocoaPods, quindi puoi saltare le restanti istruzioni e tornare alla console di Firebase. 

Autenticazione degli utenti

Firebase Authentication fornisce servizi di back-end, SDK facili da usare e librerie UI già pronte per autenticare gli utenti nella tua app. Supporta l'autenticazione utilizzando password, numeri di telefono, provider di identità federati popolari come Google, Facebook e Twitter e altro ancora. (fonte: autenticazione Firebase)

Prima di dimostrare come utilizzare FirebaseUI per automatizzare l'autenticazione degli utenti, esploreremo prima i metodi SDK che Firebase espone come parte dell'API Reference API di FirebaseAuth per gestire manualmente la creazione e l'accesso degli utenti.

Registrati, accedi e disconnetti gli utenti

Per creare un nuovo utente, si utilizzerà il Auth.auth (). CreateUser () metodo di blocco, come segue:

Auth.auth (). CreateUser (withEmail: email, password: password) (utente, errore) in // ...

Assumendo il errorel'oggetto è nullo, l'utente non solo verrà registrato correttamente ma sarà anche registrato. Per accedere esplicitamente a un utente esistente, chiameresti:

Auth.auth (). SignIn (withEmail: email, password: password) (utente, errore) in // ...

Sottoscrivere un utente è facile come chiamare provare! FirebaseAuth.signOut ():

do try firebaseAuth.signOut () catch let signOutError as NSError print ("Errore durante la disconnessione:% @", signOutError)

Vogliamo essere in grado di gestire vari errori potenziali con garbo, nel caso in cui le chiamate di autenticazione vadano fuori strada, e quando il errore l'oggetto non è nullo (o inversamente, il utente oggetto è nullo), si è verificato un errore. Consultare la documentazione di Firebase per un elenco di tutti i codici di errore comuni. Nel nostro codice, gestiremo solo alcuni errori generali.

Gestire le modifiche dello stato di autenticazione

Durante tutto il ciclo di vita dell'app, lo stato di autenticazione cambierà, quindi essere in grado di rilevare quando un utente è autenticato o una sessione è scaduta, è importante per garantire che gli utenti non abbiano accesso a parti della tua app a cui non dovrebbero accedere.

Creando un gestore, .addStateDidChangeListener, ora sei in grado di rilevare in quale stato si trova l'utente e attivare una chiamata specifica, in base a ciò.

handle = Auth.auth (). addStateDidChangeListener (auth, user) in // ...

Gestione degli utenti

Dopo che l'utente si è autenticato, puoi accedere a utente oggetto e ottenere le informazioni dell'utente come l'ID dell'utente, l'indirizzo e-mail e l'avatar di foto (se fornito). Il metodo seguente inoltre asserirà che l'utente è attualmente autenticato con utente oggetto non essendo nullo:

se Auth.auth (). currentUser! = nil // L'utente ha eseguito l'accesso. let uid = user.uid lascia email = user.email lascia fotoURL = user.photoURL // ... else // L'utente non è connesso 

Invio di email agli utenti

Firebase fornisce un eccellente supporto per l'invio di utenti verifiche via email o a reimpostazione della password richiesta di posta elettronica.

Auth.auth (). CurrentUser? .SendEmailVerification (errore) in // ... Auth.auth (). SendPasswordReset (withEmail: email) (errore) in // ... 

Utenti anonimi

Firebase ha anche un modo per gestire il flusso di lavoro di autenticazione anonima, che è essenzialmente un account temporaneo che può essere utilizzato per autenticare gli utenti e fornire loro un accesso limitato. L'idea è che, ad un certo punto nel tempo, gli utenti anonimi potrebbero scegliere di registrarsi e Firebase può quindi fornire un ponte per collegare i loro account anonimi alle credenziali di accesso senza dover perdere i dati persistenti durante i loro stati anonimi. Per accedere a un utente anonimo, chiameresti:

Auth.auth (). SignInAnonymously () (utente, errore) in // ...

Per trasferire l'utente da un account anonimo a un account autenticato (utilizzando e-mail e password), si inviterà il seguente metodo all'interno di un controller di visualizzazione della schermata di registrazione, richiedendo l'e-mail e la password e quindi chiamando il user.link ()  metodo.

let credential = EmailAuthProvider.credential (withEmail: email, password: password) user.link (con: credential) (utente, errore) in // ...

Firebase supporta anche i metodi per gli altri meccanismi di autenticazione federati. 

Ce l'hai, abbiamo seguito i metodi API importanti forniti da Firebase per gestire e autenticare gli utenti. Mentre il codice che ti ho mostrato non è affatto complicato, Firebase rende ancora più semplice questo, con l'introduzione di FirebaseUI. In questa seconda parte di questo tutorial, aggiungeremo l'autenticazione alla nostra app to-do di esempio.

Implementazione di FirebaseUI

FirebaseUI fornisce una soluzione di autenticazione drop-in che gestisce i flussi dell'interfaccia utente per l'accesso agli utenti con indirizzi e-mail e password, numeri di telefono e con provider di identità federati popolari, tra cui Accesso a Google e accesso a Facebook. 

In seguito, dimostreremo come implementare l'autenticazione usando FirebaseUI.

Nella console di Firebase, vai su Autenticazione scheda e abilitare le seguenti modalità di autenticazione:

  • E-mail / password
  • Telefono

Abbiamo appena visto come gestire e autenticare gli utenti manualmente utilizzando gli SDK Firebase disponibili. Vedremo ora come consentire a FirebaseUI di fare tutto il lavoro pesante per noi. Nel HomeViewController.swift, importare le seguenti librerie:

import UIKit import Firebase import FirebaseAuthUI import FirebasePhoneAuthUI

Nel UIViewController.swift dichiarazione, aggiungere il FUIAuthDelegate:

class HomeViewController: UIViewController, FUIAuthDelegate ... 

Al di sotto di questa dichiarazione di classe, dichiareremo tre variabili private con le quali lavoreremo. Questi ci permetteranno di fare riferimento rispettivamente al nostro oggetto di autenticazione corrente, all'istanza AuthUI e ai nostri listener di autenticazione:

 fileprivate (set) var auth: Auth? fileprivate (set) var authUI: FUIAuth? // solo impostato internamente ma esternamente fileprivate (set) var authStateListenerHandle: AuthStateDidChangeListenerHandle?

Avanti, colleghiamo il nostro View Controller in modo che quando si carica la prima volta, colleghiamo un listener per rilevare quando lo stato di autenticazione cambia usando un gestore. Quando lo stato di autenticazione cambia, invocheremo il self.loginAction (mittente: self) metodo per visualizzare il nostro controller di autenticazione FirebaseUI.

 override func viewDidLoad () super.viewDidLoad () // Esegue un'impostazione aggiuntiva dopo aver caricato la vista, in genere da un pennino. self.auth = Auth.auth () self.authUI = FUIAuth.defaultAuthUI () self.authUI? .delegate = self self.authUI? .providers = [FUIPhoneAuth (authUI: self.authUI!),] self.authStateListenerHandle = self .auth? .addStateDidChangeListener (auth, user) in guardia utente! = nil else self.loginAction (sender: self) return

In questo metodo, istanziamo anche le variabili private che abbiamo dichiarato in precedenza, impostiamo il authUI delegare alla nostra classe e, infine, impostare l'elenco degli altri fornitori che sosterremo, che nel nostro caso sarà FUIPhoneAuth.

Se volessimo supportare Google, Facebook o altri fornitori di terze parti, potremmo aggiungerli a questo elenco. Inoltre, non è necessario includere esplicitamente email e password in quanto è implicita, a condizione che sia abilitata nella console Firebase.

Mostrare l'interfaccia utente di accesso

Successivamente gestiamo il loginAction () metodo, che verrebbe chiamato nel caso in cui il listener di eventi determini che l'utente non è attualmente autenticato. Tutto ciò che dobbiamo fare in questo caso è presente il authUI.authViewController modal FirebaseUI e includerebbe i provider di autenticazione associati che abbiamo dichiarato in precedenza.

È qui che inizia la magia, in quanto FirebaseUI gestisce tutto: chiede all'utente di inserire il suo indirizzo email, determinando se l'utente esiste (nel qual caso all'utente verrà richiesto per la sua password), o per un nuovo utente, raccogliendo i loro nominare e nominare una password.

 @IBAction func loginAction (mittente: AnyObject) // Presenta il controller di visualizzazione di accesso predefinito fornito da authUI consente authViewController = authUI? .AuthViewController (); self.present (authViewController !, animato: true, completion: nil)

Se dovessimo implementare manualmente i metodi di autenticazione, avremmo bisogno di gestire tutti questi diversi scenari, incluse le reimpostazioni delle password e-mail e così via.

Gestione delle modifiche dello stato di autenticazione

Infine, implementiamo il protocollo richiesto per il nostro FIRAuthUIDelegate delegato, che ci consentirà di ascoltare e gestire gli stati di autenticazione. Questo metodo procederà solo se si è effettivamente verificato un errore, ma possiamo persino gestire le autenticazioni riuscite.

 // Implementa il metodo di protocollo richiesto per FIRAuthUIDelegate func authUI (_ authUI: FUIAuth, didSignInWith utente: Utente ?, errore: errore?) Guardia lascia authError = errore else return lascia errorCode = UInt ((authError as NSError) .code ) switch errorCode case FUIAuthErrorCode.userCancelledSignIn.rawValue: print ("Utente annullato accesso"); break default: let detailedError = (authError as NSError) .userInfo [NSUnderlyingErrorKey] ?? authError print ("Login error: \ ((detailedError as! NSError) .localizedDescription)"); 

Impostazione di autenticazione del telefono

Prima di far girare l'app, dobbiamo aggiungere qualche altro passaggio per essere in grado di gestire l'autenticazione basata sul telefono. L'autenticazione del telefono consente agli utenti di inserire i loro numeri di telefono e verifica la loro identità tramite un messaggio SMS che include un codice monouso.

 Per ottenere il token APN necessario per il server Firebase, implementare quanto segue in AppDelegate.swift file:

func application (_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) // Porta il token del dispositivo all'author Auth.auth (). setAPNSToken (deviceToken, type: .prod)

Dato che abbiamo già abilitato l'accesso al numero di telefono nella console di Firebase, la nostra prossima attività è quella di fornire a FirebaseDo la ricezione di APN da Firebase, un'attività che si dovrebbe svolgere anche se si desidera supportare le notifiche push in generale. In questo caso, tuttavia, Firebase invierà al dispositivo una notifica push silenziosa per verificare la richiesta di accesso al numero di telefono.

Non sarai in grado di testare questo metodo di autenticazione tramite Xcode Simulator, ma dovrai collegare il tuo iPhone per installare ed eseguire l'app.

In Xcode, vai a funzionalità e abilitare Le notifiche push. L'app fornirà e creerà automaticamente un FirebaseDo.entitlements file, come mostrato nel navigatore del progetto.

Successivamente, creeremo una chiave di autenticazione di notifica push Apple per il caricamento su Firebase. Nel portale per sviluppatori Apple, sotto chiavi, inserisci il nome del tuo progetto, assicurandoti di spuntare APN. Scarica il risultato .p8 archiviare e prendere nota dell'ID della chiave poiché sarà necessario inserirla a breve.

Passa alla console di Firebase e al di sotto Impostazioni del progetto (icona dell'ingranaggio), selezionare il Cloud Messaging scheda. Sotto Configurazione dell'app iOS Chiave di autenticazione APN, seleziona il Caricare pulsante e caricare il .p8 file, insieme all'ID della chiave e all'ID dell'app. La schermata delle impostazioni risultante dovrebbe essere simile alla seguente:

Testare l'app

E questo è tutto: non abbiamo dovuto aggiungere molto codice aggiuntivo alla nostra app per configurarlo per un flusso di lavoro completo di registrazione e autenticazione di accesso. Costruiamo ed eseguiamo l'applicazione in Xcode per vedere FirebaseUI in azione. La prima volta che esegui l'app, non verrai autenticato, quindi otterrai un modello generico con le opzioni di autenticazione che hai scelto nella console Firebase.

Sembra un po 'insipido, ma puoi personalizzare quasi ogni aspetto del modello. 

Inserendo l'indirizzo e-mail di un nuovo utente si sposterà il Creare un profilo schermo, chiedendo il tuo nome e password.

Completando questo modulo ti registrerai come nuovo utente (sebbene la nostra app visualizzerà solo una schermata vuota). Per confermare che un nuovo utente è stato creato, puoi andare su Autenticazione > utenti nella tua console Firebase. 

Testare ciascuno dei metodi di autenticazione, ricordando che sarà necessario effettuare il logout per riattivare la richiesta di autenticazione. Riattivare l'autenticazione aggiungendo il seguente codice come prima riga in viewDidLoad () dopo la super chiamata:

prova firebaseAuth.signOut ()

Ciò costringerà l'applicazione al suo stato iniziale in modo che sia possibile verificare l'autenticazione tramite SMS del telefono. Esegui nuovamente l'app, questa volta scegliendo Accedi con il telefono.

Conclusione

In questo tutorial hai una introduzione all'uso di Firebase come piattaforma back-end per la tua app e hai visto come autenticare gli utenti utilizzando la combinazione tradizionale di email e password, oltre che tramite telefono e SMS, un approccio reso popolare dalle app come WhatsApp.

Abbiamo quindi iniziato a creare la nostra semplice app FirebaseDo e, sebbene non faccia ancora parte delle funzionalità di tipo promemoria, inizieremo a lavorarci nel prossimo tutorial. Ma in poche righe, siamo riusciti a realizzare quanto segue:

  • Firebase integrato per configurare un meccanismo di autenticazione per e-mail e password
  • aggiunta la possibilità di autenticarsi tramite SMS
  • stati di autenticazione tracciati
  • gestito gli errori con grazia

Nel resto della serie, darai un'occhiata ad alcuni degli altri componenti di Firebase.

E mentre sei qui, assicurati di controllare alcuni dei nostri altri post sullo sviluppo di app per iOS!