Kom i gang med Firebase-godkjenning for iOS

Firebase er en plattform for sanntids mobildatabase i sanntid, som gjør det mulig for kodere å fokusere på hva de gjør best å kode sine apps uten å måtte bekymre seg for DevOps-bekymringer som serverinfrastruktur og databasemodellering. Backed av Google, tar Firebase kompleksiteten ut av å håndtere avanserte sanntidsdatabaser, autentiserer brukere og jobber med offline synkroniserings arbeidsflyter. 

Mens det er mange løsninger der ute for BaaS, for eksempel Realm (sjekk ut Realm.io-veiledningen her på Envato Tuts +) Firebase krever ikke noen tidligere konfigurasjon av infrastrukturserver, da plattformen tar seg av hosting og i retur avslører en SDK.

Utover en NoSQL sanntids database, med Firebase får du analyser, krasjrapportering, brukerautentisering, skymeldinger, push-varsler og mer. De tilknyttede kostnadene skaleres også med prosjektet. Når du vokser, flyttes du fra en freemiummodell til en per-bruksmodell.

I denne veiledningen viser jeg deg hvordan du konfigurerer Firebase på IOS ved hjelp av CocoaPods, og hvordan du autentiserer brukere ved hjelp av to populære metoder: e-post og passord eller via telefonen med SMS. 

For å lære om Firebase for Android, sjekk ut noen av våre andre opplæringsprogrammer her på Envato Tuts+. 

Din First Firebase App

Forutsetninger

Du trenger følgende:

  • IOS 10 med Xcode 8
  • KakaoPods installert
  • en gratis Firebase-konto

Forutsatt kunnskap

Denne opplæringen forutsetter at du har arbeidskunnskap om iOS og Swift, samt noen grunnleggende erfaringer med kakaopoder. Hvis du trenger å lære mer, sjekk ut våre Swift opplæringsprogrammer og CocoaPods opplæringsprogrammer.

Målet med denne opplæringen

Ved slutten av denne opplæringen har du startet på en enkel Firebase-drevet app som bruker Firebase SDK til å autentisere brukere, ved hjelp av e-post og passord, samt via SMS. Underveis lærer du om:

  1. sette opp Firebase med CocoaPods
  2. Setter opp App Delegate for å koble til Firebase
  3. opprette provisjonsrettighetene for tekst- / SMS-brukerautentisering
  4. bruker FirebaseUI for å autentisere brukere enkelt

I fremtidige opplæringsprogrammer i denne serien lærer du å jobbe med andre aspekter av Firebase-plattformen, for eksempel å bruke sanntidsdatabasen til å lagre appdata.

Sett opp prosjektet

I denne serien skal vi bygge en oppgave som heter FirebaseDo. La oss starte med å klone prosjektet fra GitHub:

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

Deretter skal vi initialisere prosjektet for å generere en ny PodFile, som følger:

pod init

Du bør se en ny fil som heter Podfile plassert i rotkatalogen av prosjektet ditt. Denne filen inneholder i utgangspunktet bibliotekene vi vil bruke i vårt prosjekt. Åpne den og legg til følgende Firebase-deklarasjonslinjer:

pod 'FirebaseUI' Pod 'Firebase'

Lagre og skriv deretter inn følgende i terminalen din for å bygge bøkene:

pod installasjon

Vi skal bruke FirebaseDo.xcworkspace i stedet for FirebaseDo.xccodeproj, slik at vi kan jobbe med de avhengighetsbiblioteker vi har satt opp på CocoaPods, så gå videre og åpne arbeidsområdet og deretter bytte til nettleseren din.

Gå nå til Firebase-panelet og opprett et nytt prosjekt:

Deretter klikker du på Legg til Firebase til iOS-appen din, som vil gå deg trinnvis gjennom prosessen med å registrere appen din på Firebase.

På et tidspunkt vil det instruere deg å legge til GoogleService-Info.plist filen inn i Xcode-prosjektet ditt:

Du har allerede lagt til bibliotekene via CocoaPods, slik at du kan hoppe over de gjenværende instruksjonene og gå tilbake til Firebase-konsollen. 

Godkjenning av brukere

Firebase-godkjenning gir backend-tjenester, brukervennlige SDKer og ferdige UI-biblioteker for å autentisere brukere til appen din. Den støtter autentisering ved hjelp av passord, telefonnumre, populære fødererte identitetsleverandører som Google, Facebook og Twitter, og mer. (kilde: Firebase Authentication)

