На этой странице показано, как интегрировать вход в Google в приложение iOS или macOS. Возможно, вам придется адаптировать эти инструкции к жизненному циклу вашего приложения или модели пользовательского интерфейса.
Прежде чем начать
Загрузите зависимости, настройте проект Xcode и установите идентификатор клиента .
Попробуйте наш пример приложения для iOS и macOS, чтобы увидеть, как работает вход в систему .
1. Обработка URL-адреса перенаправления аутентификации.
iOS: UIApplicationDelegate
В application:openURL:options
вашего AppDelegate вызовите метод handleURL:
GIDSignIn
:
Быстрый
func application(
_ app: UIApplication,
open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
var handled: Bool
handled = GIDSignIn.sharedInstance.handle(url)
if handled {
return true
}
// Handle other custom URL types.
// If not handled by this app, return false.
return false
}
Цель-C
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
BOOL handled;
handled = [GIDSignIn.sharedInstance handleURL:url];
if (handled) {
return YES;
}
// Handle other custom URL types.
// If not handled by this app, return NO.
return NO;
}
macOS: NSApplicationDelegate
В AppDelegate вашего приложения зарегистрируйте обработчик событий
kAEGetURL
вapplicationDidFinishLaunching
:Быстрый
func applicationDidFinishLaunching(_ notification: Notification) { // Register for GetURL events. let appleEventManager = NSAppleEventManager.shared() appleEventManager.setEventHandler( self, andSelector: "handleGetURLEvent:replyEvent:", forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL) ) }
Цель-C
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Register for GetURL events. NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager]; [appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; }
Определите обработчик для этих событий, который вызывает
handleURL
GIDSignIn
:Быстрый
func handleGetURLEvent(event: NSAppleEventDescriptor?, replyEvent: NSAppleEventDescriptor?) { if let urlString = event?.paramDescriptor(forKeyword: AEKeyword(keyDirectObject))?.stringValue{ let url = NSURL(string: urlString) GIDSignIn.sharedInstance.handle(url) } }
Цель-C
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent { NSString *URLString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; NSURL *URL = [NSURL URLWithString:URLString]; [GIDSignIn.sharedInstance handleURL:url]; }
SwiftUI
В окне или сцене вашего приложения зарегистрируйте обработчик для получения URL-адреса и вызовите handleURL
GIDSignIn
:
Быстрый
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onOpenURL { url in
GIDSignIn.sharedInstance.handle(url)
}
}
}
}
2. Попытайтесь восстановить состояние входа пользователя.
Когда ваше приложение запустится, вызовите restorePreviousSignInWithCallback
чтобы попытаться восстановить состояние входа пользователей, которые уже вошли в систему с помощью Google. Это гарантирует, что пользователям не придется входить в систему каждый раз, когда они открывают ваше приложение (если они не вышли из системы).
Приложения iOS часто делают это в методе UIApplicationDelegate
application:didFinishLaunchingWithOptions:
и в методе NSApplicationDelegate
: applicationDidFinishLaunching:
для приложений macOS. Используйте результат, чтобы определить, какое представление представить пользователю. Например:
Быстрый
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GIDSignIn.sharedInstance.restorePreviousSignIn { user, error in
if error != nil || user == nil {
// Show the app's signed-out state.
} else {
// Show the app's signed-in state.
}
}
return true
}
Цель-C
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GIDSignIn.sharedInstance restorePreviousSignInWithCompletion:^(GIDGoogleUser * _Nullable user,
NSError * _Nullable error) {
if (error) {
// Show the app's signed-out state.
} else {
// Show the app's signed-in state.
}
}];
return YES;
}
SwiftUI
Если вы используете SwiftUI, добавьте вызов restorePreviousSignIn
в onAppear
для исходного представления:
Быстрый
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onAppear {
GIDSignIn.sharedInstance.restorePreviousSignIn { user, error in
// Check if `user` exists; otherwise, do something with `error`
}
}
}
}
}
3. Добавьте кнопку входа в Google.
Добавьте кнопку «Войти через Google» в окно входа в систему. Для SwiftUI и UIKit доступны компоненты, которые автоматически генерируют кнопку с брендом Google и рекомендуются к использованию.
Использование SwiftUI
Убедитесь, что вы добавили зависимость для кнопки SwiftUI «Войти через Google» в свой проект.
В файле, в который вы хотите добавить кнопку SwiftUI, добавьте необходимый импорт в начало файла:
import GoogleSignInSwift
Добавьте кнопку «Войти через Google» в свое представление и укажите действие, которое будет вызываться при нажатии кнопки:
GoogleSignInButton(action: handleSignInButton)
Запустите процесс входа в систему при нажатии кнопки, добавив вызов метода
signIn(presentingViewController:completion:)
GIDSignIn
в свое действие:func handleSignInButton() { GIDSignIn.sharedInstance.signIn( withPresenting: rootViewController) { signInResult, error in guard let result = signInResult else { // Inspect error return } // If sign in succeeded, display the app's main content View. } ) }
При этом используется модель представления по умолчанию, которая предоставляет стандартную информацию о стиле для кнопки. Чтобы управлять внешним видом кнопки, вам необходимо создать собственную GoogleSignInButtonViewModel
и установить ее в качестве viewModel
в инициализаторе кнопки с помощью GoogleSignInButton(viewModel: yourViewModel, action: yourAction)
. Дополнительную информацию см. в исходном коде GoogleSignInButtonViewModel
.
Использование UIKit
Добавьте кнопку «Войти через Google» в окно входа в систему. Вы можете использовать класс
GIDSignInButton
для автоматического создания кнопки с фирменным знаком Google (рекомендуется) или создать собственную кнопку с собственным стилем.Чтобы добавить
GIDSignInButton
в раскадровку или файл XIB, добавьте представление и установите для его пользовательского класса значениеGIDSignInButton
. Обратите внимание: когда вы добавляете представлениеGIDSignInButton
в раскадровку, кнопка входа не отображается в конструкторе интерфейса. Запустите приложение, чтобы увидеть кнопку входа.Вы можете настроить внешний вид
GIDSignInButton
, установив его свойстваcolorScheme
иstyle
:Свойства стиля GIDSignInButton colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
Подключите кнопку к методу вашего ViewController, который вызывает
signIn:
. Например, используйтеIBAction
:Быстрый
@IBAction func signIn(sender: Any) { GIDSignIn.sharedInstance.signIn(withPresenting: self) { signInResult, error in guard error == nil else { return } // If sign in succeeded, display the app's main content View. } }
Цель-C
- (IBAction)signIn:(id)sender { [GIDSignIn.sharedInstance signInWithPresentingViewController:self completion:^(GIDSignInResult * _Nullable signInResult, NSError * _Nullable error) { if (error) { return; } // If sign in succeeded, display the app's main content View. }]; }
4. Добавьте кнопку выхода.
Добавьте в свое приложение кнопку выхода, видимую вошедшим в систему пользователям.
Подключите кнопку к методу вашего ViewController, который вызывает
signOut:
. Например, используйтеIBAction
:Быстрый
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }
Цель-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
Следующие шаги
Теперь, когда пользователи могут входить в ваше приложение, используя свои учетные записи Google, узнайте, как:
- Получите информацию о профилях аккаунтов Google пользователей .
- Выполните аутентификацию на своем сервере, используя токен Google ID пользователя.
- Вызов API Google от имени пользователя.