Uwierzytelniaj anonimowo za pomocą Firebase na platformach Apple

Możesz używać Firebase Authentication do tworzenia i używania tymczasowych kont anonimowych do uwierzytelniania w Firebase. Tych tymczasowych kont anonimowych można używać, aby umożliwić użytkownikom, którzy nie zarejestrowali się jeszcze w aplikacji, pracę z danymi chronionymi przez reguły zabezpieczeń. Jeśli anonimowy użytkownik zdecyduje się zarejestrować w Twojej aplikacji, możesz połączyć jego dane logowania z kontem anonimowym, aby mógł w przyszłości nadal pracować z chronionymi danymi.

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 opcję 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 elementu docelowego.
    6. Gdy skończysz, Xcode zacznie automatycznie wyszukiwać i pobierać zależności w tle.
  2. Jeśli nie masz jeszcze połączenia aplikacji z projektem Firebase, zrób to w Firebase konsoli.
  3. Włącz anonimowe uwierzytelnianie:
    1. W Firebasekonsoli otwórz sekcję Uwierzytelnianie.
    2. Na stronie Metody logowania włącz metodę logowania Anonimowe.
    3. Opcjonalnie: jeśli Twój projekt został przeniesiony na wyższy abonament Firebase Authentication with Identity Platform, możesz włączyć automatyczne czyszczenie. Gdy włączysz to ustawienie, anonimowe konta założone ponad 30 dni temu będą automatycznie usuwane. W projektach z włączonym automatycznym czyszczeniem uwierzytelnianie anonimowe nie będzie już wliczane do limitów wykorzystania ani limitów płatności. Zobacz Automatyczne czyszczenie.

Anonimowe uwierzytelnianie w Firebase

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

  1. Zaimportuj moduł FirebaseCore w pliku UIApplicationDelegate, a także inne moduły Firebase używane przez delegata aplikacji. Aby na przykład użyć właściwości Cloud FirestoreAuthentication:

    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 współdzieloną instancję FirebaseApp 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ć zamianę 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 zezwolić mu na kontynuowanie pracy na nowym koncie. Możesz na przykład sprawić, że produkty dodane przez użytkownika do koszyka przed rejestracją będą dostępne w koszyku na nowym koncie. Aby to zrobić, wykonaj te czynności:

  1. Gdy użytkownik się zarejestruje, dokończ proces logowania w przypadku dostawcy uwierzytelniania użytkownika, ale nie wywołuj żadnej z metod FIRAuth.signInWith. Możesz na przykład uzyskać token identyfikatora Google użytkownika, token dostępu do Facebooka lub adres e-mail i hasło.
  2. Uzyskaj 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: użytkownika logującego się:

    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 oczyszczanie

Jeśli Twój projekt został przeniesiony na wyższy abonament Firebase Authentication with Identity Platform, możesz włączyć automatyczne czyszczenie w konsoli Firebase. Gdy włączysz tę funkcję, zezwolisz Firebase na automatyczne usuwanie anonimowych kont starszych niż 30 dni. W projektach z włączonym automatycznym czyszczeniem anonimowe uwierzytelnianie nie będzie wliczane do limitów wykorzystania ani płatności.

  • Wszystkie anonimowe konta utworzone po włączeniu automatycznego czyszczenia mogą zostać automatycznie usunięte w dowolnym momencie po 30 dniach od 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 anonimowe konta zaplanowane do usunięcia pozostaną zaplanowane do usunięcia.
  • Jeśli „uaktualnisz” anonimowe konto, łącząc je z dowolną metodą logowania, nie zostanie ono 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_anonCloud 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.