FirebaseUI è una libreria creata in aggiunta all'SDK Firebase Authentication che fornisce flussi di interfaccia utente drop-in da utilizzare all'interno dell'app. FirebaseUI offre i seguenti vantaggi:
- Più fornitori: flussi di accesso per email/password, link email, telefono l'autenticazione, l'accesso con Google, l'accesso a Facebook e l'accesso a Twitter.
- Gestione dell'account: flussi per gestire le attività di gestione dell'account, ad esempio: creazione di account e reimpostazione delle password.
- Collegamento anonimo di account: consente di collegare automaticamente gli account anonimi. ai provider di identità.
- Personalizzabile: personalizza l'aspetto di FirebaseUI in base alla tua app. Inoltre, Poiché FirebaseUI è open source, puoi creare un fork del progetto e personalizzarlo in base alle tue esigenze.
Prima di iniziare
Aggiungi FirebaseUI al tuo podfile:
pod 'FirebaseUI'
Se preferisci, puoi aggiungere solo il componente Auth e i provider vuoi utilizzare:
pod 'FirebaseUI/Auth' pod 'FirebaseUI/Google' pod 'FirebaseUI/Facebook' pod 'FirebaseUI/OAuth' # Used for Sign in with Apple, Twitter, etc pod 'FirebaseUI/Phone'
Se non hai ancora collegato la tua app al progetto Firebase, puoi farlo da la console Firebase.
Configurare i metodi di accesso
Prima di poter utilizzare Firebase per far accedere gli utenti, devi attivare e configurare i metodi di accesso che vuoi supportare.
Indirizzo email e password
Nella console Firebase, apri la sezione Autenticazione e attiva l'autenticazione tramite email e password.
Autenticazione del link email
Nella console Firebase, apri la sezione Autenticazione. Nella scheda Metodo di accesso, attiva il provider Email/Password. Tieni presente che per utilizzare l'accesso tramite link email è necessario attivare l'accesso con email o password.
Nella stessa sezione, attiva l'accesso Invia email tramite link (accesso senza password). e fai clic su Salva.
Puoi abilitare l'accesso tramite link via email inizializzando un
FUIEmailAuth
conFIREmailLinkAuthSignInMethod
. Dovrai anche fornire un oggettoFIRActionCodeSettings
valido conhandleCodeInApp
impostato su true.
var actionCodeSettings = ActionCodeSettings()
actionCodeSettings.url = URL(string: "https://example.firebasestorage.app")
actionCodeSettings.handleCodeInApp = true
actionCodeSettings.setAndroidPackageName("com.firebase.example", installIfNotAvailable: false, minimumVersion: "12")
let provider = FUIEmailAuth(authUI: FUIAuth.defaultAuthUI()!,
signInMethod: FIREmailLinkAuthSignInMethod,
forceSameDevice: false,
allowNewEmailAccounts: true,
actionCodeSetting: actionCodeSettings)
FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
actionCodeSettings.URL = [NSURL URLWithString:@"https://example.firebasestorage.app"];
actionCodeSettings.handleCodeInApp = YES;
[actionCodeSettings setAndroidPackageName:@"com.firebase.example"
installIfNotAvailable:NO
minimumVersion:@"12"];
id<FUIAuthProvider> provider = [[FUIEmailAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]
signInMethod:FIREmailLinkAuthSignInMethod
forceSameDevice:NO
allowNewEmailAccounts:YES
actionCodeSetting:actionCodeSettings];
Inoltre, devi inserire nella lista consentita l'URL che passi all'inizializzatore. Puoi farlo nella console Firebase, aprendo la sezione Autenticazione. Nella scheda Metodo di accesso, aggiungi l'URL in Domini autorizzati.
Una volta individuato il link diretto, dovrai passarlo alla UI di autenticazione gestire.
FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)
[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
- L'accesso tramite link email in FirebaseUI-iOS è compatibile con FirebaseUI-Android e FirebaseUI-web in cui un utente che avvia il flusso da FirebaseUI-Android può aprire il link e completare l'accesso con FirebaseUI-web. Lo stesso vale per il flusso opposto.
Apple
Segui le sezioni Prima di iniziare e Conformità ai requisiti di Apple per i dati anonimizzati nella guida Accedi con Apple di Firebase.
Aggiungi la funzionalità Accedi con Apple al file dei diritti.
Inizializza un'istanza del provider OAuth configurata per Accedi con Apple:
provider = FUIOAuth.appleAuthProvider()
FUIOAuth *provider = [FUIOAuth appleAuthProvider];
- Configurare l'accesso con Google utilizzando questo tutorial
Configura l'SDK di accesso a Facebook seguendo Pagina introduttiva di Facebook.
Nella console Firebase, apri la sezione Autenticazione e attiva Facebook Per attivare l'accesso con Facebook, devi fornire il tuo ID app e il segreto dell'app Facebook, che puoi ottenere nella console per sviluppatori Facebook.
Attiva la condivisione del portachiavi nel progetto Xcode dalla schermata Impostazioni progetto > Funzionalità.
Aggiungi
fbFACEBOOK_APP_ID
come schema URL nel progetto Xcode.Aggiungi il tuo ID app Facebook e il tuo nome visualizzato al file
Info.plist
:Chiave Valore ID app Facebook FACEBOOK_APP_ID
(ad esempio1234567890
)NomeDisplay Facebook Il nome della tua app Inizializza un'istanza del provider Facebook:
provider = FUIFacebookAuth(authUI: FUIAuth.defaultAuthUI())
FUIFacebookAuth *provider = [[FUIFacebookAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]];
Se vuoi utilizzare l'accesso limitato di Facebook, imposta la proprietà
useLimitedLogin
sull'istanzaFUIFacebookAuth
.provider.useLimitedLogin = true
provider.useLimitedLogin = YES;
Nella console Firebase, apri la sezione Autenticazione e attiva Twitter Per abilitare l'accesso a Twitter, devi fornire la tua API Twitter chiave e segreto dell'utente, che è possibile ottenere nell'applicazione Twitter Console di gestione.
Inizializza un'istanza del provider OAuth configurata per l'accesso a Twitter:
provider = FUIOAuth.twitterAuthProvider()
FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
Numero di telefono
Nella console Firebase, apri la sezione Autenticazione e attiva l'accesso con numero di telefono.
Firebase deve essere in grado di verificare che le richieste di accesso tramite numero di telefono provengano dalla tua app. Uno dei modi per farlo è tramite le notifiche APN. Consulta: Attivare la verifica app per maggiori dettagli.
Per attivare le notifiche del servizio APN da utilizzare con Firebase Authentication:
In Xcode, attiva le notifiche push. per il tuo progetto.
Carica la chiave di autenticazione del servizio APN su Firebase. Se non hai ancora una chiave di autenticazione APN, assicurati di crearne una nel Centro per gli sviluppatori Apple.
-
All'interno del progetto nella console Firebase, seleziona icona a forma di ingranaggio, seleziona Impostazioni progetto, quindi seleziona Scheda Cloud Messaging.
-
Nella sezione Chiave di autenticazione APN in Configurazione app per iOS, fai clic sul pulsante Carica .
-
Vai alla posizione in cui hai salvato la chiave, selezionala e fai clic su Apri. Aggiungi l'ID per la chiave (disponibile nel Apple Developer Member Center) e fai clic su Carica.
Se hai già un certificato del servizio APN, puoi caricarlo.
-
Quando non è possibile ricevere le notifiche del servizio APN su un dispositivo, Firebase utilizza reCAPTCHA per verificare le richieste.
Per attivare la verifica reCAPTCHA, procedi nel seguente modo in Xcode:
- Apri la configurazione del progetto: fai doppio clic sul nome del progetto nella visualizzazione ad albero a sinistra. Seleziona la tua app dalla sezione TARGET, poi la scheda Informazioni ed espandi la sezione Tipi di URL.
- Fai clic sul pulsante + e aggiungi l'ID app codificato come URL
. Puoi trovare l'ID app codificato nella pagina Impostazioni generali della Console Firebase, nella sezione relativa all'app per iOS. Lascia vuoti gli altri campi.
Al termine, la configurazione dovrebbe avere un aspetto simile al seguente (ma con i valori specifici dell'applicazione):
Facoltativo: Firebase utilizza lo scambio di metodi per ottenere automaticamente il token APNs della tua app, per gestire le notifiche push silenziose inviate da Firebase alla tua app e per intercettare automaticamente il reindirizzamento dello schema personalizzato dalla pagina di verifica reCAPTCHA durante la verifica.
Se preferisci non utilizzare lo scambio, consulta la Appendice: utilizzo dell'accesso tramite telefono senza lo scambio nelle documentazioni sull'autenticazione dell'SDK Firebase.
Accedi
Per avviare il flusso di accesso di FirebaseUI, devi prima inizializzare FirebaseUI:
import FirebaseAuthUI
/* ... */
FirebaseApp.configure()
let authUI = FUIAuth.defaultAuthUI()
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self
@import FirebaseAuthUI;
...
[FIRApp configure];
FUIAuth *authUI = [FUIAuth defaultAuthUI];
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self;
Quindi, configura FirebaseUI in modo da utilizzare i metodi di accesso che vuoi supportare:
import FirebaseAuthUI
import FirebaseFacebookAuthUI
import FirebaseGoogleAuthUI
import FirebaseOAuthUI
import FirebasePhoneAuthUI
let providers: [FUIAuthProvider] = [
FUIGoogleAuth(),
FUIFacebookAuth(),
FUITwitterAuth(),
FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()),
]
self.authUI.providers = providers
@import FirebaseAuthUI;
@import FirebaseFacebookAuthUI;
@import FirebaseGoogleAuthUI;
@import FirebaseOAuthUI;
@import FirebasePhoneAuthUI;
...
NSArray<id<FUIAuthProvider>> *providers = @[
[[FUIGoogleAuth alloc] init],
[[FUIFacebookAuth alloc] init],
[[FUITwitterAuth alloc] init],
[[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]
];
_authUI.providers = providers;
Se hai attivato l'accesso con Google o Facebook, implementa un gestore per il risultato i flussi di registrazione di Google e Facebook:
func application(_ app: UIApplication, open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?
if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false {
return true
}
// other URL handling goes here.
return false
}
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary *)options {
NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey];
return [[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
}
Infine, ottieni un'istanza di AuthViewController
da FUIAuth
. Puoi quindi presentarlo come primo view controller della tua app o da un altro view controller della tua app.
Per visualizzare il selettore del metodo di accesso:
let authViewController = authUI.authViewController()
Se utilizzi solo l'accesso con numero di telefono, puoi visualizzare direttamente la visualizzazione di accesso con numero di telefono:
let phoneProvider = FUIAuth.defaultAuthUI().providers.first as! FUIPhoneAuth
phoneProvider.signIn(withPresenting: currentlyVisibleController, phoneNumber: nil)
Per visualizzare il selettore del metodo di accesso:
UINavigationController *authViewController = [authUI authViewController];
Se utilizzi solo l'accesso con numero di telefono, puoi visualizzare direttamente la visualizzazione di accesso con numero di telefono:
FUIPhoneAuth *phoneProvider = [FUIAuth defaultAuthUI].providers.firstObject;
[phoneProvider signInWithPresentingViewController:currentlyVisibleController phoneNumber:nil];
Dopo aver presentato la visualizzazione Autenticazione e dopo che l'utente ha eseguito l'accesso, il risultato è
restituito al delegato FirebaseUI Auth in didSignInWithUser:error:
:
func authUI(_ authUI: FUIAuth, didSignInWith user: FIRUser?, error: Error?) {
// handle user and error as necessary
}
- (void)authUI:(FUIAuth *)authUI
didSignInWithUser:(nullable FIRUser *)user
error:(nullable NSError *)error {
// Implement this method to handle signed in user or error if any.
}
Esci
FirebaseUI fornisce metodi di praticità per uscire da Firebase Authentication e da tutti i provider di identità social:
authUI.signOut()
[authUI signOut];
Personalizzazione
Puoi personalizzare le schermate di accesso creando sottoclassi della vista FirebaseUI
controller e specificarli nei metodi delegati di FUIAuth
:
func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController {
return FUICustomAuthPickerViewController(nibName: "FUICustomAuthPickerViewController",
bundle: Bundle.main,
authUI: authUI)
}
func emailEntryViewController(forAuthUI authUI: FUIAuth) -> FUIEmailEntryViewController {
return FUICustomEmailEntryViewController(nibName: "FUICustomEmailEntryViewController",
bundle: Bundle.main,
authUI: authUI)
}
func passwordRecoveryViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordRecoveryViewController {
return FUICustomPasswordRecoveryViewController(nibName: "FUICustomPasswordRecoveryViewController",
bundle: Bundle.main,
authUI: authUI,
email: email)
}
func passwordSignInViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignInViewController {
return FUICustomPasswordSignInViewController(nibName: "FUICustomPasswordSignInViewController",
bundle: Bundle.main,
authUI: authUI,
email: email)
}
func passwordSignUpViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignUpViewController {
return FUICustomPasswordSignUpViewController(nibName: "FUICustomPasswordSignUpViewController",
bundle: Bundle.main,
authUI: authUI,
email: email)
}
func passwordVerificationViewController(forAuthUI authUI: FUIAuth, email: String, newCredential: AuthCredential) -> FUIPasswordVerificationViewController {
return FUICustomPasswordVerificationViewController(nibName: "FUICustomPasswordVerificationViewController",
bundle: Bundle.main,
authUI: authUI,
email: email,
newCredential: newCredential)
}
- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI {
return [[FUICustomAuthPickerViewController alloc] initWithNibName:@"FUICustomAuthPickerViewController"
bundle:[NSBundle mainBundle]
authUI:authUI];
}
- (FUIEmailEntryViewController *)emailEntryViewControllerForAuthUI:(FUIAuth *)authUI {
return [[FUICustomEmailEntryViewController alloc] initWithNibName:@"FUICustomEmailEntryViewController"
bundle:[NSBundle mainBundle]
authUI:authUI];
}
- (FUIPasswordSignInViewController *)passwordSignInViewControllerForAuthUI:(FUIAuth *)authUI
email:(NSString *)email {
return [[FUICustomPasswordSignInViewController alloc] initWithNibName:@"FUICustomPasswordSignInViewController"
bundle:[NSBundle mainBundle]
authUI:authUI
email:email];
}
- (FUIPasswordSignUpViewController *)passwordSignUpViewControllerForAuthUI:(FUIAuth *)authUI
email:(NSString *)email {
return [[FUICustomPasswordSignUpViewController alloc] initWithNibName:@"FUICustomPasswordSignUpViewController"
bundle:[NSBundle mainBundle]
authUI:authUI
email:email];
}
- (FUIPasswordRecoveryViewController *)passwordRecoveryViewControllerForAuthUI:(FUIAuth *)authUI
email:(NSString *)email {
return [[FUICustomPasswordRecoveryViewController alloc] initWithNibName:@"FUICustomPasswordRecoveryViewController"
bundle:[NSBundle mainBundle]
authUI:authUI
email:email];
}
- (FUIPasswordVerificationViewController *)passwordVerificationViewControllerForAuthUI:(FUIAuth *)authUI
email:(NSString *)email
newCredential:(FIRAuthCredential *)newCredential {
return [[FUICustomPasswordVerificationViewController alloc] initWithNibName:@"FUICustomPasswordVerificationViewController"
bundle:[NSBundle mainBundle]
authUI:authUI
email:email
newCredential:newCredential];
}
Puoi personalizzare l'URL dei Termini di servizio della tua app, di cui trovi il link nella schermata di creazione account:
let kFirebaseTermsOfService = URL(string: "https://example.com/terms")!
authUI.tosurl = kFirebaseTermsOfService
authUI.TOSURL = [NSURL URLWithString:@"https://example.com/terms"];
Infine, puoi personalizzare i messaggi e le richieste mostrati agli utenti per specificare un bundle personalizzato:
authUI.customStringsBundle = NSBundle.mainBundle() // Or any custom bundle.
authUI.customStringsBundle = [NSBundle mainBundle]; // Or any custom bundle.
Passaggi successivi
- Per ulteriori informazioni sull'utilizzo e sulla personalizzazione di FirebaseUI, consulta il file README su GitHub.
- Se trovi un problema in FirebaseUI e vuoi segnalarlo, utilizza lo issue tracker di GitHub.