Intégrer Google Sign-In à votre application iOS ou macOS

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 de votre application ou au modèle d'interface utilisateur.

Avant de commencer

Téléchargez les dépendances, configurez votre projet Xcode et définissez votre ID client.

Essayez notre application exemple iOS et macOS pour découvrir comment fonctionne la connexion.

1. Gérer l'URL de redirection pour l'authentification

iOS: UIApplicationDelegate

Dans la méthode application:openURL:options de votre AppMetadata, 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: NSApplicationMetadata

  1. Dans l'AppDelegate de votre application, enregistrez un gestionnaire pour les événements kAEGetURL dans applicationDidFinishLaunching:

    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];
    }
    
  2. Définissez le gestionnaire pour ces événements qui appelle la méthode handleURL de GIDSignIn:

    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 la méthode GIDSignIn handleURL:

Swift

@main
struct MyApp: App {

  var body: some Scene {
    WindowGroup {
      ContentView()
        // ...
        .onOpenURL { url in
          GIDSignIn.sharedInstance.handle(url)
        }
    }
  }
}

2. Essayer de restaurer l'état de connexion de l'utilisateur

Lorsque votre application démarre, appelez restorePreviousSignInWithCallback pour essayer de restaurer l'état de connexion des utilisateurs qui se sont déjà connectés avec Google. Ainsi, les utilisateurs n'ont pas besoin de se connecter à chaque fois qu'ils ouvrent votre application (sauf s'ils se sont déconnectés).

Les applications iOS effectuent souvent cette opération dans la méthode application:didFinishLaunchingWithOptions: de UIApplicationDelegate et le applicationDidFinishLaunching: de 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

Ajoutez un bouton "Se connecter avec Google" à la vue de connexion. Des composants sont disponibles pour SwiftUI et UIKit. Ils génèrent automatiquement un bouton avec la marque Google et sont recommandés.

Utiliser SwiftUI

  1. Assurez-vous d'avoir ajouté la dépendance du bouton SwiftUI "Se connecter avec Google" à votre projet.

  2. Dans le fichier dans lequel vous souhaitez ajouter le bouton SwiftUI, ajoutez l'importation requise en haut du fichier:

    import GoogleSignInSwift
    
  3. Ajoutez un bouton "Se connecter avec Google" à votre vue et spécifiez l'action à appeler lorsque vous appuyez dessus:

    GoogleSignInButton(action: handleSignInButton)
    
  4. Déclenchez le processus de connexion lorsque l'utilisateur appuie sur le bouton en ajoutant un appel à la méthode signIn(presentingViewController:completion:) de GIDSignIn 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.
        }
      )
    }
    

Ce modèle utilise le ViewModel 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 comme 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

  1. Ajoutez un bouton "Se connecter avec Google" à la vue de connexion. Vous pouvez utiliser la classe GIDSignInButton pour générer automatiquement un bouton avec la marque Google (recommandé) ou pour 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 sur GIDSignInButton. Notez que lorsque vous ajoutez une vue GIDSignInButton à votre storyboard, le bouton de connexion ne s'affiche pas dans l'outil de création d'interface. Exécutez l'application pour afficher le bouton de connexion.

    Vous pouvez personnaliser l'apparence d'une GIDSignInButton en définissant ses propriétés colorScheme et style:

    Propriétés de style GIDSignInButton
    colorScheme kGIDSignInButtonColorSchemeLight
    kGIDSignInButtonColorSchemeDark
    style kGIDSignInButtonStyleStandard
    kGIDSignInButtonStyleWide
    kGIDSignInButtonStyleIconOnly
  2. Connectez le bouton à une méthode de votre ViewController qui appelle signIn:. Par exemple, utilisez un IBAction:

    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

  1. Ajoutez à votre application un bouton de déconnexion que les utilisateurs connectés pourront voir.

  2. Connectez le bouton à une méthode de votre ViewController qui appelle signOut:. Par exemple, utilisez un IBAction:

    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: