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 il tuo ID client.
Prova la nostra app di esempio per iOS e macOS per vedere come funziona l'accesso.
1. Gestire l'URL di reindirizzamento di autenticazione
iOS: UIApplicationDelega
Nel metodo application:openURL:options
di AppDelegato, chiama GIDSignIn
Metodo 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
Nel campo AppDelegato dell'app, registra un gestore per gli eventi
kAEGetURL
inapplicationDidFinishLaunching
: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
handleURL
diGIDSignIn
: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 chiamare
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
Quando la tua app si avvia, chiama il numero restorePreviousSignInWithCallback
per provare e
ripristinare lo stato di accesso degli utenti che hanno già eseguito l'accesso utilizzando Google. In questo modo
garantisce che gli utenti non debbano eseguire l'accesso ogni volta che aprono la tua app (a meno che
l'utente è uscito).
Le app per iOS spesso lo fanno in UIApplicationDelegate
application:didFinishLaunchingWithOptions:
e
applicationDidFinishLaunching:
di NSApplicationDelegate
per le app macOS. Utilizza le funzionalità di
il risultato per stabilire 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;
}
SwiftUI
Se utilizzi SwiftUI, aggiungi una chiamata a restorePreviousSignIn
in onAppear
per
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. Aggiungi un pulsante Accedi con Google
Aggiungere un'opzione "Accedi con Google" alla vista di accesso. Sono disponibili componenti per SwiftUI e UIKit che generano automaticamente con brand Google e sono consigliati per l'uso.
Utilizzo di SwiftUI
Assicurati di aver aggiunto la dipendenza per "Accedi con Google" di SwiftUI . al tuo progetto.
Nel file in cui vuoi aggiungere il pulsante SwiftUI, aggiungi l'importazione richiesta all'inizio del file:
import GoogleSignInSwift
Aggiungere un'opzione "Accedi con Google" alla vista e specificare l'azione che verrà chiamato quando premi il pulsante:
GoogleSignInButton(action: handleSignInButton)
Attiva la procedura di accesso quando viene premuto il pulsante aggiungendo una chiamata a di
GIDSignIn
MetodosignIn(presentingViewController:completion:)
in la tua 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 sugli stili standard per
il pulsante. Per controllare l'aspetto del pulsante, devi creare una
GoogleSignInButtonViewModel
e impostalo come viewModel
nel
utilizzando GoogleSignInButton(viewModel: yourViewModel, action:
yourAction)
. Consulta
Il codice sorgente di GoogleSignInButtonViewModel
per ulteriori informazioni.
Utilizzo di UIKit
Aggiungere un'opzione "Accedi con Google" alla vista di accesso. Puoi utilizzare lo
GIDSignInButton
corso per generare automaticamente un pulsante con Google branding (opzione consigliata) oppure crea un pulsante personalizzato con stili personalizzati.Per aggiungere
GIDSignInButton
a uno storyboard o a un file XIB, aggiungi una visualizzazione e imposta la sua classe personalizzata aGIDSignInButton
. Tieni presente che quando aggiungiGIDSignInButton
Visualizza lo storyboard, il pulsante di accesso non viene visualizzato nel generatore di interfacce. Esegui l'app per visualizzare il pulsante di accesso.Puoi personalizzare l'aspetto di un
GIDSignInButton
impostandone il ProprietàcolorScheme
estyle
:Proprietà di stile GIDSignInButton colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
Collega il pulsante a un metodo nel tuo 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. Aggiungi un pulsante di disconnessione
Aggiungi alla tua app un pulsante di disconnessione, visibile agli utenti che hanno eseguito l'accesso.
Collega il pulsante a un metodo nel tuo ViewController che chiama
signOut:
. Ad esempio, utilizza unIBAction
: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 con i propri Account Google, scopri come a:
- Attira l'attenzione degli utenti Dati del profilo dell'Account Google.
- Esegui l'autenticazione con il tuo backend utilizzando l'ID Google dell'utente. di accesso.
- Chiamare le API di Google per conto dell'utente.