Auf dieser Seite erfahren Sie, wie Sie Google Log-in in eine iOS- oder macOS-App integrieren. Möglicherweise müssen Sie diese Anleitung an den Lebenszyklus oder das UI-Modell Ihrer App anpassen.
Hinweis
1. Die Weiterleitungs-URL für die Authentifizierung verarbeiten
iOS: UIApplicationDelegate
Rufen Sie in der Methode application:openURL:options
von AppDelegate die Methode von GIDSignIn
auf.
Methode 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
Registrieren Sie in der AppDelegate-Datei 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 das
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, der die URL empfängt und
GIDSignIn
handleURL
:
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 die App gestartet wird, rufe restorePreviousSignInWithCallback
auf, um zu versuchen,
Anmeldestatus von Nutzern wiederherstellen, die sich bereits über Google angemeldet haben Vorgehensweise
Nutzer müssen sich nicht jedes Mal anmelden, wenn sie Ihre App öffnen (es sei denn,
sich abgemeldet hat.
iOS-Apps tun das oft in der UIApplicationDelegate
application:didFinishLaunchingWithOptions:
-Methode und
applicationDidFinishLaunching:
von NSApplicationDelegate
für macOS-Apps. Verwenden Sie
um zu bestimmen, welche Ansicht
für den 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 restorePreviousSignIn
in onAppear
für
Ihre erste Ansicht:
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
„Über Google anmelden“ hinzufügen zur Anmeldeansicht hinzu. Es sind Komponenten für SwiftUI und UIKit verfügbar, die automatisch ein mit Google-Branding. Wir empfehlen, diese Schaltfläche zu verwenden.
SwiftUI verwenden
Prüfen Sie, ob Sie die Abhängigkeit für die SwiftUI-Funktion „Über Google anmelden“ festgelegt haben. Schaltfläche zu Ihrem Projekt hinzufügen.
Fügen Sie in der Datei, in die Sie die SwiftUI-Schaltfläche einfügen möchten, den erforderlichen Import am Anfang der Datei ein:
import GoogleSignInSwift
„Über Google anmelden“ hinzufügen zur Ansicht hinzufügen und die Aktion wird aufgerufen, wenn die Schaltfläche gedrückt wird:
GoogleSignInButton(action: handleSignInButton)
Lösen Sie den Anmeldeprozess aus, wenn die Schaltfläche gedrückt wird, indem Sie einen Aufruf von
GIDSignIn
signIn(presentingViewController:completion:)
-Methode in Aktion: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. } ) }
Dabei wird das Standardansichtsmodell verwendet, das standardmäßige Stilinformationen für
auf die Schaltfläche. Um die Darstellung der Schaltfläche zu steuern, müssen Sie eine benutzerdefinierte
GoogleSignInButtonViewModel
und lege es als viewModel
in der
mit GoogleSignInButton(viewModel: yourViewModel, action:
yourAction)
. Weitere Informationen finden Sie unter
GoogleSignInButtonViewModel
-Quellcode
.
UIKit verwenden
„Über Google anmelden“ hinzufügen zur Anmeldeansicht hinzu. Sie können die
GIDSignInButton
-Klasse, um automatisch eine Schaltfläche mit Google zu generieren Branding (empfohlen) oder eigene Schaltfläche mit benutzerdefiniertem Stil erstellen.Um ein
GIDSignInButton
zu einem Storyboard oder einer XIB-Datei hinzuzufügen, fügen Sie seine benutzerdefinierte Klasse aufGIDSignInButton
. Beachten Sie, dass beim Hinzufügen einesGIDSignInButton
Wenn Sie sich Ihr Storyboard ansehen, wird die Anmeldeschaltfläche nicht gerendert. im Interface Builder. Führen Sie die App aus, um die Anmeldeschaltfläche zu sehen.Du kannst das Aussehen eines
GIDSignInButton
anpassen, indem du seinecolorScheme
- undstyle
-Properties:GIDSignInButton-Stileigenschaften colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
Verbinden Sie die Schaltfläche mit einer Methode in Ihrem ViewController, die das Aufrufen von
signIn:
Verwenden Sie beispielsweise einenIBAction
: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 das Aufrufen von
signOut:
Verwenden Sie beispielsweise einenIBAction
:Swift
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }
Objective-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
Nächste Schritte
Nutzer können sich jetzt mit ihren Google-Konten bei Ihrer App anmelden. Hier erfahren Sie, wie in: