Esta página mostra como integrar o Login do Google a um app iOS ou macOS. Talvez seja necessário adaptar essas instruções para o ciclo de vida ou modelo de interface do seu app.
Antes de começar
Faça o download das dependências, configure o projeto Xcode e defina seu ID do cliente.
Teste nosso app de exemplo para iOS e macOS para ver como o login funciona.
1. Processar o URL de redirecionamento de autenticação
iOS: UIApplicationDelegate
No método application:openURL:options
do AppDelegate, chame o método GIDSignIn
.
Método handleURL:
:
Swift
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
}
Objective-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
No AppDelegate do seu app, registre um gerenciador para eventos
kAEGetURL
emapplicationDidFinishLaunching
:Swift
func applicationDidFinishLaunching(_ notification: Notification) { // Register for GetURL events. let appleEventManager = NSAppleEventManager.shared() appleEventManager.setEventHandler( self, andSelector: "handleGetURLEvent:replyEvent:", forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL) ) }
Objective-C
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Register for GetURL events. NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager]; [appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; }
Defina o gerenciador para esses eventos que chama o
handleURL
deGIDSignIn
:Swift
func handleGetURLEvent(event: NSAppleEventDescriptor?, replyEvent: NSAppleEventDescriptor?) { if let urlString = event?.paramDescriptor(forKeyword: AEKeyword(keyDirectObject))?.stringValue{ let url = NSURL(string: urlString) GIDSignIn.sharedInstance.handle(url) } }
Objective-C
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent { NSString *URLString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; NSURL *URL = [NSURL URLWithString:URLString]; [GIDSignIn.sharedInstance handleURL:url]; }
SwiftUI
Na janela ou cena do seu app, registre um gerenciador para receber o URL e chamar
handleURL
de GIDSignIn
:
Swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onOpenURL { url in
GIDSignIn.sharedInstance.handle(url)
}
}
}
}
2. Tentar restaurar o estado de login do usuário
Quando o app for iniciado, chame restorePreviousSignInWithCallback
para tentar
restaurar o estado de login dos usuários que já fizeram login usando o Google. Ao fazer isso
garante que os usuários não tenham que fazer login sempre que abrirem o aplicativo (a menos que
após o logout).
Os aplicativos iOS costumam fazer isso em UIApplicationDelegate
método application:didFinishLaunchingWithOptions:
e
applicationDidFinishLaunching:
de NSApplicationDelegate
para apps macOS. Usar
o resultado para determinar qual visualização apresentar ao usuário. Exemplo:
Swift
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
}
Objective-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
Se você estiver usando SwiftUI, adicione uma chamada para restorePreviousSignIn
em onAppear
para
sua visualização inicial:
Swift
@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. Adicionar um botão de Login do Google
Adicionar uma conta de "Fazer login com o Google" à visualização de login. Há componentes disponíveis para SwiftUI e UIKit que geram automaticamente uma com a marca do Google e são recomendados para uso.
Como usar o SwiftUI
Verifique se você adicionou a dependência da opção "Fazer login com o Google" no SwiftUI botão ao seu projeto.
No arquivo em que você quer adicionar o botão do SwiftUI, adicione a importação necessária à parte superior do arquivo:
import GoogleSignInSwift
Adicionar uma conta de "Fazer login com o Google" à sua visualização e especificar a ação que será chamado quando o botão for pressionado:
GoogleSignInButton(action: handleSignInButton)
Acione o processo de login quando o botão for pressionado adicionando uma chamada a
GIDSignIn
MétodosignIn(presentingViewController:completion:)
em sua ação: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. } ) }
Ele usa o modelo de visualização padrão que fornece informações de estilo padrão para
o botão. Para controlar a aparência do botão, é necessário criar um personalizado
GoogleSignInButtonViewModel
e a defina como viewModel
na classe
usando GoogleSignInButton(viewModel: yourViewModel, action:
yourAction)
. Consulte
o código-fonte GoogleSignInButtonViewModel
para mais informações.
Como usar o UIKit
Adicionar uma conta de "Fazer login com o Google" à visualização de login. Você pode usar o Classe
GIDSignInButton
para gerar automaticamente um botão com o Google branding (recomendado) ou crie seu próprio botão com estilização personalizada.Para adicionar um
GIDSignInButton
a um storyboard ou arquivo XIB, adicione uma visualização e definição a classe personalizada dela paraGIDSignInButton
. Quando você adicionaGIDSignInButton
Acesse seu storyboard, o botão de login não é renderizado. no criador de interfaces. Execute o app para conferir o botão de login.Você pode personalizar a aparência de uma
GIDSignInButton
definindo o PropriedadescolorScheme
estyle
:Propriedades de estilo do GIDSignInButton colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
Conecte o botão a um método em seu ViewController que chame
signIn:
: Por exemplo, use umIBAction
:Swift
@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. } }
Objective-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. Adicionar um botão para sair
Adicione um botão de logout ao app, visível para os usuários conectados.
Conecte o botão a um método em seu ViewController que chame
signOut:
: Por exemplo, use umIBAction
:Swift
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }
Objective-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
Próximas etapas
Agora que os usuários podem fazer login no app usando as Contas do Google deles, saiba como para:
- Atraia Informações do perfil da Conta do Google.
- Autenticar com seu back-end usando o ID do Google do usuário com base no token correto anterior.
- Chame as APIs do Google em nome do usuário.