Вы можете разрешить пользователям проходить аутентификацию в Firebase с помощью аккаунтов Google, интегрировав в приложение функцию входа с аккаунтом Google.
Запрос к ИИ для получения помощи
Чтобы получить помощь от ИИ, скопируйте запрос ниже в ИИ-агента программирования (например, Antigravity, Claude Code, Codex или Cursor). Вы можете изменить запрос и попросить агента переделать изображение. Подробную информацию об установке можно найти в разделе Навыки агента Firebase.
Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me set up and use Firebase Authentication with Google Sign-In in my app.
Подготовка
Для установки зависимостей 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
Как добавить в проект Google Sign-In SDK
Откройте проект приложения в Xcode и перейдите в меню File (Файл) > Add Packages (Добавить пакеты).
Когда появится запрос, добавьте хранилище SDK для входа с аккаунтом Google:
https://github.com/google/GoogleSignIn-iOSПосле этого Xcode автоматически начнет распознавать и скачивать зависимости в фоновом режиме.
Как включить вход с аккаунтом Google для проекта Firebase
Чтобы пользователи могли входить в систему с помощью аккаунта Google, сначала включите поставщика "Вход с аккаунтом Google" для проекта Firebase:
В консоли Firebase выберите Безопасность > Аутентификация.
На вкладке Sign-in method (Способ входа) включите поставщика Google.
Нажмите Сохранить.
Скачайте новую копию файла
GoogleService-Info.plistпроекта и скопируйте ее в проект Xcode. Перезаписать существующие версии новой. (Подробнее о том, как добавить Firebase в проект для iOS…
Импортируйте необходимые файлы заголовков.
Сначала вам нужно импортировать в приложение заголовочные файлы Firebase SDK и SDK для входа с аккаунтом Google.
Swift
import FirebaseAuth import GoogleSignIn
Objective-C
@import FirebaseCore; @import GoogleSignIn;
Подключить Вход с Google
Чтобы реализовать вход с аккаунтом Google, выполните следующие действия: Подробнее о том, как использовать функцию входа с аккаунтом Google на устройствах iOS, можно узнать из документации для разработчиков.
- Добавьте в проект Xcode специальные схемы URL:
- Откройте конфигурацию проекта: нажмите на название проекта в дереве слева. Выберите приложение в разделе ЦЕЛИ, откройте вкладку Информация и разверните раздел Типы URL.
- Нажмите кнопку + и добавьте схему URL для обратного идентификатора клиента. Чтобы найти это значение, откройте файл конфигурации
и найдите ключGoogleService-Info.plist REVERSED_CLIENT_ID. Скопируйте значение этого ключа и вставьте его в поле Схемы URL на странице конфигурации. Оставьте остальные поля без изменений.После этого конфигурация должна выглядеть примерно так (но с вашими значениями):
- В методе
application:didFinishLaunchingWithOptions:делегата приложения настройте объектFirebaseApp.Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- Реализуйте метод
application:openURL:options:делегата приложения. Метод должен вызывать методhandleURLэкземпляраGIDSignIn, который правильно обработает URL, полученный приложением в конце процесса аутентификации.Swift
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { // ... } return GIDSignIn.sharedInstance.handle(url) }
Objective-C
- (BOOL)application:(nonnull UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<NSString *, id> *)options { return [[GIDSignIn sharedInstance] handleURL:url]; }
- Передайте контроллер представления и идентификатор клиента приложения методу
signInпоставщика для входа с аккаунтом Google и создайте учетные данные Firebase Authentication на основе полученного токена аутентификации Google:Swift
guard let clientID = FirebaseApp.app()?.options.clientID else { return } // Create Google Sign In configuration object. let config = GIDConfiguration(clientID: clientID) GIDSignIn.sharedInstance.configuration = config // Start the sign in flow! GIDSignIn.sharedInstance.signIn(withPresenting: viewController) { result, error in guard error == nil else { // ... return } guard let user = result?.user, let idToken = user.idToken?.tokenString else { // ... return } let credential = GoogleAuthProvider.credential(withIDToken: idToken, accessToken: user.accessToken.tokenString) self.signIn(with: credential) }
Objective-C
GIDConfiguration *config = [[GIDConfiguration alloc] initWithClientID:[FIRApp defaultApp].options.clientID]; [GIDSignIn.sharedInstance setConfiguration:config]; __weak __auto_type weakSelf = self; [GIDSignIn.sharedInstance signInWithPresentingViewController:self completion:^(GIDSignInResult * _Nullable result, NSError * _Nullable error) { __auto_type strongSelf = weakSelf; if (strongSelf == nil) { return; } if (error == nil) { FIRAuthCredential *credential = [FIRGoogleAuthProvider credentialWithIDToken:result.user.idToken.tokenString accessToken:result.user.accessToken.tokenString]; // ... } else { // ... } }];
- Добавьте
GIDSignInButtonв раскадровку, XIB-файл или создайте его программным способом. Чтобы добавить кнопку в раскадровку или XIB-файл, добавьте представление и задайте для него пользовательский классGIDSignInButton. - Необязательно. Если вы хотите настроить кнопку, выполните следующие действия:
Swift
- В контроллере представления объявите кнопку входа как свойство.
@IBOutlet weak var signInButton: GIDSignInButton!
- Свяжите кнопку с ресурсом
signInButton, который вы только что указали. - Настройте кнопку, задав свойства объекта GIDSignInButton.
Objective-C
- В заголовочном файле контроллера представления объявите кнопку входа как свойство.
@property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
- Свяжите кнопку с ресурсом
signInButton, который вы только что указали. - Настройте кнопку, задав свойства объекта GIDSignInButton.
- В контроллере представления объявите кнопку входа как свойство.
Как пройти аутентификацию с помощью Firebase
Наконец, завершите процесс входа в Firebase, используя учетные данные, созданные на предыдущем шаге.
Swift
Auth.auth().signIn(with: credential) { result, error in guard error == nil else { // ... return } // At this point, our user is signed in }
Objective-C
[[FIRAuth auth] signInWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) { FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey]; NSMutableString *displayNameString = [NSMutableString string]; for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) { [displayNameString appendString:tmpFactorInfo.displayName]; [displayNameString appendString:@" "]; } [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString] completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) { FIRPhoneMultiFactorInfo* selectedHint; for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) { if ([displayName isEqualToString:tmpFactorInfo.displayName]) { selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo; } } [FIRPhoneAuthProvider.provider verifyPhoneNumberWithMultiFactorInfo:selectedHint UIDelegate:nil multiFactorSession:resolver.session completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) { if (error) { [self showMessagePrompt:error.localizedDescription]; } else { [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName] completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) { FIRPhoneAuthCredential *credential = [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID verificationCode:verificationCode]; FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { [self showMessagePrompt:error.localizedDescription]; } else { NSLog(@"Multi factor finanlize sign in succeeded."); } }]; }]; } }]; }]; } else if (error) { // ... return; } // User successfully signed in. Get user data from the FIRUser object if (authResult == nil) { return; } FIRUser *user = authResult.user; // ... }];
Дальнейшие действия
После первого входа пользователя создается новый аккаунт, связанный с учетными данными, которые он использовал (именем пользователя и паролем, номером телефона или информацией поставщика услуг аутентификации). Этот новый аккаунт хранится в проекте Firebase и позволяет идентифицировать пользователя во всех приложениях проекта независимо от того, как он вошел в аккаунт.
-
В своих приложениях вы можете получать основную информацию профиля пользователя из объекта
User. Подробнее о том, как управлять пользователями… В Firebase Realtime Database и Cloud Storage правилах безопасности можно получить уникальный идентификатор пользователя, выполнившего вход, из переменной
authи использовать его, чтобы контролировать, к каким данным у пользователя есть доступ.
Вы можете разрешить пользователям входить в ваше приложение, используя несколько поставщиков услуг аутентификации, связав учетные данные поставщика услуг аутентификации с существующим аккаунтом пользователя.
Чтобы выйти из аккаунта пользователя, вызовите функцию
signOut:.
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
Также рекомендуем добавить код обработки ошибок для всех возможных ошибок аутентификации. Подробнее об обработке ошибок…