En esta página, se muestra cómo integrar el Acceso con Google en una app para iOS o macOS. Es posible que debas adaptar estas instrucciones al ciclo de vida de tu app o al modelo de IU.
Antes de comenzar
Descarga las dependencias, configura tu proyecto de Xcode y establece tu ID de cliente.
Prueba nuestra app de ejemplo de iOS y macOS para ver cómo funciona el Acceso.
1. Controla la URL de redireccionamiento de autenticación
iOS: UIApplicationDelegate
En el método application:openURL:options
de AppDelegate, llama al 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
En el AppDelegate de tu app, registra un controlador para los eventos
kAEGetURL
enapplicationDidFinishLaunching
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]; }
Define el controlador para estos eventos que llama al
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
En la ventana o escena de tu app, registra un controlador para recibir la URL y llamar
handleURL
de GIDSignIn
:
Swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onOpenURL { url in
GIDSignIn.sharedInstance.handle(url)
}
}
}
}
2. Intentar restablecer el estado de acceso del usuario
Cuando se inicie tu app, llama a restorePreviousSignInWithCallback
para probar lo siguiente:
restablecer el estado de acceso de los usuarios que ya accedieron con Google. Hacerlo
garantiza que los usuarios no deban acceder cada vez que abran tu app (a menos que
salió de la cuenta).
Las apps para iOS suelen hacer esto en la carpeta UIApplicationDelegate
método application:didFinishLaunchingWithOptions:
y
applicationDidFinishLaunching:
de NSApplicationDelegate
para apps de macOS. Usa
el resultado para determinar qué vista presentar al usuario. Por ejemplo:
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
Si usas SwiftUI, agrega una llamada a restorePreviousSignIn
en onAppear
para
tu vista 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. Agrega un botón de Acceso con Google
Agrega un permiso de "Acceder con Google" a la Vista de acceso. Hay componentes disponibles para SwiftUI y UIKit que generan automáticamente un con la marca de Google y se recomienda su uso.
Con SwiftUI
Asegúrate de haber agregado la dependencia de "Acceder con Google" de SwiftUI botón a tu proyecto.
En el archivo en el que quieres agregar el botón de SwiftUI, agrega la importación requerida en la parte superior del archivo:
import GoogleSignInSwift
Agrega un permiso de "Acceder con Google" a tu vista y especifica la acción a la que se llamará cuando se presione el botón:
GoogleSignInButton(action: handleSignInButton)
Activar el proceso de acceso cuando se presiona el botón agregando una llamada a De
GIDSignIn
MétodosignIn(presentingViewController:completion:)
en tu acción: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. } ) }
Utiliza el modelo de vista predeterminado que proporciona información de estilo estándar para
el botón. Para controlar la apariencia del botón, debes crear una app
GoogleSignInButtonViewModel
y establécelo como viewModel
en el
inicializador con GoogleSignInButton(viewModel: yourViewModel, action:
yourAction)
. Consulta
el código fuente de GoogleSignInButtonViewModel
para obtener más información.
Usa UIKit
Agrega un permiso de "Acceder con Google" a la Vista de acceso. Puedes usar la Clase
GIDSignInButton
para generar un botón automáticamente con Google desarrollo de la marca (recomendado) o crea tu propio botón con un estilo personalizado.Para agregar una
GIDSignInButton
a un guión gráfico o a un archivo XIB, agrega una vista y un conjunto su clase personalizada comoGIDSignInButton
. Ten en cuenta que cuando agregas unGIDSignInButton
Vista de tu guion gráfico; no se renderiza el botón de acceso en el compilador de interfaces. Ejecuta la app para ver el botón de acceso.Puedes personalizar el aspecto de un
GIDSignInButton
estableciendo su PropiedadescolorScheme
ystyle
:Propiedades de estilo GIDSignInButton colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
Conecta el botón a un método en tu ViewController que llame a
signIn:
Por ejemplo, usa unIBAction
: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. Agrega un botón para salir
Agrega un botón para salir a tu app, que sea visible para los usuarios que accedieron.
Conecta el botón a un método en tu ViewController que llame a
signOut:
Por ejemplo, usa unIBAction
:Swift
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }
Objective-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
Próximos pasos
Ahora que los usuarios pueden acceder a tu app con sus Cuentas de Google, obtén información sobre cómo a:
- Obtén datos de los usuarios Información del perfil de la Cuenta de Google
- Autentica con tu backend mediante el ID de Google del usuario token.
- Llamar a las APIs de Google en nombre del usuario