Cette page vous explique comment intégrer Google Sign-In à une application iOS ou macOS. Vous devrez peut-être adapter ces instructions au cycle de vie ou au modèle de l'interface utilisateur de votre application.
Avant de commencer
Téléchargez les dépendances, configurez votre projet Xcode et définissez votre ID client.
1. Gérer l'URL de redirection pour l'authentification
iOS: UIApplicationDelegate
Dans la méthode application:openURL:options
de votre délégué AppDelegate, appelez la méthode handleURL:
de GIDSignIn
:
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
Dans AppDelegate, votre application enregistre un gestionnaire pour les événements
kAEGetURL
dansapplicationDidFinishLaunching
: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]; }
Définissez le gestionnaire pour ces événements qui appelle
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
Dans la fenêtre ou la scène de votre application, enregistrez un gestionnaire pour recevoir l'URL et appelez GIDSignIn
handleURL
:
Swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onOpenURL { url in
GIDSignIn.sharedInstance.handle(url)
}
}
}
}
2. Tentative de restauration de l'état de connexion de l'utilisateur
Lorsque l'application démarre, appelez restorePreviousSignInWithCallback
pour essayer de restaurer l'état de connexion des utilisateurs déjà connectés à l'aide de Google. Ainsi, les utilisateurs n'ont pas besoin de se connecter à chaque fois qu'ils ouvrent votre application (sauf s'ils se déconnectent).
Les applications iOS effectuent souvent cette opération à l'aide de la méthode application:didFinishLaunchingWithOptions:
de UIApplicationDelegate
et de applicationDidFinishLaunching:
pour NSApplicationDelegate
pour les applications macOS. Utilisez le résultat pour déterminer la vue à présenter à l'utilisateur. Exemple :
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 vous utilisez SwiftUI, ajoutez un appel à restorePreviousSignIn
dans onAppear
pour votre vue initiale:
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. Ajouter un bouton Google Sign-In
Ajouter un bouton "Se connecter avec Google" à la vue de connexion Nous vous recommandons d'utiliser des composants SwiftUI et UIKit qui génèrent automatiquement un bouton avec la marque Google.
Utiliser SwiftUI
Assurez-vous d'avoir ajouté la dépendance du bouton "Se connecter avec Google" SwiftUI à votre projet.
Dans le fichier où vous souhaitez ajouter le bouton SwiftUI, ajoutez l'importation requise en haut du fichier:
import GoogleSignInSwift
Ajoutez un bouton "Se connecter avec Google" à votre vue et spécifiez l'action à appeler en cas de clic sur le bouton:
GoogleSignInButton(action: handleSignInButton)
Déclenchez le processus de connexion lorsque vous cliquez sur le bouton en ajoutant un appel à la méthode
signIn(presentingViewController:completion:)
deGIDSignIn
dans votre action: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. } ) }
Il utilise le modèle de vue par défaut qui fournit des informations de style standards pour le bouton. Pour contrôler l'apparence du bouton, vous devez créer un GoogleSignInButtonViewModel
personnalisé et le définir en tant que viewModel
dans l'initialiseur du bouton à l'aide de GoogleSignInButton(viewModel: yourViewModel, action:
yourAction)
. Pour en savoir plus, consultez le code source de GoogleSignInButtonViewModel
.
Utiliser UIKit
Ajouter un bouton "Se connecter avec Google" à la vue de connexion Vous pouvez utiliser la classe
GIDSignInButton
pour générer automatiquement un bouton avec le branding Google (recommandé) ou créer votre propre bouton avec un style personnalisé.Pour ajouter un
GIDSignInButton
à un storyboard ou un fichier XIB, ajoutez une vue et définissez sa classe personnalisée surGIDSignInButton
. Notez que lorsque vous ajoutez une vueGIDSignInButton
à votre story-board, le bouton de connexion ne s'affiche pas dans le générateur d'interface. Exécutez l'application pour voir le bouton de connexion.Vous pouvez personnaliser l'apparence d'un objet
GIDSignInButton
en définissant ses propriétéscolorScheme
etstyle
:Propriétés du style GIDSignInButton colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
Connectez le bouton à une méthode de votre ViewController qui appelle
signIn:
. Par exemple, utilisez 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. Ajouter un bouton de déconnexion
Ajoutez un bouton de déconnexion à votre appli, visible par les utilisateurs connectés.
Connectez le bouton à une méthode de votre ViewController qui appelle
signOut:
. Par exemple, utilisez unIBAction
:Swift
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }
Objective-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
Étapes suivantes
Maintenant que les utilisateurs peuvent se connecter à votre application avec leur compte Google, découvrez comment:
- Obtenir les informations de profil du compte Google des utilisateurs
- Authentifiez-vous auprès de votre backend à l'aide du jeton d'ID Google de l'utilisateur.
- Appelez des API Google au nom de l'utilisateur.