Firebase este o platformă bazată pe platforme mobile în timp real, care permite coderilor să se concentreze asupra a ceea ce fac cel mai bine codarea aplicațiilor lor - fără a fi nevoiți să vă faceți griji în ceea ce privește preocupările DevOps cum ar fi infrastructura de server și modelarea bazei de date. Sprijinită de Google, Firebase ia complexitatea în ceea ce privește gestionarea bazelor de date în timp real, autentificarea utilizatorilor și lucrul cu fluxurile de lucru de sincronizare offline.
Deși există multe soluții pentru BaaS, cum ar fi Realm (consultați tutorialul Realm.io de aici, despre Envato Tuts +) Firebase nu necesită configurare anterioară a serverului de infrastructură, deoarece platforma are grijă de găzduire și în schimb expune un SDK.
Dincolo de o bază de date NoSQL în timp real, cu Firebase obțineți analize, rapoarte privind accidentele, autentificarea utilizatorilor, mesaje în cloud, notificări push și multe altele. Costurile aferente variază, de asemenea, în funcție de proiectul dvs. - în timp ce creșteți, treceți de la un model freemium la un model per-utilizare.
În acest tutorial, vă vom arăta cum să configurați Firebase pe iOS utilizând CocoaPods și cum să autentificați utilizatorii folosind două metode populare: e-mail și parolă sau prin telefon cu SMS.
Pentru a afla mai multe despre Firebase pentru Android, consultați câteva dintre celelalte tutoriale de aici despre Envato Tuts+.
Veți avea nevoie de următoarele:
Acest tutorial presupune că aveți cunoștințe de lucru despre iOS și Swift, precum și o experiență de bază despre CocoaPods. Dacă trebuie să aflați mai multe, consultați tutorialele Swift și tutorialele CocoaPods.
Până la sfârșitul acestui tutorial, veți începe cu o aplicație Firebase care utilizează Firebase SDK pentru a autentifica utilizatorii, utilizând e-mail și parola, precum și prin SMS. Pe parcurs, veți afla despre:
În tutorialele viitoare din această serie, veți învăța să lucrați cu alte aspecte ale platformei Firebase, cum ar fi utilizarea bazei de date în timp real pentru a stoca datele despre aplicații.
În această serie, vom construi o aplicație de lucru numită FirebaseDo. Să începem prin clonarea proiectului de la GitHub:
$ [email protected]: tutsplus / get-started-with-firebase-autentificare-pentru-ios.git ... $ git fetch -all -tags ... $ git etichete de verificare / START
Apoi vom inițializa proiectul pentru a genera un nou PodFile, după cum urmează:
pod init
Ar trebui să vedeți un nou fișier numit Podfile localizat în directorul rădăcină al proiectului dvs. Acest fișier definește în mod esențial bibliotecile pe care vrem să le folosim în proiectul nostru. Deschideți-l și adăugați următoarele linii de declarație Firebase:
pod "FirebaseUI" Pod "Firebase"
Salvați și introduceți următoarele în terminalul dvs. pentru a crea casetele:
pod instalare
Vom folosi FirebaseDo.xcworkspace in loc de FirebaseDo.xccodeproj, permițându-ne să lucrăm cu bibliotecile de dependență pe care le-am înființat pe CocoaPods, deci mergeți mai departe și deschideți spațiul de lucru și apoi treceți la browserul dvs..
Acum mergeți la panoul Firebase și creați un nou proiect:
Apoi, faceți clic pe Adăugați Firebase în aplicația dvs. iOS, care vă va urmări pas cu pas prin procesul de înregistrare a aplicației pe Firebase.
La un moment dat, vă va instrui să adăugați GoogleService-info.plist fișier în proiectul dvs. Xcode:
Ați adăugat deja bibliotecile prin CocoaPods, astfel încât să puteți sări peste instrucțiunile rămase și să reveniți la consola Firebase.
Firebase Authentication oferă servicii backend, SDK-uri ușor de folosit și biblioteci UI gata de utilizare pentru a autentifica utilizatorii în aplicația dvs. Aceasta susține autentificarea utilizând parole, numere de telefon, furnizori de identitate federalizați, cum ar fi Google, Facebook și Twitter și multe altele. (sursa: Authentication Firebase)
Înainte de a demonstra cum să utilizați FirebaseUI pentru a automatiza autentificarea utilizatorilor dvs., vom explora mai întâi metodele SDK pe care Firebase le expune ca parte a API-ului FirebaseAuth Framework Reference pentru gestionarea manuală a creării și conectării utilizatorilor.
Pentru a crea un utilizator nou, utilizați Auth.auth (). CreateUser ()
bloc de metode, după cum urmează:
Autorul de utilizator (e-mail, parola: parola) (utilizator, eroare) în // ...
Presupunând eroare
obiectul este nul, utilizatorul nu va fi înregistrat cu succes, ci va fi și el conectat. Pentru a vă conecta în mod explicit la un utilizator existent, veți apela:
Autentificare (cu e-mail: e-mail, parola: parola) (utilizator, eroare) din // ...
Deconectarea unui utilizator este la fel de ușoară ca și apelarea încerca! FirebaseAuth.signOut ()
:
try firebaseAuth.signOut () lasă semnul SignOutError ca NSError print ("Eroare la deconectare:% @", signOutError)
Vrem să fim capabili să rezolvăm cu desăvârșire diverse erori potențiale, în cazul în care apelurile de autentificare se rătăcesc și când eroare
obiect nu este zero (sau invers, utilizator
obiect este zero), a apărut o eroare. Consultați documentația Firebase pentru o listă cu toate codurile comune de eroare. În codul nostru, vom rezolva doar câteva erori generale.
De-a lungul ciclului de viață al aplicației, starea de autentificare se va schimba, astfel încât să fie capabil să detecteze când un utilizator a autentificat sau o sesiune a expirat, este importantă pentru a asigura că utilizatorii nu au acces la părți din aplicația pe care nu ar trebui să le acceseze.
Prin crearea unui handler, .addStateDidChangeListener
, acum puteți detecta starea în care se află utilizatorul și declanșează un anumit apel pe baza acestuia.
handle = Auth.auth (), addStateDidChangeListener (auth, user) în // ...
După ce utilizatorul a autentificat, puteți accesa utilizator
obiect și să obțină informații despre utilizator, cum ar fi ID-ul utilizatorului, adresa de e-mail și avatarul foto (dacă există). Următoarea metodă va afirma, de asemenea, că utilizatorul este autentificat în prezent cu utilizator
obiect nu este zero:
dacă Auth.auth (). curentUser! = nil // Utilizatorul este conectat. lasă uid = user.uid permite e-mail = user.email let photoURL = user.photoURL // ... altceva // Utilizatorul nu este conectat
Firebase oferă suport excelent pentru trimiterea utilizatorilor verificări prin e-mail sau a resetare parola solicitați e-mail.
Auth.auth () .currentUser.sendEmailVerification (error) în // ... Auth.auth () sendPasswordReset (cu E-mail: e-mail) (eroare) în // ...
Firebase are, de asemenea, o modalitate de a gestiona fluxul de lucru de autentificare anonim, care este în esență un cont temporar care poate fi folosit pentru a autentifica utilizatorii și a le oferi acces limitat. Ideea este la un moment dat, utilizatorii anonimi ar putea opta să se înscrie, iar Firebase poate oferi o punte pentru a conecta conturile lor anonime la acreditările lor de conectare fără a pierde date persistente în timpul statelor lor anonime. Pentru a vă conecta la un utilizator anonim, ați sunat la:
Auth.auth (). SignInAnonymously () (utilizator, eroare) din // ...
Pentru a trece utilizatorul dintr-un cont anonim într-un cont autentificat (utilizând e-mail și parolă), ați apelat următoarea metodă în cadrul unui controler de vizualizare a ecranului de înregistrare, solicitând e-mailul și parola și apoi sunați user.link ()
metodă.
permiteți credential = EmailAuthProvider.credential (cu e-mail: email, parolă: parolă) user.link (cu: credential) (utilizator, eroare) în // ...
Firebase acceptă, de asemenea, metode pentru celelalte mecanisme de autentificare federalizate.
Acolo aveți-am trecut prin metodele importante API pe care Firebase le-a furnizat pentru a gestiona și autentifica utilizatorii. În timp ce codul pe care l-am arătat nu este complicat prin nici un mijloc, Firebase face chiar mai ușor decât acest lucru, prin introducerea FirebaseUI. În această a doua jumătate a acestui tutorial, vom adăuga autentificare la aplicația noastră de eșantion.
FirebaseUI oferă o soluție de tip drop-in auth care gestionează fluxurile UI pentru conectarea utilizatorilor cu adrese de e-mail și parole, numere de telefon și cu furnizori de identitate federalizați, inclusiv Google Sign-In și Login Facebook.
Apoi, vom demonstra cum să implementăm autentificarea utilizând FirebaseUI.
În Consola Firebase, accesați Autentificare și permiteți următoarele moduri de autentificare:
Tocmai am văzut cum să gestionăm și să autentificăm utilizatorii manual utilizând fișierele SD Firebase disponibile. Vom vedea acum cum să lăsăm FirebaseUI să facă toată ridicarea greutății pentru noi. În HomeViewController.swift
, importați următoarele biblioteci:
Import import UIKit Import Firebase FirebaseAuthUI import FirebasePhoneAuthUI
În UIViewController.swift
declarație, adăugați FUIAuthDelegate
:
clasa HomeViewController: UIViewController, FUIAuthDelegate ...
Sub această declarație de clasă, vom declara trei variabile private cu care vom lucra. Acestea ne permit să ne referim obiectul curent de autentificare, instanța AuthUI și ascultătorii noștri de autentificare, respectiv:
fileprivate (set) var auth: Auth? fileprivate (set) var authUI: FUIAuth? // setați numai intern, dar obțineți extern fileprivate (set) var authStateListenerHandle: AuthStateDidChangeListenerHandle?
Apoi, apelați controlerul nostru de vizualizare, astfel încât atunci când se încarcă prima dată, am conectat un ascultător pentru a detecta când starea de autentificare se modifică utilizând un handler. Când se schimba starea autorului, vom convoca auto.loginAction (expeditor: auto)
pentru a aduce în revistă controlerul de autentificare FirebaseUI.
override func viewDidLoad () super.viewDidLoad () // Efectuați orice setare suplimentară după încărcarea vizualizării, în mod obișnuit de la o pensă. auto.auth = auth.auth () auto.authUI = FUIAuth.defaultAuthUI () auto.authUI? .delegate = auto.authUI? .providers = [FUIPhoneAuth (authUI: self.authUI!)] self.authStateListenerHandle = .aut? .addStateDidChangeListener (auth, user) în userul de pază! = nici altul self.loginAction (expeditor: self) return
În această metodă, instanțiăm, de asemenea, variabilele private pe care le-am declarat anterior, setați authUI
delegați la clasa proprie și, în final, stabiliți lista altor furnizori pe care îi vom susține, ceea ce, în cazul nostru, va fi FUIPhoneAuth
.
Dacă vrem să sprijinim Google, Facebook sau alți furnizori terți, le putem adăuga în această listă. De asemenea, rețineți că nu este necesar să includeți în mod explicit e-mail și parolă, deoarece aceasta este implicită, cu condiția ca aceasta să fie activată în consola Firebase.
În continuare ne ocupăm de loginAction ()
, care ar fi apelat în cazul în care ascultătorul evenimentului determină că utilizatorul nu este în prezent autentificat. Tot ce trebuie să facem în acest caz este prezent authUI.authViewController
modal FirebaseUI și ar include furnizorii de autentificare asociați pe care i-am declarat anterior.
Aici începe magia, deoarece FirebaseUI se ocupă de toate: solicitând utilizatorului să introducă adresa sa de e-mail, determinând dacă utilizatorul există (în care caz va fi solicitat parola) sau pentru un nou utilizator, colectând numele și propunerea unei parole.
@IBAction func loginAction (expeditor: AnyObject) // Prezentarea controlerului de vizualizare implicit furnizat de authUI let authViewController = authUI? .AuthViewController (); auto.present (authViewController !, animat: true, completare: nil)
Dacă am fi implementat manual metodele de autentificare, ar trebui să rezolvăm toate aceste scenarii diferite, inclusiv resetarea parolei de e-mail și așa mai departe.
În cele din urmă, implementăm protocolul necesar pentru serviciul nostru FIRAuthUIDelegate
delegat, ceea ce ne va permite să ascultați și să gestionăm stările de autentificare. Această metodă va continua numai dacă a apărut o eroare, dar putem chiar să manipulăm autentificări de succes.
// Implementarea metodei protocolului cerut pentru FIRAuthUIDelegate func authUI (_ authUI: FUIAuth, userSignInWith user: User ?, error: Eroare?) Paza permite authError = eroare altceva return lasa errorCode = UInt ((authError as NSError) ) comutare errorCode caz FUIAuthErrorCode.userCancelledSignIn.rawValue: print ("Utilizator anulat de conectare"); întrerupere prestabilită: permite detailedError = (authError ca NSError) .userInfo [NSUnderlyingErrorKey] ?? authError print ("Eroare de conectare: \ ((detaliatăError ca! NSError) .localizedDescription)");
Înainte de a lua aplicația pentru o rotire, trebuie să adăugăm câțiva pași pentru a putea gestiona autentificarea bazată pe telefon. Autentificarea prin telefon permite utilizatorilor să introducă numerele de telefon și să își verifice identitatea printr-un mesaj SMS care include un cod unic.
Pentru a obține jetonul APN necesar serverului Firebase, implementați următoarele în AppDelegate.swift fişier:
funcția (cerere: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) // Pass token pentru dispozitivul auth Auth.auth () setAPNSToken (deviceToken, type: .prod)
Deoarece am activat deja conectarea la numărul de telefon din consola Firebase, următoarea noastră sarcină este să furnizăm FirebaseDo pentru a primi APN-uri de la Firebase, o sarcină pe care o veți face și dacă doriți să sprijiniți notificările push în general. În acest caz, cu toate acestea, Firebase va trimite o notificare silențioasă către dispozitiv pentru a verifica solicitarea de conectare la numărul de telefon.
Nu veți putea testa această metodă de autentificare prin Xcode Simulator, mai degrabă va trebui să vă conectați iPhone-ul pentru a instala și a rula aplicația.
În Xcode, du-te la Capacități și permite Notificări. Aplicația va furniza automat și va crea un FirebaseDo.entitlements fișier, așa cum se arată în navigatorul proiectului.
Apoi, vom crea o cheie de autentificare a notificării Apple Push pentru a încărca Firebase. În portalul pentru dezvoltatori Apple, în secțiunea Chei, completați numele proiectului dvs., asigurându-vă că bifați APN-uri. Descărcați rezultatul .P8 fișier și să ia notă ID-ul cheie ca vom avea nevoie pentru a intra în scurt timp.
Reveniți la Consola Firebase și sub Setările proiectului (pictograma roată), selectați Cloud Messaging tab. Sub Configurarea aplicației iOS și Cheie de autentificare APN, selectează Încărcați butonul și încărcați .P8 , împreună cu ID-ul cheii și ID-ul aplicației. Ecranul de setări rezultat ar trebui să semene cu următoarele:
Și asta a fost - nu trebuia să adăugăm prea mult cod suplimentar aplicației noastre pentru a o seta pentru un flux complet de autentificare și conectare la autentificare. Să construim și să executăm aplicația în Xcode pentru a vedea FirebaseUI în acțiune. Prima dată când rulați aplicația, nu veți fi autentificat, deci veți obține un șablon generic cu opțiunile de autentificare pe care le-ați ales în consola Firebase.
Arată un pic mai puțin, dar puteți personaliza aproape fiecare aspect al șablonului.
Introducerea adresei de e-mail a unui nou utilizator va împinge Creează cont ecran, vă solicită numele și parola.
Completarea acestui formular vă va înregistra ca utilizator nou (deși aplicația noastră va afișa doar un ecran gol). Pentru a confirma că a fost creat un nou utilizator, puteți accesa Autentificare > Utilizatori în Consola Firebase.
Examinați fiecare dintre metodele de autentificare, amintiți-vă că va trebui să vă deconectați pentru a declanșa promptul de autentificare. Re-declanșa auth astfel prin adăugarea următorului cod ca primul rând în viewDidLoad ()
după apelul principal:
încercați firebaseAuth.signOut ()
Aceasta va forța aplicația înapoi la starea inițială, astfel încât să puteți testa autentificarea prin SMS prin telefon. Rulați aplicația din nou, de această dată alegeți Conectați-vă cu telefonul.
În acest tutorial ați primit o introducere în utilizarea Firebase ca platformă back-end pentru aplicația dvs. și ați văzut cum să autentificați utilizatorii utilizând combinația tradițională de e-mail și parolă, precum și prin telefon și SMS, o abordare populară de aplicații cum ar fi WhatsApp.
Apoi am început să construim o aplicație FirebaseDo simplă și, deși nu face încă nicio funcție reală de tip reminder, vom începe să lucrăm la aceasta în următorul tutorial. Dar, în doar câteva rânduri, am reușit să realizăm următoarele:
În restul seriei, veți vedea o parte din celelalte componente ale Firebase.
Și în timp ce sunteți aici, asigurați-vă că ați verificat câteva dintre celelalte postări ale noastre privind dezvoltarea aplicațiilor iOS!