Аутентификация с помощью Firebase анонимно на платформах Apple

С помощью Firebase Authentication можно создавать и использовать временные анонимные учетные записи для аутентификации в Firebase. Эти временные анонимные учетные записи позволяют пользователям, еще не зарегистрировавшимся в вашем приложении, работать с данными, защищенными правилами безопасности. Если анонимный пользователь решит зарегистрироваться в вашем приложении, вы можете связать его учетные данные для входа с анонимной учетной записью , чтобы он мог продолжать работать со своими защищенными данными в будущих сессиях.

Прежде чем начать

  1. Используйте Swift Package Manager для установки и управления зависимостями Firebase.

    1. В Xcode, открыв проект приложения, перейдите в меню File > Add Packages .
    2. При появлении запроса добавьте репозиторий Firebase Apple Platforms SDK:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. Выберите библиотеку Firebase Authentication .
    5. Добавьте флаг -ObjC в раздел «Другие флаги компоновщика» в настройках сборки вашей целевой системы.
    6. После завершения Xcode автоматически начнет разрешение и загрузку ваших зависимостей в фоновом режиме.
  2. Если вы еще не подключили свое приложение к проекту Firebase, сделайте это через консоль Firebase .
  3. Включить анонимную аутентификацию:
    1. В консоли Firebase откройте раздел «Аутентификация» .
    2. На странице «Способы входа» включите анонимный способ входа.
    3. Необязательно : Если вы обновили свой проект до Firebase Authentication with Identity Platform , вы можете включить автоматическую очистку. При включении этой настройки анонимные учетные записи старше 30 дней будут автоматически удаляться. В проектах с включенной автоматической очисткой анонимная аутентификация больше не будет учитываться в лимитах использования или платежных квотах. См. раздел «Автоматическая очистка» .

Аутентификация с помощью Firebase анонимно

Когда пользователь, не вышедший из системы, использует функцию приложения, требующую аутентификации в Firebase, выполните следующие действия для его анонимного входа в систему:

  1. Импортируйте модуль FirebaseCore в ваш UIApplicationDelegate , а также любые другие модули Firebase, используемые вашим делегатом приложения. Например, чтобы использовать Cloud Firestore и Authentication :

    SwiftUI

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

    Быстрый

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Настройте общий экземпляр FirebaseApp в методе application(_:didFinishLaunchingWithOptions:) вашего делегата приложения:

    SwiftUI

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

    Быстрый

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Если вы используете SwiftUI, вам необходимо создать делегат приложения и прикрепить его к вашей структуре App с помощью UIApplicationDelegateAdaptor или NSApplicationDelegateAdaptor . Также необходимо отключить подмену делегатов приложения. Для получения дополнительной информации см. инструкции 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. Вызовите метод signInAnonymouslyWithCompletion:

    Быстрый

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

    Objective-C

    [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult * _Nullable authResult,
                                                      NSError * _Nullable error) {
       // ...
     }];
  5. Если метод signInAnonymouslyWithCompletion: завершится без ошибок, вы сможете получить данные учетной записи анонимного пользователя из объекта FIRAuthDataResult :

    Быстрый

    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;

Преобразовать анонимный аккаунт в постоянный.

Когда анонимный пользователь регистрируется в вашем приложении, вы можете разрешить ему продолжить работу с новой учетной записью — например, вы можете захотеть сделать товары, добавленные пользователем в корзину до регистрации, доступными в корзине покупок новой учетной записи. Для этого выполните следующие шаги:

  1. Когда пользователь регистрируется, завершите процесс авторизации для поставщика аутентификации пользователя, включая вызов одного из методов FIRAuth.signInWith . Например, получите токен Google ID пользователя, токен доступа Facebook или адрес электронной почты и пароль.
  2. Получите учетные данные FIRAuthCredential для нового поставщика аутентификации:

    Вход через Google
    Быстрый
    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];
    Вход через Facebook
    Быстрый
    let credential = FacebookAuthProvider
      .credential(withAccessToken: AccessToken.current!.tokenString)
    Objective-C
    FIRAuthCredential *credential = [FIRFacebookAuthProvider
        credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString];
    Вход по электронной почте и паролю
    Быстрый
    let credential = EmailAuthProvider.credential(withEmail: email, password: password)
    Objective-C
    FIRAuthCredential *credential =
        [FIREmailAuthProvider credentialWithEmail:email
                                                 password:password];
  3. Передайте объект FIRAuthCredential методу linkWithCredential:completion: пользователя, выполнившего вход в систему:

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

Если вызов функции linkWithCredential:completion: завершится успешно, новая учетная запись пользователя сможет получить доступ к данным анонимной учетной записи в Firebase.

Автоматическая очистка

Если вы обновили свой проект до Firebase Authentication with Identity Platform , вы можете включить автоматическую очистку в консоли Firebase . Включение этой функции позволяет Firebase автоматически удалять анонимные учетные записи старше 30 дней. В проектах с включенной автоматической очисткой анонимная аутентификация не будет учитываться в лимитах использования или платежных квотах.

  • Любые анонимные учетные записи, созданные после включения автоматической очистки, могут быть автоматически удалены в любое время по истечении 30 дней с момента создания.
  • Существующие анонимные учетные записи будут автоматически удалены через 30 дней после включения автоматической очистки.
  • Если отключить автоматическую очистку, все анонимные учетные записи, запланированные к удалению, останутся запланированными к удалению.
  • Если вы "обновите" анонимный аккаунт, связав его с любым способом входа в систему, аккаунт не будет удален автоматически.

Если вы хотите узнать, сколько пользователей будет затронуто до включения этой функции, и вы обновили свой проект до Firebase Authentication with Identity Platform , вы можете отфильтровать данные по параметру is_anon в Cloud Logging .

Следующие шаги

Теперь, когда пользователи могут проходить аутентификацию в Firebase, вы можете контролировать их доступ к данным в вашей базе данных Firebase с помощью правил Firebase .