Questa pagina mostra come integrare Accedi con Google in un'app per iOS o macOS. Potresti dover adattare queste istruzioni al ciclo di vita o al modello di UI della tua app.
Prima di iniziare
Scarica le dipendenze, configura il progetto Xcode e imposta l'ID client.
Prova la nostra app di esempio per iOS e macOS per vedere come funziona l'accesso.
1. Gestire l'URL di reindirizzamento dell'autenticazione
Dopo che un utente si è autenticato con Google, il flusso di autenticazione reindirizza l'utente alla tua app con un URL contenente la risposta di autenticazione, incluso il token ID dell'utente. Il passaggio di questo URL a GIDSignIn consente all'SDK di analizzare la risposta e restituire le credenziali dell'utente alla tua app.
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: NSApplicationDelegate
In AppDelegate della tua app, registra un gestore per gli eventi
kAEGetURLinapplicationDidFinishLaunching: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]; }Definisci il gestore per questi eventi che chiama
handleURLdiGIDSignIn: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
Nella finestra o nella scena dell'app, registra un gestore per ricevere l'URL e chiama handleURL di GIDSignIn:
Swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onOpenURL { url in
GIDSignIn.sharedInstance.handle(url)
}
}
}
}
2. Tentare 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 utilizzando Google. In questo modo, gli utenti non devono accedere ogni volta che aprono l'app (a meno che non abbiano eseguito la disconnessione).
Le app per iOS spesso eseguono questa operazione nel metodo application:didFinishLaunchingWithOptions: di UIApplicationDelegate e applicationDidFinishLaunching: di NSApplicationDelegate per le app per macOS. Utilizza il risultato per determinare la visualizzazione da mostrare 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;
}
SwiftUI
Se utilizzi SwiftUI, aggiungi una chiamata a 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 visualizzazione di accesso. Sono disponibili componenti per SwiftUI e UIKit che generano automaticamente un pulsante conforme alle linee guida per il branding di Google.
Utilizzo di SwiftUI
Assicurati di aver aggiunto la dipendenza per il pulsante "Accedi con Google" di SwiftUI al tuo progetto.
Nel file in cui vuoi aggiungere il pulsante SwiftUI, aggiungi l'importazione richiesta nella parte superiore del file:
import GoogleSignInSwiftAggiungi un'estensione
UIApplicationper recuperare il controller della visualizzazione principale attiva per la presentazione:extension UIApplication { // Minimal implementation to retrieve the active root view // controller for presentation. Apps presenting sign-in from deeper // within an existing view hierarchy should ensure they select the // appropriate view controller. var rootViewController: UIViewController? { let windowScene = connectedScenes .compactMap { scene in scene as? UIWindowScene } .first { scene in scene.activationState == .foregroundActive } return windowScene?.windows.first(where: { window in window.isKeyWindow })?.rootViewController } }Aggiungi un pulsante "Accedi con Google" alla visualizzazione e specifica l'azione che verrà chiamata quando viene premuto il pulsante:
GoogleSignInButton(action: handleSignInButton)Attiva la procedura di accesso quando viene premuto il pulsante aggiungendo una chiamata al metodo
signIn(withPresenting:completion:)diGIDSignInnell'azione:func handleSignInButton() { guard let rootViewController = UIApplication.shared.rootViewController else { // Handle error return } 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'inizializzatore del pulsante
utilizzando GoogleSignInButton(viewModel: yourViewModel, action:
yourAction). Per ulteriori informazioni, consulta il codice sorgente
.GoogleSignInButtonViewModel
Utilizzo di UIKit
Aggiungi un pulsante "Accedi con Google" alla visualizzazione di accesso. Puoi utilizzare la classe
GIDSignInButtonper generare automaticamente un pulsante con il branding di Google (opzione consigliata) o creare il tuo pulsante con uno stile personalizzato.Per aggiungere un
GIDSignInButtona uno storyboard o a un file XIB, aggiungi una visualizzazione e imposta la relativa classe personalizzata suGIDSignInButton. Tieni presente che quando aggiungi una visualizzazioneGIDSignInButtonallo storyboard, il pulsante di accesso non viene visualizzato in Interface Builder. Esegui l'app per visualizzare il pulsante di accesso.Puoi personalizzare l'aspetto di un
GIDSignInButtonimpostando le proprietàcolorSchemeestyle:Proprietà degli stili di GIDSignInButton colorSchemekGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDarkstylekGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnlyCollega il pulsante a un metodo nel ViewController che chiama
signIn:. Ad esempio, utilizza 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. Aggiungere un pulsante di disconnessione
Aggiungi un pulsante di disconnessione alla tua app, visibile agli utenti che hanno eseguito l'accesso, che chiama il metodo signOut di GIDSignIn.
La chiamata a signOut cancella lo stato di accesso memorizzato in GIDSignIn e rimuove le credenziali dell'utente per la tua app dal portachiavi. La tua app è responsabile dell'aggiornamento del proprio stato e della propria UI. La disconnessione si applica solo alla tua app. Non disconnette l'utente da altre app o servizi e non revoca le autorizzazioni che l'utente ha concesso alla tua app.
Utilizzo di SwiftUI
In SwiftUI, aggiungi un Button che chiama GIDSignIn.sharedInstance.signOut():
Button("Sign Out") {
GIDSignIn.sharedInstance.signOut()
// Calling signOut() may not automatically trigger UI updates.
// Update your app's state as needed.
}
Utilizzo di UIKit
Collega il pulsante a un metodo nel ViewController che chiama signOut:. Ad esempio, utilizza un 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 alla tua app utilizzando i propri Account Google, scopri come:
- Recuperare le informazioni del profilo dell'Account Google degli utenti.
- Eseguire l'autenticazione con il backend utilizzando l'ID Google dell'utente token.
- Chiamare le API di Google per conto dell'utente.