С помощью Firebase Authentication можно создавать и использовать временные анонимные аккаунты для аутентификации в Firebase. Эти временные анонимные аккаунты можно использовать, чтобы разрешить пользователям, которые ещё не зарегистрировались в вашем приложении, работать с данными, защищенными правилами безопасности. Если анонимный пользователь решит зарегистрироваться в вашем приложении, вы можете связать его учетные данные с анонимным аккаунтом, чтобы он мог продолжать работать со своими защищенными данными в будущих сеансах.
Подготовка
-
Для установки зависимостей Firebase и управления ими используйте Swift Package Manager.
- Откройте проект приложения в Xcode и перейдите в меню File (Файл) > Add Packages (Добавить пакеты).
- Когда появится запрос, добавьте хранилище Firebase SDK для платформ Apple:
- Выберите библиотеку Firebase Authentication.
- Добавьте флаг
-ObjCв раздел Other Linker Flags (Другие флаги компоновщика) в настройках сборки целевого объекта. - После этого Xcode автоматически начнет распознавать и скачивать зависимости в фоновом режиме.
https://github.com/firebase/firebase-ios-sdk.git
- Если вы ещё не подключили приложение к проекту Firebase, сделайте это в консоли Firebase.
-
Включите анонимную аутентификацию:
- В консоли Firebase выберите Безопасность > Аутентификация.
- На вкладке Sign-in method (Способ входа) включите поставщика Anonymous (Анонимный).
- Необязательно. Если вы обновили проект до Firebase Authentication with Identity Platform, то можете включить автоматическую очистку. Если вы включите этот параметр, анонимные аккаунты, созданные более 30 дней назад, будут автоматически удалены. В проектах с включенной автоматической очисткой анонимная аутентификация больше не будет учитываться в лимитах на использование или квотах на оплату. Подробнее об автоматической очистке…
Анонимная аутентификация с помощью Firebase
Если пользователь, не выполнивший вход, использует функцию приложения, для которой требуется аутентификация с помощью Firebase, выполните анонимный вход, следуя инструкциям ниже.
- Импортируйте модуль
FirebaseCoreвUIApplicationDelegate, а также любые другие модули Firebase, которые использует делегат приложения. Например, чтобы использовать Cloud Firestore и 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; // ...
- Настройте общий экземпляр
FirebaseAppв методеapplication(_:didFinishLaunchingWithOptions:)делегата приложения: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];
- Если вы используете 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() } } } }
- Вызовите метод
signInAnonymouslyWithCompletion::Swift
Auth.auth().signInAnonymously { authResult, error in // ... }
Objective-C
[[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }];
- Если метод
signInAnonymouslyWithCompletion:завершается без ошибок, вы можете получить данные аккаунта анонимного пользователя из объекта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;
Как преобразовать анонимный аккаунт в постоянный
Когда анонимный пользователь регистрируется в вашем приложении, вы можете разрешить ему продолжить работу с новым аккаунтом. Например, вы можете сделать товары, которые пользователь добавил в корзину до регистрации, доступными в корзине его нового аккаунта. Для этого выполните следующие действия:
- Когда пользователь регистрируется, выполните процедуру входа для поставщика аутентификации пользователя, но не вызывайте методы
FIRAuth.signInWith. Например, получите токен идентификатора Google, токен доступа Facebook или адрес электронной почты и пароль пользователя. Получите
FIRAuthCredentialдля нового поставщика услуг аутентификации:вход с аккаунтом 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];
Вход через Facebook
Swift
let credential = FacebookAuthProvider .credential(withAccessToken: AccessToken.current!.tokenString)
Objective-C
FIRAuthCredential *credential = [FIRFacebookAuthProvider credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString];
Вход с помощью адреса электронной почты и пароля
Swift
let credential = EmailAuthProvider.credential(withEmail: email, password: password)
Objective-C
FIRAuthCredential *credential = [FIREmailAuthProvider credentialWithEmail:email password:password];
Передайте объект
FIRAuthCredentialв методlinkWithCredential:completion:пользователя, выполнившего вход:Swift
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.