Integrazione di Accedi con Google nell'app per iOS o macOS

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questa pagina mostra come integrare Accedi con Google in un'app per iOS o macOS. Potresti dover adattare queste istruzioni per il ciclo di vita o il modello dell'interfaccia utente della tua app.

Prima di iniziare

Scarica le dipendenze, configura il progetto Xcode e imposta l'ID client.

1. Gestire l'URL di reindirizzamento autenticazione

iOS: UIApplicationDelegate

Nel metodo application:openURL:options di AppDelegate, chiama il metodo handleURL: di 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: NSApplicationDelegato

  1. Registra un gestore per gli eventi kAEGetURL in AppDelegate nella tua app in 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. Definisci il gestore per questi eventi che richiamano il handleURL di 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];
    }
    

UI Swift

Registra il gestore per ricevere l'URL nella finestra o nella scena dell'app e chiama GIDSignIn handleURL:

Swift

@main
struct MyApp: App {

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

2. Tentativo di ripristinare lo stato di accesso dell'utente

All'avvio dell'app, chiama restorePreviousSignInWithCallback per provare a ripristinare lo stato di accesso degli utenti che hanno già eseguito l'accesso con Google. In questo modo eviterai che gli utenti debbano accedere ogni volta che aprono l'app (a meno che non abbiano eseguito la disconnessione).

Le app per iOS spesso vengono eseguite nel metodo application:didFinishLaunchingWithOptions: di UIApplicationDelegate e da applicationDidFinishLaunching: per le app macOS di NSApplicationDelegate. Utilizza il risultato per determinare quale vista presentare all'utente. Ad esempio:

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;
}

UI Swift

Se utilizzi SwiftUI, aggiungi una chiamata al numero restorePreviousSignIn in onAppear per la visualizzazione iniziale:

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. Aggiungere un pulsante Accedi con Google

Aggiungi un pulsante "Accedi con Google" alla vista di accesso. Sono disponibili componenti per SwiftUI e UIKit, che generano automaticamente un pulsante con il branding di Google e sono consigliati per l'utilizzo.

Utilizzo di SwiftUI

  1. Assicurati di aver aggiunto al progetto il dipendente per il pulsante "Accedi con Google" di SwiftUI.

  2. Nel file in cui vuoi aggiungere il pulsante SwiftUI, aggiungi l'importazione richiesta nella parte superiore del file:

    import GoogleSignInSwift
    
  3. Aggiungi un pulsante "Accedi con Google" alla visualizzazione e specifica l'azione che verrà chiamata quando premi il pulsante:

    GoogleSignInButton(action: handleSignInButton)
    
  4. Attiva la procedura di accesso quando il pulsante viene premuto aggiungendo una chiamata al metodo signIn(presentingViewController:completion:) di GIDSignIn nell'azione:

    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.
        }
      )
    }
    

Viene utilizzato il modello di visualizzazione predefinito che fornisce informazioni sullo stile standard per il pulsante. Per controllare l'aspetto del pulsante, devi creare un GoogleSignInButtonViewModel personalizzato e impostarlo come viewModel nell'inizializzazionere del pulsante utilizzando GoogleSignInButton(viewModel: yourViewModel, action: yourAction). Per scoprire di più, consulta il codice sorgente GoogleSignInButtonViewModel.

Utilizzo di UIKit

  1. Aggiungi un pulsante "Accedi con Google" alla vista di accesso. Puoi utilizzare la classe GIDSignInButton per generare automaticamente un pulsante con il branding di Google (opzione consigliata) oppure creare un pulsante personalizzato con uno stile personalizzato.

    Per aggiungere una classe GIDSignInButton a uno storyboard o a un file XIB, aggiungi una visualizzazione e imposta la relativa classe personalizzata su GIDSignInButton. Tieni presente che quando aggiungi una visualizzazione GIDSignInButton allo storyboard, il pulsante di accesso non viene visualizzato nel generatore di interfaccia. Esegui l'app per visualizzare il pulsante di accesso.

    Puoi personalizzare l'aspetto di un GIDSignInButton impostandone le proprietà colorScheme e style:

    Proprietà degli stili GIDSignInButton
    colorScheme kGIDSignInButtonColorSchemeLight
    kGIDSignInButtonColorSchemeDark
    style kGIDSignInButtonStyleStandard
    kGIDSignInButtonStyleWide
    kGIDSignInButtonStyleIconOnly
  2. Collega il pulsante a un metodo nel tuo ViewController che chiama signIn:. Ad esempio, utilizza una 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. Aggiungi un pulsante di disconnessione

  1. Aggiungi un pulsante di disconnessione all'app, visibile agli utenti che hanno eseguito l'accesso.

  2. Collega il pulsante a un metodo nel tuo ViewController che chiama signOut:. Ad esempio, utilizza una IBAction:

    Swift

    @IBAction func signOut(sender: Any) {
      GIDSignIn.sharedInstance.signOut()
    }
    

    Objective-C

    - (IBAction)signOut:(id)sender {
      [GIDSignIn.sharedInstance signOut];
    }
    

Passaggi successivi

Ora che gli utenti possono accedere all'app con i loro Account Google, scopri come: