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 d'UI de votre application.
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 Sign-In.
1. Gérer l'URL de redirection de l'authentification
iOS: UIApplicationDelegate
Dans la méthode application:openURL:options de votre AppDelegate, appelez la fonction GIDSignIn
Méthode 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
Dans le composant AppDelegate de votre application, enregistrez un gestionnaire pour les événements
kAEGetURLdansapplicationDidFinishLaunching: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 le
handleURLdeGIDSignIn: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 appeler
handleURL de GIDSignIn:
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
Au démarrage de votre application, appelez restorePreviousSignInWithCallback pour essayer
restaurer l'état de connexion des utilisateurs qui se sont déjà connectés à l'aide de Google ; Procéder à cette opération
garantit que les utilisateurs n'ont pas à se connecter à chaque fois qu'ils ouvrent votre application (sauf
s'il s'est déconnecté).
Les applications iOS le font souvent dans les applications UIApplicationDelegate
la méthode application:didFinishLaunchingWithOptions: et
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
Ajouter un lien "Se connecter avec Google" à votre vue de connexion. Des composants pour SwiftUI et UIKit génèrent automatiquement un avec la marque Google et leur utilisation est recommandée.
Utiliser SwiftUI
Assurez-vous d'avoir ajouté la dépendance pour la fonctionnalité Se connecter avec Google de SwiftUI. bouton à votre projet.
Dans le fichier où vous souhaitez ajouter le bouton SwiftUI, ajoutez l'importation requise en haut du fichier:
import GoogleSignInSwiftAjouter un lien "Se connecter avec Google" à votre vue et spécifiez l'action qui sera appelé lorsque l'utilisateur appuiera sur le bouton:
GoogleSignInButton(action: handleSignInButton)Déclenchez le processus de connexion lorsque l'utilisateur appuie sur le bouton en ajoutant un appel à pour
GIDSignInMéthodesignIn(presentingViewController:completion:)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. } ) }
Cela 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 et définissez-le comme viewModel dans le fichier
initialiseur à l'aide de GoogleSignInButton(viewModel: yourViewModel, action:
yourAction). Voir
Le code source GoogleSignInButtonViewModel
pour en savoir plus.
Utiliser UIKit
Ajouter un lien "Se connecter avec Google" à votre vue de connexion. Vous pouvez utiliser
GIDSignInButtonpour générer automatiquement un bouton avec Google (recommandé) ou créez votre propre bouton avec un style personnalisé.Pour ajouter une
GIDSignInButtonà un storyboard ou à un fichier XIB, ajoutez une vue et définissez sa classe personnalisée enGIDSignInButton. Notez que lorsque vous ajoutez unGIDSignInButtonafficher votre storyboard (le bouton de connexion ne s'affiche pas) ; dans le générateur d'interfaces. Exécutez l'application pour afficher le bouton de connexion.Vous pouvez personnaliser l'apparence d'une
GIDSignInButtonen définissant ses PropriétéscolorSchemeetstyle:Propriétés de style GIDSignInButton colorSchemekGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDarkstylekGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnlyConnecter le bouton à une méthode de 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 à votre application un bouton de déconnexion, visible par les utilisateurs connectés.
Connecter le bouton à une méthode de 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 à l'aide de leur compte Google, découvrez comment par:
- Obtenir l'analyse informations de profil du compte Google.
- Authentifiez-vous auprès de votre backend à l'aide de l'ID Google de l'utilisateur. à partir d'un jeton d'accès.
- Appelez les API Google au nom de l'utilisateur.