Auf dieser Seite erfahren Sie, wie Sie Google Log-in in eine iOS- oder macOS-App einbinden. Möglicherweise müssen Sie diese Anleitung an den Lebenszyklus oder das UI-Modell Ihrer App anpassen.
Hinweis
1. Weiterleitungs-URL für die Authentifizierung verarbeiten
iOS: UIApplicationDelegate
Rufen Sie in der AppDelegate-Methode application:openURL:options
die handleURL:
-Methode von GIDSignIn
auf:
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
Registrieren Sie in AppDelegate Ihrer App einen Handler für
kAEGetURL
-Ereignisse 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]; }
Definieren Sie den Handler für diese Ereignisse, die
handleURL
vonGIDSignIn
aufrufen: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
Registrieren Sie im Fenster oder in der Szene Ihrer App einen Handler, um die URL zu empfangen und GIDSignIn
s handleURL
aufzurufen:
Swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onOpenURL { url in
GIDSignIn.sharedInstance.handle(url)
}
}
}
}
2. Versuchen, den Anmeldestatus des Nutzers wiederherzustellen
Wenn Ihre Anwendung gestartet wird, rufen Sie restorePreviousSignInWithCallback
auf, um zu versuchen, den Anmeldestatus von Nutzern wiederherzustellen, die sich bereits mit Google angemeldet haben. Dadurch ist sichergestellt, dass sich Nutzer nicht jedes Mal anmelden müssen, wenn sie deine App öffnen (es sei denn, sie haben sich abgemeldet).
Bei iOS-Apps wird dies häufig mit der Methode application:didFinishLaunchingWithOptions:
von UIApplicationDelegate
und der Methode applicationDidFinishLaunching:
von NSApplicationDelegate
für macOS-Apps ausgeführt. Verwenden Sie das Ergebnis, um zu bestimmen, welche Ansicht dem Nutzer präsentiert werden soll. Beispiel:
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
Wenn Sie SwiftUI verwenden, fügen Sie in onAppear
einen Aufruf von restorePreviousSignIn
für die erste Ansicht hinzu:
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. Google Log-in-Schaltfläche hinzufügen
Fügen Sie Ihrer Log-in-Datenansicht die Schaltfläche „Über Google anmelden“ hinzu. Für SwiftUI und UIKit sind Komponenten verfügbar, die automatisch eine Schaltfläche mit Google-Branding generieren und zur Verwendung empfohlen werden.
SwiftUI verwenden
Prüfen Sie, ob Sie Ihrem Projekt die Abhängigkeit für die SwiftUI-Schaltfläche „Über Google anmelden“ hinzugefügt haben.
Fügen Sie in der Datei, in der Sie die SwiftUI-Schaltfläche hinzufügen möchten, den erforderlichen Import oben in der Datei ein:
import GoogleSignInSwift
Fügen Sie Ihrer Datenansicht die Schaltfläche „Über Google anmelden“ hinzu und geben Sie die Aktion an, die beim Klicken auf die Schaltfläche ausgelöst wird:
GoogleSignInButton(action: handleSignInButton)
Lösen Sie den Anmeldevorgang aus, wenn die Schaltfläche gedrückt wird. Fügen Sie dazu Ihrer Aktion einen Aufruf der Methode
signIn(presentingViewController:completion:)
vonGIDSignIn
hinzu: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. } ) }
Es wird das Standardansichtsmodell verwendet, das Standardstilinformationen für die Schaltfläche liefert. Wenn Sie die Darstellung der Schaltfläche steuern möchten, müssen Sie eine benutzerdefinierte GoogleSignInButtonViewModel
erstellen und sie mit GoogleSignInButton(viewModel: yourViewModel, action:
yourAction)
im Initialisieren der Schaltfläche als viewModel
festlegen. Weitere Informationen finden Sie im GoogleSignInButtonViewModel
-Quellcode.
UIKit verwenden
Fügen Sie Ihrer Log-in-Datenansicht die Schaltfläche „Über Google anmelden“ hinzu. Mit der Klasse
GIDSignInButton
können Sie automatisch eine Schaltfläche mit Google-Branding (empfohlen) oder Ihre eigene Schaltfläche mit benutzerdefiniertem Stil erstellen.Wenn Sie einem Storyboard oder einer XIB-Datei eine
GIDSignInButton
hinzufügen möchten, fügen Sie eine Ansicht hinzu und legen Sie deren benutzerdefinierte Klasse aufGIDSignInButton
fest. Wenn Sie Ihrem Storyboard eineGIDSignInButton
-Ansicht hinzufügen, wird die Anmeldeschaltfläche im Interface Builder nicht gerendert. Führen Sie die App aus, damit die Anmeldeschaltfläche angezeigt wird.Sie können die Darstellung von
GIDSignInButton
anpassen, indem Sie die EigenschaftencolorScheme
undstyle
festlegen:GIDSignInButton-Stileigenschaften colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
Verbinden Sie die Schaltfläche mit einer Methode in Ihrem ViewController, die
signIn:
aufruft. Verwenden Sie beispielsweiseIBAction
: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. Schaltfläche zum Abmelden hinzufügen
Fügen Sie Ihrer App eine Schaltfläche zum Abmelden hinzu, die für angemeldete Nutzer sichtbar ist.
Verbinden Sie die Schaltfläche mit einer Methode in Ihrem ViewController, die
signOut:
aufruft. Verwenden Sie beispielsweiseIBAction
:Swift
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }
Objective-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
Nächste Schritte
Da sich Nutzer nun mit ihren Google-Konten bei Ihrer Anwendung anmelden können, sollten Sie Folgendes tun:
- Profilinformationen für das Google-Konto der Nutzer abrufen
- Authentifizieren Sie sich bei Ihrem Back-End mithilfe des Google-ID-Tokens des Nutzers.
- Rufen Sie im Namen des Nutzers Google APIs auf.