Uwierzytelniaj anonimowo za pomocą Firebase na platformach Apple

Do uwierzytelniania w Firebase możesz używać Firebase Authentication, aby tworzyć i używać tymczasowych kont anonimowych do uwierzytelniania w Firebase. Tymczasowe konta anonimowe mogą służyć do tego, aby użytkownicy, którzy nie zarejestrowali się jeszcze w Twojej aplikacji, mogli pracować z danymi chronionymi przez reguły bezpieczeństwa. Jeśli anonimowy użytkownik zdecyduje się zarejestrować w Twojej aplikacji, możesz połączyć jego dane logowania z kontem anonimowym tak, aby mógł on kontynuować pracę z chronionymi danymi w przyszłych sesjach.

Zanim zaczniesz

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

    1. Po otwarciu projektu aplikacji wybierz w Xcode kolejno 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 linkera) w ustawieniach kompilacji celu.
    6. Gdy skończysz, Xcode zacznie automatycznie wyszukiwać i pobierać Twoje zależności w tle.
  2. Jeśli nie masz jeszcze połączonej aplikacji z projektem w Firebase, zrób to w Firebase konsoli.
  3. Włącz anonimowe uwierzytelnianie:
    1. W Firebase konsoli otwórz sekcję Auth (Uwierzytelnianie).
    2. Na stronie Sign-in Methods (Metody logowania) włącz metodę logowania Anonymous (Anonimowe).
    3. Opcjonalnie: jeśli Twój projekt został uaktualniony do Firebase Authentication with Identity Platform, możesz włączyć automatyczne czyszczenie. Gdy włączysz to ustawienie, konta anonimowe starsze niż 30 dni będą automatycznie usuwane. W projektach z włączonym automatycznym czyszczeniem uwierzytelnianie anonimowe nie będzie się już wliczać do limitów wykorzystania ani płatności. Więcej informacji znajdziesz w sekcji Automatyczne czyszczenie.

Anonimowe uwierzytelnianie w Firebase

Gdy wylogowany użytkownik korzysta z funkcji aplikacji, która wymaga uwierzytelnienia w Firebase, zaloguj go anonimowo, wykonując te czynności:

  1. Zaimportuj moduł FirebaseCore w UIApplicationDelegate, a także inne moduły Firebase, których używa delegat aplikacji. Aby na przykład używać Cloud Firestore i Authentication:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Skonfiguruj FirebaseApp współdzieloną instancję w metodzie application(_:didFinishLaunchingWithOptions:) delegata aplikacji:

    SwiftUI

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

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Jeśli używasz SwiftUI, musisz utworzyć delegata aplikacji i dołączyć go do struktury App za pomocą UIApplicationDelegateAdaptor lub NSApplicationDelegateAdaptor. Musisz też wyłączyć swizzling delegata aplikacji. Więcej informacji znajdziesz w instrukcjach dotyczących SwiftUI.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. Wywołaj metodę signInAnonymouslyWithCompletion::

    Swift

    Auth.auth().signInAnonymously { authResult, error in
      // ...
    }

    Objective-C

    [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult * _Nullable authResult,
                                                      NSError * _Nullable error) {
       // ...
     }];
  5. Jeśli metoda signInAnonymouslyWithCompletion: zakończy się bez błędu, możesz pobrać dane konta anonimowego użytkownika z obiektu FIRAuthDataResult:

    Swift

    guard let user = authResult?.user else { return }
    let isAnonymous = user.isAnonymous  // true
    let uid = user.uid

    Objective-C

    FIRUser *user = authResult.user;
    BOOL isAnonymous = user.anonymous;  // YES
    NSString *uid = user.uid;

Przekształcanie konta anonimowego w konto stałe

Gdy anonimowy użytkownik zarejestruje się w Twojej aplikacji, możesz pozwolić mu na kontynuowanie pracy na nowym koncie. Możesz na przykład sprawić, aby elementy dodane przez użytkownika do koszyka na zakupy przed rejestracją były dostępne w koszyku na zakupy na jego nowym koncie. Aby to zrobić, wykonaj te czynności:

  1. Gdy użytkownik się zarejestruje, dokończ proces logowania u dostawcy uwierzytelniania użytkownika, ale nie wywołuj żadnej z FIRAuth.signInWith metod. Na przykład pobierz token identyfikatora Google, token dostępu do Facebooka lub adres e-mail i hasło użytkownika.
  2. Pobierz FIRAuthCredential dla nowego dostawcy uwierzytelniania:

    Logowanie przez Google
    Swift
    guard
      let authentication = user?.authentication,
      let idToken = authentication.idToken
    else {
      return
    }
    
    let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                   accessToken: authentication.accessToken)
    Objective-C
    FIRAuthCredential *credential =
    [FIRGoogleAuthProvider credentialWithIDToken:result.user.idToken.tokenString
                                     accessToken:result.user.accessToken.tokenString];
    Logowanie przez Facebooka
    Swift
    let credential = FacebookAuthProvider
      .credential(withAccessToken: AccessToken.current!.tokenString)
    Objective-C
    FIRAuthCredential *credential = [FIRFacebookAuthProvider
        credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString];
    Logowanie za pomocą adresu e-mail i hasła
    Swift
    let credential = EmailAuthProvider.credential(withEmail: email, password: password)
    Objective-C
    FIRAuthCredential *credential =
        [FIREmailAuthProvider credentialWithEmail:email
                                                 password:password];
  3. Przekaż obiekt FIRAuthCredential do metody linkWithCredential:completion: zalogowanego użytkownika:

    Swift
        user.link(with: credential) { authResult, error in
      // ...
    }
    }
    Objective-C
        [[FIRAuth auth].currentUser linkWithCredential:credential
        completion:^(FIRAuthDataResult *result, NSError *_Nullable error) {
      // ...
    }];

Jeśli wywołanie linkWithCredential:completion: się powiedzie, nowe konto użytkownika będzie mogło uzyskać dostęp do danych Firebase konta anonimowego.

Automatyczne czyszczenie

Jeśli Twój projekt został uaktualniony do Firebase Authentication with Identity Platform, możesz włączyć automatyczne czyszczenie w konsoli Firebase. Gdy włączysz tę funkcję, Firebase będzie automatycznie usuwać konta anonimowe starsze niż 30 dni. W projektach z włączonym automatycznym czyszczeniem uwierzytelnianie anonimowe nie będzie się wliczać do limitów wykorzystania ani płatności.

  • Wszystkie konta anonimowe utworzone po włączeniu automatycznego czyszczenia mogą zostać automatycznie usunięte w dowolnym momencie po upływie 30 dni od ich utworzenia.
  • Istniejące konta anonimowe będą kwalifikować się do automatycznego usunięcia po 30 dniach od włączenia automatycznego czyszczenia.
  • Jeśli wyłączysz automatyczne czyszczenie, wszystkie konta anonimowe zaplanowane do usunięcia pozostaną zaplanowane do usunięcia.
  • Jeśli "uaktualnisz" konto anonimowe, łącząc je z dowolną metodą logowania, konto nie zostanie automatycznie usunięte.

Jeśli przed włączeniem tej funkcji chcesz sprawdzić, ilu użytkowników to dotyczy, a Twój projekt został uaktualniony do Firebase Authentication with Identity Platform, możesz filtrować według is_anon w Cloud Logging.

Dalsze kroki

Teraz, gdy użytkownicy mogą uwierzytelniać się w Firebase, możesz kontrolować ich dostęp do danych w bazie danych Firebase za pomocą reguł Firebase.