Før vi demonstrerer hvordan du bruker FirebaseUI for å automatisere autentiseringen av brukerne, skal vi først undersøke SDK-metodene som Firebase eksponerer som en del av FirebaseAuth Framework Reference API for å håndtere opprettelse og innlogging av brukere manuelt..

Registrer deg, logg inn og logg ut brukere

Hvis du vil opprette en ny bruker, vil du bruke Auth.auth () createUser. () metodeblokk, som følger:

Auth.auth (). CreateUser (withEmail: email, passord: passord) (bruker, feil) i // ...

Forutsatt feilobjektet er null, brukeren vil ikke bare bli registrert, men vil også bli logget inn. Hvis du vil logge på en eksisterende bruker eksplisitt, vil du ringe:

Auth.auth (). SignIn (withEmail: email, passord: passord) (bruker, feil) i // ...

Å logge ut en bruker er like enkelt som å ringe prøve! FirebaseAuth.signOut ():

gjør prøve firebaseAuth.signOut () fange la signOutError som NSError print ("Feil å logge ut:% @", signOutError)

Vi ønsker å kunne håndtere ulike potensielle feil grasiøst, hvis autentiseringssamtalen går på avveie, og når feil objektet er ikke null (eller omvendt, den bruker objektet er null), har det oppstått en feil. Rådfør deg med Firebase-dokumentasjonen for en liste over alle vanlige feilkoder. I vår kode behandler vi bare noen få generelle feil.

Administrere godkjenningsstatistikkendringer

Gjennom appens livssyklus vil autentiseringsstatusen endres, slik at det er viktig å oppdage når en bruker har godkjent eller en økt er utløpt, for at brukere ikke har tilgang til deler av appen din at de ikke skal få tilgang.

Ved å opprette en handler, .addStateDidChangeListener, du er nå i stand til å oppdage hvilken tilstand brukeren er i og utløse en bestemt samtale, basert på det.

handle = Auth.auth (). addStateDidChangeListener (auth, bruker) i // ...

Administrere brukere

Etter at brukeren har godkjent, har du tilgang til bruker objekt og få brukerinformasjon som brukerens ID, e-postadresse og bildeavatare (hvis det er oppgitt). Følgende metode vil også hevde at brukeren faktisk er godkjent for øyeblikket med bruker objektet er ikke null:

hvis Auth.auth (). currentUser! = nil // Bruker er logget inn. la uid = user.uid la email = user.email la photoURL = user.photoURL // ... else // Brukeren er ikke logget på 

Emailing Brukere

Firebase gir utmerket støtte for å sende brukere e-postbekreftelser eller a reset passord Be om e-post.

Auth.auth (). CurrentUser? .SendEmailVerification (feil) i // ... Auth.auth (). SendPasswordReset (withEmail: email) (feil) i // ... 

Anonyme brukere

Firebase har også en måte å administrere den anonyme autentiserings arbeidsflyten på, som i hovedsak er en midlertidig konto som kan brukes til å autentisere brukere og gi dem begrenset tilgang. Ideen er på et bestemt tidspunkt, anonyme brukere kan velge å registrere seg, og Firebase kan da gi en bro for å koble deres anonyme kontoer til påloggingsinformasjonen sine uten å måtte miste data vedvarende under deres anonyme stater. For å logge på en anonym bruker, vil du ringe:

Auth.auth (). SignInAnonymously () (bruker, feil) i // ...

Hvis du vil overføre brukeren fra en anonym konto til en autentisert konto (ved hjelp av e-post og passord), vil du ringe følgende metode i en registreringsskjermvisningskontroller, be om e-post og passord, og ring deretter user.link ()  metode.

la legitimasjon = EmailAuthProvider.credential (withEmail: email, passord: passord) user.link (med: legitimasjon) (bruker, feil) i // ...

Firebase støtter også metoder for de andre føderasjonsautentiseringsmekanismer. 

Der har du det - vi har gått gjennom de viktige API-metodene som Firebase har gitt for å håndtere og autentisere brukere. Mens koden jeg har vist deg ikke er komplisert på noen måte, gjør Firebase det enda enklere enn dette, med introduksjonen av FirebaseUI. I denne andre halvdelen av denne opplæringen kommer vi til å legge til godkjenning for vår prøveutøve app.

Gjennomføring av FirebaseUI

FirebaseUI gir en drop-in auth-løsning som håndterer brukergrensesnittene for å logge på brukere med e-postadresser og passord, telefonnumre og med populære fødererte identitetsleverandører, inkludert Google Sign-In og Facebook Login. 

Deretter skal vi demonstrere hvordan du implementerer godkjenning ved hjelp av FirebaseUI.

I Firebase Console, gå til Godkjenning fanen og aktiver følgende autentiseringsmetoder:

  • Epost Passord
  • telefon

Vi har nettopp sett hvordan man administrerer og autentiserer brukere manuelt ved hjelp av tilgjengelige Firebase SDKs. Vi skal nå se hvordan å la FirebaseUI gjøre alt tungt løft for oss. I HomeViewController.swift, importere følgende biblioteker:

import UIKit import Firebase import FirebaseAuthUI import FirebasePhoneAuthUI

I UIViewController.swift erklæring, legg til FUIAuthDelegate:

klasse HomeViewController: UIViewController, FUIAuthDelegate ... 

Under denne klassedeklarasjonen skal vi deklarere tre private variabler som vi skal jobbe med. Disse vil la oss referere til vårt nåværende autentiseringsobjekt, AuthUI-forekomsten og våre autentiseringslyttere, henholdsvis:

 fileprivate (sett) var auth: Auth? fileprivate (set) var authUI: FUIAuth? // Bare sett internt, men få eksternt fileprivat (sett) var authStateListenerHandle: AuthStateDidChangeListenerHandle?

La oss deretter koble opp vår View Controller slik at når den laster opp første gang, kobler vi en lytter til å oppdage når autentiseringsstatusen endres ved hjelp av en handler. Når auth staten endres, vil vi ringe til self.loginAction (sender: selv) metode for å hente vår FirebaseUI-godkjenningsregulator.

 overstyr func viewDidLoad () super.viewDidLoad () // Gjør noe ekstra oppsett etter at du har lastet opp visningen, vanligvis fra en nib. self.auth = Auth.auth () self.authUI = FUIAuth.defaultAuthUI () self.authUI? .delegate = self self.authUI? .providers = [FUIPhoneAuth (authUI: self.authUI!),] self.authStateListenerHandle = selv .auth? .addStateDidChangeListener (auth, bruker) i vakten bruker! = ingen andre self.loginAction (sender: selv) returnere

I denne metoden organiserer vi også de private variablene vi har erklært tidligere, angi authUI delegere til vår egen klasse, og til slutt sette listen over andre tilbydere vi vil støtte, som i vårt tilfelle vil være FUIPhoneAuth.

Hvis vi ønsket å støtte Google, Facebook eller andre tredjepartsleverandører, kunne vi legge dem til denne listen. Vær også oppmerksom på at vi ikke trenger å eksplisitt inkludere e-post og passord som det er implisitt, forutsatt at det er aktivert i Firebase-konsollen.

Viser innloggingsgrensesnittet

Neste vi håndterer loginAction () metode, som ville bli kalt i tilfelle hendelseslytteren bestemmer brukeren, er for øyeblikket ikke godkjent. Alt vi trenger å gjøre i dette tilfellet er til stede authUI.authViewController modal FirebaseUI, og det vil inkludere de tilknyttede godkjenningsleverandørene vi erklærte tidligere.

Dette er hvor magien begynner, da FirebaseUI håndterer alt: spør brukeren om å skrive inn sin e-postadresse, avgjøre om brukeren eksisterer (i så fall vil brukeren bli bedt om passordet), eller for en ny bruker, samle sine navn og nominere et passord.

 @IBAction func loginAction (avsender: AnyObject) // Presentér standard innloggingsvisningskontrollen som leveres av authUI la authViewController = authUI? .AuthViewController (); self.present (authViewController !, animated: true, completion: null)

Hvis vi skulle implementere autentiseringsmetodene manuelt, må vi håndtere alle disse forskjellige scenariene, inkludert tilbakestille e-postpassord og så videre.

Håndtere Auth State Changes

Endelig implementerer vi den nødvendige protokollen for vår FIRAuthUIDelegate delegere, som vil tillate oss å lytte og håndtere godkjenningstilstander. Denne metoden vil bare fortsette dersom en feil faktisk har oppstått, men vi kan til og med håndtere vellykkede godkjenninger.

 // Implementer den nødvendige protokollmetoden for FIRAuthUIDelegate func authUI (_ authUI: FUIAuth, didSignInWith bruker: Bruker?, Feil: Feil?) Guard la authError = Feil ellers Return La errorCode = UInt ((authError as NSError) .code ) bytt feilkode tilfelle FUIAuthErrorCode.userCancelledSignIn.rawValue: print ("Bruker avbrutt innlogging"); bryte standard: la detailedError = (authError som NSError) .userInfo [NSUnderlyingErrorKey] ?? authError print ("Innloggingsfeil: \ ((detailedError as! NSError) .localizedDescription)"); 

Telefongodkjenningsoppsett

Før vi tar programmet for et spinn, må vi legge til noen få trinn for å kunne håndtere telefonbasert godkjenning. Telefonautentisering lar brukerne skrive inn telefonnumrene deres, og verifiserer identiteten deres via en SMS-melding som inneholder en engangskode.

 For å oppnå APNs token som trengs av Firebase-serveren, implementer følgende i AppDelegate.swift fil:

func program (_ søknad: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) // Pass enhetstoken til auth Auth.auth (). setAPNSToken (deviceToken, type: .prod)

Siden vi allerede har aktivert innloggingen av telefonnummeret i Firebase-konsollen, er vår neste oppgave å gi FirebaseDo å motta APNer fra Firebase, en oppgave du også ville gjøre hvis du vil støtte push notifications generelt. I dette tilfellet vil Firebase imidlertid sende et stille trykkvarsel til enheten for å bekrefte innloggingsforespørselen til telefonnummeret.

Du vil ikke kunne teste denne autentiseringsmetoden via Xcode Simulator, men du må koble til iPhone for å installere og kjøre appen..

I Xcode, gå til Capabilities og aktiver Push Notifications. Appen vil automatisk angi og opprette en FirebaseDo.entitlements fil, som vist i prosjektnavigatoren.

Deretter skal vi opprette en Apple Push Notification Authentication Key for å laste opp til Firebase. I Apple Developer Portal, under Keys, fyll inn navnet på prosjektet ditt, pass på å krysse APN. Last ned den resulterende .P8 fil og noter nøkkel ID som vi kommer til å trenge å skrive det inn snart.

Bytt tilbake til Firebase Console, og under Prosjektinnstillinger (tannhjulikonet), velg Cloud Messaging fane. Under IOS App Configuration og APNs Autentiseringsnøkkel, velg Laste opp knapp og last opp .P8 fil, sammen med nøkkel ID og app ID. Den resulterende innstillingsskjermen skal likne følgende:

Testing av appen

Og det er det - vi måtte ikke legge til mye ekstra kode i vår app for å sette opp det for en fullstendig registrerings- og loggautentiserings arbeidsflyt. La oss bygge og kjøre appen i Xcode for å se FirebaseUI i aksjon. Første gang du kjører appen, blir du ikke autentisert, så du får en generisk mal med autentiseringsalternativene du har valgt i Firebase-konsollen.

Det ser litt blid ut, men du kan tilpasse nesten alle aspekter av malen. 

Når du skriver inn en ny brukeres e-postadresse, trykker du på Opprett konto skjerm, og spør deg om ditt navn og passord.

Fylling av dette skjemaet registrerer deg som en ny bruker (selv om vår app kun vil vise en tom skjerm). For å bekrefte at en ny bruker har blitt opprettet, kan du gå til Godkjenning > brukere i Firebase Console. 

Test ut hver av autentiseringsmetodene, husk at du må logge ut for å utløse autentiseringsprompten. Gjenta auth ved å legge til følgende kode som første linje i viewDidLoad () etter superanropet:

prøv firebaseAuth.signOut ()

Dette vil tvinge programmet tilbake til sin opprinnelige tilstand slik at du kan teste autentisering via telefonens SMS. Kjør appen igjen, denne gangen du velger Logg inn med telefon.

Konklusjon

I denne opplæringen fikk du en introduksjon til å bruke Firebase som en back-end-plattform for appen din, og du så hvordan du autentiserer brukere ved hjelp av den tradisjonelle e-post- og passordkombinasjonen, samt via telefon og SMS, en tilnærming som er populær blant apper som WhatsApp.

Vi begynte da å bygge vår enkle FirebaseDo-app, og selv om det ikke gjør noen av de faktiske reminder-funksjonalitetene ennå, begynner vi å jobbe med det i neste opplæringsoppgave. Men i noen få linjer klarte vi å oppnå følgende:

  • integrert Firebase for å sette opp en godkjenningsmekanisme for e-post og passord
  • lagt til evnen til å autentisere via SMS
  • spore autentiseringstilstander
  • håndtert feil grasiøst

I resten av serien ser du noen av de andre komponentene i Firebase.

Og mens du er her, sørg for å sjekke ut noen av våre andre innlegg på IOS app utvikling!