Pierwsze kroki z Uwierzytelnianiem Firebase na platformach Apple

Możesz użyć Firebase Authentication, aby umożliwić użytkownikom logowanie się w aplikacji za pomocą jednej lub więcej metod logowania, w tym logowania się za pomocą adresu e-mail i hasła oraz dostawców tożsamości sfederowanej, takich jak Logowanie Google i Logowanie przez Facebooka. W tym samouczku pokazujemy, jak zacząć korzystać z Firebase Authentication. Dowiesz się z niego, jak dodać do aplikacji logowanie za pomocą adresu e-mail i hasła.

Łączenie aplikacji z Firebase

  1. Zainstaluj pakiet SDK Firebase.
  2. W konsoli Firebase dodaj aplikację do projektu Firebase.

Dodawanie Firebase Authentication do aplikacji

Do instalacji zależności Firebase i zarządzania nimi możesz używać menedżera pakietów Swift.

  1. Po otwarciu projektu aplikacji w Xcode wybierz Plik > Dodaj pakiety.
  2. Gdy pojawi się prośba, dodaj repozytorium pakietu SDK Firebase na platformy Apple:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Wybierz bibliotekę Firebase Authentication.
  5. Dodaj flagę -ObjC do sekcji Inne flagi linkera w ustawieniach kompilacji docelowej.
  6. Gdy to zrobisz, Xcode automatycznie zacznie wyszukiwać i pobierać zależności w tle.

(Opcjonalnie) Prototypowanie i testowanie za pomocą Firebase Local Emulator Suite

Zanim omówimy sposób uwierzytelniania użytkowników w aplikacji, przedstawimy zestaw narzędzi, których możesz używać do tworzenia prototypów i testowania funkcji Authentication:Firebase Local Emulator Suite. Jeśli zastanawiasz się nad wyborem techniki uwierzytelniania i dostawcy, testujesz różne modele danych z danymi publicznymi i prywatnymi za pomocą funkcji AuthenticationFirebase Security Rules lub tworzysz prototyp interfejsu logowania, możesz pracować lokalnie bez wdrażania usług na żywo.

Emulator Authentication jest częścią Local Emulator Suite, która umożliwia aplikacji interakcję z emulowaną zawartością i konfiguracją bazy danych, a także opcjonalnie z emulowanymi zasobami projektu (funkcjami, innymi bazami danych i regułami zabezpieczeń).

Korzystanie z emulatora Authentication wymaga wykonania kilku czynności:

  1. Dodanie linii kodu do konfiguracji testowej aplikacji, aby połączyć się z emulatorem.
  2. W katalogu głównym lokalnego katalogu projektu uruchom firebase emulators:start.
  3. Korzystanie z interfejsu Local Emulator Suite do tworzenia interaktywnych prototypów lub interfejsu API REST emulatora Authentication do testów nieinterakcyjnych.

Szczegółowy przewodnik znajdziesz w artykule Łączenie aplikacji z emulatorem Authentication. Więcej informacji znajdziesz w wprowadzeniu.Local Emulator Suite

Teraz zajmijmy się uwierzytelnianiem użytkowników.

Inicjowanie pakietu SDK Firebase

W delegacie aplikacji najpierw zaimportuj pakiet SDK Firebase:

import FirebaseCore
@import FirebaseCore;

Następnie w metodie application:didFinishLaunchingWithOptions: zainicjuj obiekt FirebaseApp:

// Use Firebase library to configure APIs
FirebaseApp.configure()
// Use Firebase library to configure APIs
[FIRApp configure];

Odbieranie stanu uwierzytelniania

Do każdego widoku aplikacji, który wymaga informacji o zalogowanym użytkowniku, dołącz do obiektu FIRAuth listenera. Ten odbiorca jest wywoływany, gdy zmienia się stan logowania użytkownika.

Dołącz listenera w metodzie viewWillAppear kontrolera widoku:

handle = Auth.auth().addStateDidChangeListener { auth, user in
  // ...
}
self.handle = [[FIRAuth auth]
    addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) {
      // ...
    }];

Odłącz także listenera w metodzie viewWillDisappear kontrolera widoku:

Auth.auth().removeStateDidChangeListener(handle!)
[[FIRAuth auth] removeAuthStateDidChangeListener:_handle];

Rejestrowanie nowych użytkowników

Utwórz formularz, który umożliwi nowym użytkownikom rejestrację w aplikacji za pomocą adresu e-mail i hasła. Gdy użytkownik wypełni formularz, zweryfikuj podany przez niego adres e-mail i hasło, a następnie prześlij je do metody createUser:

Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
  // ...
}
[[FIRAuth auth] createUserWithEmail:email
                           password:password
                         completion:^(FIRAuthDataResult * _Nullable authResult,
                                      NSError * _Nullable error) {
  // ...
}];

Logowanie dotychczasowych użytkowników

Utwórz formularz, który pozwoli obecnym użytkownikom logować się za pomocą adresu e-mail i hasła. Gdy użytkownik wypełni formularz, wywołaj metodę signIn:

Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in
  guard let strongSelf = self else { return }
  // ...
}
[[FIRAuth auth] signInWithEmail:self->_emailField.text
                       password:self->_passwordField.text
                     completion:^(FIRAuthDataResult * _Nullable authResult,
                                  NSError * _Nullable error) {
  // ...
}];

Pobieranie informacji o użytkowniku

Gdy użytkownik się zaloguje, możesz uzyskać o nim informacje. Na przykład w słuchaczu stanu uwierzytelniania:

if let user = user {
  // The user's ID, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server,
  // if you have one. Use getTokenWithCompletion:completion: instead.
  let uid = user.uid
  let email = user.email
  let photoURL = user.photoURL
  var multiFactorString = "MultiFactor: "
  for info in user.multiFactor.enrolledFactors {
    multiFactorString += info.displayName ?? "[DispayName]"
    multiFactorString += " "
  }
  // ...
}
if (user) {
  // The user's ID, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server,
  // if you have one. Use getTokenWithCompletion:completion: instead.
  NSString *email = user.email;
  NSString *uid = user.uid;
  NSMutableString *multiFactorString = [NSMutableString stringWithFormat:@"MultiFactor: "];
  for (FIRMultiFactorInfo *info in user.multiFactor.enrolledFactors) {
    [multiFactorString appendString:info.displayName];
    [multiFactorString appendString:@" "];
  }
  NSURL *photoURL = user.photoURL;
  // ...
}

Dalsze kroki

Dowiedz się, jak dodać obsługę innych dostawców tożsamości i anonimowych kont gościa: