FirebaseUI to biblioteka utworzona na bazie pakietu SDK Uwierzytelniania Firebase, która udostępnia przepływy w interfejsie użytkownika do aplikacji. FirebaseUI zapewnia następujące korzyści:
- Wielu dostawców: procesy logowania w przypadku adresu e-mail i hasła, linku w e-mailu, uwierzytelniania telefonu, logowania przez Google, logowania na Facebooku i logowania na Twitterze.
- Zarządzanie kontem: procesy obsługi zadań związanych z zarządzaniem kontem, takich jak tworzenie konta czy resetowanie hasła.
- Anonimowe łączenie kont: proces automatycznego łączenia anonimowych kont z dostawcami tożsamości.
- Możliwość dostosowania: dostosuj wygląd FirebaseUI do swojej aplikacji. Oprócz tego FirebaseUI jest open source, więc możesz utworzyć rozwidlenie projektu i dostosować go do swoich potrzeb.
Zanim zaczniesz
Dodaj FirebaseUI do pliku Podfile:
pod 'FirebaseUI'
Jeśli wolisz, możesz dodać tylko komponent Auth i dostawców, z których chcesz korzystać:
pod 'FirebaseUI/Auth' pod 'FirebaseUI/Google' pod 'FirebaseUI/Facebook' pod 'FirebaseUI/OAuth' # Used for Sign in with Apple, Twitter, etc pod 'FirebaseUI/Phone'
Jeśli Twoja aplikacja nie jest jeszcze połączona z projektem Firebase, możesz to zrobić z poziomu konsoli Firebase.
Skonfiguruj metody logowania
Aby móc logować użytkowników za pomocą Firebase, musisz włączyć i skonfigurować metody logowania, które mają być obsługiwane.
Adres e-mail i hasło
W konsoli Firebase otwórz sekcję Uwierzytelnianie i włącz uwierzytelnianie za pomocą adresu e-mail oraz hasła.
Uwierzytelnianie linku w e-mailu
W konsoli Firebase otwórz sekcję Uwierzytelnianie. Na karcie Metoda logowania włącz dostawcę E-mail/hasło. Pamiętaj, że aby korzystać z logowania za pomocą linku e-mail, musisz włączyć logowanie za pomocą adresu e-mail lub hasła.
W tej samej sekcji włącz metodę logowania Link w e-mailu (logowanie bez hasła) i kliknij Zapisz.
Logowanie za pomocą linku w e-mailu możesz włączyć, zainicjując instancję
FUIEmailAuth
za pomocąFIREmailLinkAuthSignInMethod
. Musisz też podać prawidłowy obiektFIRActionCodeSettings
z atrybutemhandleCodeInApp
ustawionym na wartość true.
Swift
var actionCodeSettings = ActionCodeSettings()
actionCodeSettings.url = URL(string: "https://example.appspot.com")
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)
Objective-C
FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
actionCodeSettings.URL = [NSURL URLWithString:@"https://example.appspot.com"];
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];
Dodatkowo musisz umieścić na białej liście adres URL przekazywany do narzędzia iniatializer. Możesz to zrobić w konsoli Firebase i otwórz sekcję Uwierzytelnianie. Na karcie Metoda logowania dodaj URL w sekcji Autoryzowane domeny.
Po wykryciu precyzyjnego linku musisz przekazać go do interfejsu uwierzytelniania, aby mógł go obsłużyć.
Swift
FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)
Objective-C
[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
- Logowanie za pomocą linku w FirebaseUI-iOS za pomocą linku w e-mailu jest zgodne z FirebaseUI-Android i FirebaseUI-web. W tym celu użytkownik rozpoczynający proces z FirebaseUI-Android może otworzyć ten link i zalogować się przez FirebaseUI-web. To samo dotyczy przeciwnego przepływu.
Apple
Wykonaj czynności opisane w sekcjach Zanim zaczniesz i Wymagania Apple dotyczące zanonimizowanych danych w przewodniku Firebase Zaloguj się przez Apple.
Dodaj do pliku uprawnień funkcję Zaloguj się przez Apple.
Zainicjuj instancję dostawcy OAuth skonfigurowaną pod kątem funkcji Zaloguj się przez Apple:
Swift
provider = FUIOAuth.appleAuthProvider()
Objective-C
FUIOAuth *provider = [FUIOAuth appleAuthProvider];
- Skonfiguruj Logowanie przez Google, korzystając z tego samouczka
Skonfiguruj pakiet Facebook Login SDK, postępując zgodnie z tą stroną na temat rozpoczynania pracy z Facebookiem.
W konsoli Firebase otwórz sekcję Uwierzytelnianie i włącz Facebooka. Aby włączyć logowanie przez Facebooka, musisz podać identyfikator aplikacji Facebook i tajny klucz aplikacji, które znajdziesz w konsoli Facebook Developers Console.
Na ekranie Ustawienia projektu > Funkcje włącz udostępnianie pęku kluczy w projekcie Xcode.
Dodaj
fbFACEBOOK_APP_ID
jako schemat adresu URL w projekcie Xcode.Dodaj identyfikator aplikacji Facebook i wyświetlaną nazwę do pliku
Info.plist
:Klucz Wartość Identyfikator aplikacji Facebook FACEBOOK_APP_ID
(np.1234567890
)NazwaWyświetlana na Facebooku Nazwa Twojej aplikacji Zainicjuj instancję dostawcy Facebooka:
Swift
provider = FUIFacebookAuth(authUI: FUIAuth.defaultAuthUI())
Objective-C
FUIFacebookAuth *provider = [[FUIFacebookAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]];
Jeśli chcesz korzystać z Facebook Limited Login (Logowanie ograniczone przez Facebooka), ustaw właściwość
useLimitedLogin
w wystąpieniuFUIFacebookAuth
.Swift
provider.useLimitedLogin = true
Objective-C
provider.useLimitedLogin = YES;
W konsoli Firebase otwórz sekcję Uwierzytelnianie i włącz Twittera. Aby umożliwić logowanie przez Twittera, musisz podać swój klucz klienta i tajny klucz klienta Twitter API, które znajdziesz w konsoli zarządzania aplikacjami Twittera.
Zainicjuj instancję dostawcy OAuth skonfigurowaną na potrzeby logowania przez Twittera:
Swift
provider = FUIOAuth.twitterAuthProvider()
Objective-C
FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
Numer telefonu
W konsoli Firebase otwórz sekcję Uwierzytelnianie i włącz logowanie numeru telefonu.
Firebase musi mieć możliwość sprawdzania, czy żądania zalogowania się na numer telefonu pochodzą z Twojej aplikacji. Można to zrobić na przykład za pomocą powiadomień APN. Więcej informacji znajdziesz w artykule Włączanie weryfikacji aplikacji.
Aby włączyć powiadomienia APNs do użytku z Uwierzytelnianiem Firebase:
W Xcode włącz powiadomienia push dla swojego projektu.
Prześlij swój klucz uwierzytelniania APNs do Firebase. Jeśli nie masz jeszcze klucza uwierzytelniania APNs, utwórz go w Apple Developer Member Center.
-
W projekcie w konsoli Firebase kliknij ikonę koła zębatego, wybierz Ustawienia projektu, a następnie kartę Komunikacja w chmurze.
-
W sekcji Klucz uwierzytelniania APNs w sekcji Konfiguracja aplikacji na iOS kliknij przycisk Prześlij.
-
Przejdź do lokalizacji, w której masz zapisany klucz, wybierz go i kliknij Otwórz. Dodaj identyfikator klucza (dostępny w Apple Developer Member Center) i kliknij Prześlij.
Jeśli masz już certyfikat APNs, możesz zamiast tego przesłać certyfikat.
-
Jeśli nie można odebrać powiadomień APN na urządzenie, Firebase używa reCAPTCHA do weryfikacji żądań.
Aby włączyć weryfikację reCAPTCHA, wykonaj te czynności w Xcode:
- Otwórz konfigurację projektu: kliknij dwukrotnie nazwę projektu w widoku drzewa po lewej stronie. Wybierz aplikację w sekcji CELE, kliknij kartę Informacje i rozwiń sekcję Typy adresów URL.
- Kliknij przycisk + i dodaj zakodowany identyfikator aplikacji jako schemat adresu URL. Zakodowany identyfikator aplikacji znajdziesz na stronie Ustawienia ogólne konsoli Firebase, w sekcji dotyczącej aplikacji na iOS. Pozostałe pola pozostaw puste.
Po zakończeniu konfiguracja powinna wyglądać podobnie do tej (ale z wartościami dotyczącymi aplikacji):
Opcjonalnie: Firebase używa wirowania metod, aby automatycznie uzyskiwać token APNs Twojej aplikacji, obsługiwać ciche powiadomienia push wysyłane do Twojej aplikacji i automatycznie przechwytywać przekierowanie schematu niestandardowego ze strony weryfikacji reCAPTCHA podczas weryfikacji.
Jeśli nie chcesz używać przesuwania palcem, przeczytaj artykuł Dodatek: logowanie się przy użyciu telefonu bez przesuwania w dokumentacji uwierzytelniania pakietu SDK Firebase.
Zaloguj się
Aby uruchomić logowanie się w FirebaseUI, najpierw zainicjuj interfejs FirebaseUI:
Swift
import FirebaseAuthUI
/* ... */
FirebaseApp.configure()
let authUI = FUIAuth.defaultAuthUI()
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self
Objective-C
@import FirebaseAuthUI;
...
[FIRApp configure];
FUIAuth *authUI = [FUIAuth defaultAuthUI];
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self;
Następnie skonfiguruj FirebaseUI, tak aby korzystała z metod logowania, które chcesz obsługiwać:
Swift
import FirebaseAuthUI
import FirebaseFacebookAuthUI
import FirebaseGoogleAuthUI
import FirebaseOAuthUI
import FirebasePhoneAuthUI
let providers: [FUIAuthProvider] = [
FUIGoogleAuth(),
FUIFacebookAuth(),
FUITwitterAuth(),
FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()),
]
self.authUI.providers = providers
Objective-C
@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;
Jeśli masz włączone logowanie przez Google lub Facebooka, zaimplementuj moduł obsługi wyników procesów rejestracji w Google lub na Facebooku:
Swift
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
}
Objective-C
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary *)options {
NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey];
return [[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
}
Na koniec pobierz instancję AuthViewController
z usługi FUIAuth
. Następnie możesz zaprezentować go jako pierwszy kontroler widoku danych lub użyć innego kontrolera widoku w aplikacji.
Swift
Aby pobrać selektor metody logowania:
let authViewController = authUI.authViewController()
Jeśli korzystasz tylko z logowania się przy użyciu numeru telefonu, możesz zamiast tego wyświetlić bezpośrednio widok logowania z numerem telefonu:
let phoneProvider = FUIAuth.defaultAuthUI().providers.first as! FUIPhoneAuth
phoneProvider.signIn(withPresenting: currentlyVisibleController, phoneNumber: nil)
Objective-C
Aby pobrać selektor metody logowania:
UINavigationController *authViewController = [authUI authViewController];
Jeśli korzystasz tylko z logowania się przy użyciu numeru telefonu, możesz zamiast tego wyświetlić bezpośrednio widok logowania z numerem telefonu:
FUIPhoneAuth *phoneProvider = [FUIAuth defaultAuthUI].providers.firstObject;
[phoneProvider signInWithPresentingViewController:currentlyVisibleController phoneNumber:nil];
Gdy wyświetlisz widok uwierzytelniania, a użytkownik się zaloguje, wynik jest zwracany do przedstawiciela uwierzytelniania FirebaseUI w metodzie didSignInWithUser:error:
:
Swift
func authUI(_ authUI: FUIAuth, didSignInWith user: FIRUser?, error: Error?) {
// handle user and error as necessary
}
Objective-C
- (void)authUI:(FUIAuth *)authUI
didSignInWithUser:(nullable FIRUser *)user
error:(nullable NSError *)error {
// Implement this method to handle signed in user or error if any.
}
Wyloguj się
FirebaseUI udostępnia wygodne metody wylogowywania się z Uwierzytelniania Firebase oraz ze wszystkich dostawców tożsamości społecznościowych:
Swift
authUI.signOut()
Objective-C
[authUI signOut];
Dostosowywanie
Możesz dostosować ekrany logowania, przypisując kontrolery widoku FirebaseUI do podklasy i określając je w metodach przekazywania dostępu w FUIAuth
:
Swift
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)
}
Objective-C
- (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];
}
Możesz dostosować adres URL do warunków korzystania z aplikacji. Link znajdziesz na ekranie tworzenia konta:
Swift
let kFirebaseTermsOfService = URL(string: "https://example.com/terms")!
authUI.tosurl = kFirebaseTermsOfService
Objective-C
authUI.TOSURL = [NSURL URLWithString:@"https://example.com/terms"];
Możesz też dostosować komunikaty i prompty wyświetlane użytkownikom, określając pakiet niestandardowy:
Swift
authUI.customStringsBundle = NSBundle.mainBundle() // Or any custom bundle.
Objective-C
authUI.customStringsBundle = [NSBundle mainBundle]; // Or any custom bundle.
Następne kroki
- Więcej informacji o używaniu i dostosowywaniu FirebaseUI znajdziesz w pliku README na GitHubie.
- Jeśli znajdziesz to w FirebaseUI, a następnie zechcesz to zgłosić, skorzystaj z narzędzia GitHub do śledzenia błędów.