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ą co najmniej jednej metody logowania, w tym adresu e-mail i hasła, oraz dostawców tożsamości sfederowanej, takich jak Logowanie przez Google i logowanie przez Facebooka. Z tego samouczka dowiesz się, jak zacząć korzystać z Firebase Authentication, dodając 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 instalowania zależności Firebase i zarządzania nimi używaj menedżera pakietów Swift.

  1. W Xcode, po otwarciu projektu aplikacji, kliknij File > Add Packages (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 Other Linker Flags (Inne flagi łączące) w ustawieniach kompilacji celu.
  6. Gdy skończysz, Xcode zacznie automatycznie przetwarzać 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 przez aplikację, przedstawimy zestaw narzędzi, których możesz używać do prototypowania i testowania funkcji Authentication: Firebase Local Emulator Suite. Jeśli wybierasz techniki i dostawców uwierzytelniania, testujesz różne modele danych z danymi publicznymi i prywatnymi za pomocą Authentication i Firebase Security Rules lub tworzysz prototypy interfejsów logowania, możliwość pracy lokalnej bez wdrażania usług na żywo może być świetnym rozwiązaniem.

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 tylko kilku czynności:

  1. dodanie do konfiguracji testowej aplikacji wiersza kodu, który umożliwia połączenie z emulatorem;
  2. Uruchom firebase emulators:start w katalogu głównym projektu lokalnego.
  3. Korzystanie z interfejsu Local Emulator Suite do interaktywnego prototypowania lub interfejsu API REST emulatora Authentication do testowania nieinteraktywnego.

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

Teraz przejdźmy do uwierzytelniania użytkowników.

Inicjowanie pakietu SDK Firebase

W delegacie aplikacji najpierw zaimportuj pakiet SDK Firebase:

Swift

import FirebaseCore

Objective-C

@import FirebaseCore;

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

Swift

// Use Firebase library to configure APIs
FirebaseApp.configure()

Objective-C

// Use Firebase library to configure APIs
[FIRApp configure];

Nasłuchiwanie stanu uwierzytelniania

W każdym widoku aplikacji, który wymaga informacji o zalogowanym użytkowniku, dołącz detektor do obiektu FIRAuth. Ten detektor jest wywoływany za każdym razem, gdy zmienia się stan logowania użytkownika.

Dołącz detektor w metodzie viewWillAppear kontrolera widoku:

Swift

handle = Auth.auth().addStateDidChangeListener { auth, user in
  // ...
}

Objective-C

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

Odłącz detektor w metodzie viewWillDisappear kontrolera widoku:

Swift

Auth.auth().removeStateDidChangeListener(handle!)

Objective-C

[[FIRAuth auth] removeAuthStateDidChangeListener:_handle];

Rejestrowanie nowych użytkowników

Utwórz formularz, który pozwoli nowym użytkownikom zarejestrować się 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 przekaż je do metody createUser:

Swift

Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
  // ...
}

Objective-C

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

Logowanie dotychczasowych użytkowników

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

Swift

Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in
  guard let strongSelf = self else { return }
  // ...
}

Objective-C

[[FIRAuth auth] signInWithEmail:self->_emailField.text
                       password:self->_passwordField.text
                     completion:^(FIRAuthDataResult * _Nullable authResult,
                                  NSError * _Nullable error) {
  // ...
}];

Pobieranie informacji o użytkowniku

Po zalogowaniu się użytkownika możesz uzyskać informacje o nim. Na przykład w detektorze stanu uwierzytelniania:

Swift

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 += " "
  }
  // ...
}

Objective-C

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ści: