Auf dieser Seite wird beschrieben, wie du Google Log-in in eine iOS- oder macOS-App einbindest. Möglicherweise musst du diese Anleitung an den Lebenszyklus oder das UI-Modell deiner App anpassen.
Hinweis
Testen Sie unsere Beispiel-App für iOS und macOS, um zu sehen, wie die Anmeldung funktioniert.
1. Weiterleitungs-URL für die Authentifizierung verarbeiten
iOS: UIApplicationDelegate
Rufen Sie in der AppDelegate-Methode die Methode handleURL:
von GIDSignIn
auf:application:openURL:options
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 den Anmeldestatus von Nutzern, die sich bereits mit Google angemeldet haben, wiederherzustellen. Dadurch wird 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 für macOS-Apps häufig die Methode application:didFinishLaunchingWithOptions:
von UIApplicationDelegate
und applicationDidFinishLaunching:
von NSApplicationDelegate
verwendet. 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 für die erste Ansicht restorePreviousSignIn
in onAppear
einen Aufruf 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. Komponenten sind für SwiftUI und UIKit verfügbar, die automatisch eine Schaltfläche mit Google-Branding generieren und zur Verwendung empfohlen werden.
SwiftUI verwenden
Achten Sie darauf, dass 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 am Anfang der Datei ein:
import GoogleSignInSwift
Fügen Sie Ihrer Ansicht 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, indem Sie der Aktion
signIn(presentingViewController:completion:)
vonGIDSignIn
einen Aufruf hinzufügen: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 bereitstellt. Um die Darstellung der Schaltfläche zu steuern, musst du ein benutzerdefiniertes GoogleSignInButtonViewModel
erstellen und es im Initialisierer der Schaltfläche mit GoogleSignInButton(viewModel: yourViewModel, action:
yourAction)
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) generieren oder eine 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. Abmeldeschaltfläche hinzufügen
Fügen Sie Ihrer App eine Abmeldeschaltfläche 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 jetzt mit ihren Google-Konten bei Ihrer Anwendung anmelden können, erfahren Sie hier, wie Sie:
- Profilinformationen des Google-Kontos Ihrer Nutzer abrufen
- Authentifizierung bei deinem Backend mithilfe des Google-ID-Tokens des Nutzers.
- Rufen Sie im Namen des Nutzers Google APIs auf.