Uwierzytelnij się anonimowo w Firebase na platformach Apple

Możesz użyć uwierzytelniania Firebase, aby utworzyć tymczasowe konta anonimowe i używać ich do uwierzytelniania w Firebase. Za pomocą tych tymczasowych anonimowych kont użytkownicy, którzy nie zarejestrowali się jeszcze w Twojej aplikacji, mogą pracować z danymi chronionymi regułami bezpieczeństwa. Jeśli anonimowy użytkownik zdecyduje się zarejestrować w Twojej aplikacji, możesz powiązać jego dane logowania z anonimowym kontem, aby mógł w przyszłych sesjach kontynuować pracę z chronionymi danymi.

Zanim zaczniesz

  1. Użyj Menedżera pakietów Swift, aby zainstalować zależności Firebase i zarządzać nimi.

    1. W Xcode, przy otwartym projekcie aplikacji, przejdź do File > Add Packages .
    2. Po wyświetleniu monitu dodaj repozytorium SDK platform Firebase Apple:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. Wybierz bibliotekę uwierzytelniania Firebase.
    5. Dodaj flagę -ObjC do sekcji Inne flagi linkera w ustawieniach kompilacji celu.
    6. Po zakończeniu Xcode automatycznie rozpocznie rozwiązywanie i pobieranie zależności w tle.
  2. Jeśli jeszcze nie połączyłeś aplikacji z projektem Firebase, zrób to z konsoli Firebase .
  3. Włącz anonimową autoryzację:
    1. W konsoli Firebase otwórz sekcję Uwierzytelnianie .
    2. Na stronie Metody logowania włącz metodę logowania anonimowego .
    3. Opcjonalnie : jeśli zaktualizowałeś swój projekt do uwierzytelniania Firebase z platformą tożsamości , możesz włączyć automatyczne czyszczenie. Po włączeniu tego ustawienia anonimowe konta starsze niż 30 dni zostaną automatycznie usunięte. W projektach z włączonym automatycznym czyszczeniem uwierzytelnianie anonimowe nie będzie już wliczane do limitów użytkowania ani przydziałów rozliczeniowych. Zobacz Automatyczne czyszczenie .

Uwierzytelnij się anonimowo w Firebase

Gdy niezalogowany użytkownik korzysta z funkcji aplikacji wymagającej uwierzytelniania w Firebase, zaloguj się anonimowo, wykonując następujące kroki:

  1. Zaimportuj moduł FirebaseCore do swojego UIApplicationDelegate , a także wszelkie inne moduły Firebase, których używa delegat aplikacji. Na przykład, aby użyć Cloud Firestore i uwierzytelniania:

    SwiftUI

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

    Szybki

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Cel C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Skonfiguruj udostępnioną instancję FirebaseApp w aplikacji delegata application(_:didFinishLaunchingWithOptions:) metoda:

    SwiftUI

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

    Szybki

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

    Cel 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 pośrednictwem UIApplicationDelegateAdaptor lub NSApplicationDelegateAdaptor . Musisz także wyłączyć przełączanie delegatów aplikacji. Aby uzyskać więcej informacji, zapoznaj się z instrukcjami 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: ::

    Szybki

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

    Cel C

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

    Szybki

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

    Cel C

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

Zamień konto anonimowe na konto stałe

Gdy anonimowy użytkownik zarejestruje się w Twojej aplikacji, możesz zezwolić mu na kontynuowanie pracy na nowym koncie — na przykład możesz udostępnić na nowym koncie pozycje, które użytkownik dodał do koszyka przed rejestracją. koszyk konta. Aby to zrobić, wykonaj następujące kroki:

  1. Gdy użytkownik się zarejestruje, zakończ proces logowania dla dostawcy uwierzytelniania użytkownika, aż do wywołania jednej z metod FIRAuth.signInWith , ale nie włącznie. Na przykład uzyskaj token identyfikatora Google użytkownika, token dostępu do Facebooka lub adres e-mail i hasło.
  2. Uzyskaj FIRAuthCredential dla nowego dostawcy uwierzytelniania:

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

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

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

Automatyczne czyszczenie

Jeśli zaktualizowałeś swój projekt do uwierzytelniania Firebase z platformą tożsamości , możesz włączyć automatyczne czyszczenie w konsoli Firebase. Po włączeniu tej funkcji zezwalasz Firebase na automatyczne usuwanie anonimowych kont starszych niż 30 dni. W projektach z włączonym automatycznym czyszczeniem uwierzytelnianie anonimowe nie będzie wliczane do limitów użytkowania ani przydziałów rozliczeniowych.

  • Wszelkie anonimowe konta utworzone po włączeniu automatycznego czyszczenia mogą zostać automatycznie usunięte w dowolnym momencie po 30 dniach od ich utworzenia.
  • Istniejące anonimowe konta będą kwalifikowały się do automatycznego usunięcia 30 dni po włączeniu automatycznego czyszczenia.
  • Jeśli wyłączysz automatyczne czyszczenie, wszystkie anonimowe konta 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 będzie to dotyczyć, a Twój projekt został uaktualniony do uwierzytelniania Firebase z platformą tożsamości , możesz filtrować według is_anon w Cloud Logging .

Następne 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 .