Auf dieser Seite wird beschrieben, 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
In unserer iOS- und macOS-Beispiel-App können Sie sich ansehen, wie Google Log-in funktioniert.
1. Authentifizierungs-Weiterleitungs-URL verarbeiten
iOS: UIApplicationDelegate
Rufen Sie in der Methode application:openURL:options Ihres AppDelegate die Methode handleURL: 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 der 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, der
handleURLvonGIDSignInaufruft: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 rufen Sie handleURL von GIDSignIn auf:
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
Rufen Sie beim Starten Ihrer App restorePreviousSignInWithCallback auf, um zu versuchen, den Anmeldestatus von Nutzern wiederherzustellen, die sich bereits mit Google angemeldet haben. So müssen sich Nutzer nicht jedes Mal anmelden, wenn sie Ihre App öffnen (es sei denn, sie haben sich abgemeldet).
iOS-Apps tun dies häufig in der Methode application:didFinishLaunchingWithOptions: von UIApplicationDelegate und macOS-Apps in der Methode applicationDidFinishLaunching: von NSApplicationDelegate. 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 Ihre erste Ansicht in onAppear einen Aufruf von restorePreviousSignIn 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 Anmeldeansicht eine 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 deren Verwendung empfohlen wird.
SwiftUI verwenden
Achten Sie darauf, dass Sie Ihrem Projekt die Abhängigkeit für die Schaltfläche „Über Google anmelden“ von SwiftUI hinzugefügt haben.
Fügen Sie in der Datei, in der Sie die SwiftUI-Schaltfläche hinzufügen möchten, oben in der Datei den erforderlichen Import hinzu:
import GoogleSignInSwiftFügen Sie Ihrer Ansicht eine Schaltfläche „Über Google anmelden“ hinzu und geben Sie die Aktion an, die aufgerufen wird, wenn die Schaltfläche gedrückt wird:
GoogleSignInButton(action: handleSignInButton)Lösen Sie den Anmeldevorgang aus, wenn die Schaltfläche gedrückt wird, indem Sie in Ihrer Aktion einen Aufruf der Methode
signIn(presentingViewController:completion:)vonGIDSignInhinzufü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. } ) }
Dabei wird das Standardansichtsmodell verwendet, das Standardstilinformationen für die Schaltfläche enthält. Wenn Sie die Darstellung der Schaltfläche steuern möchten, müssen Sie ein benutzerdefiniertes
GoogleSignInButtonViewModel erstellen und es als viewModel im
Initialisierer der Schaltfläche mit GoogleSignInButton(viewModel: yourViewModel, action:
yourAction) festlegen. Weitere Informationen finden Sie im
GoogleSignInButtonViewModel Quellcode.
UIKit verwenden
Fügen Sie Ihrer Anmeldeansicht eine Schaltfläche „Über Google anmelden“ hinzu. Sie können die Klasse
GIDSignInButtonverwenden, um automatisch eine Schaltfläche mit Google-Branding zu generieren (empfohlen), oder eine eigene Schaltfläche mit benutzerdefiniertem Stil erstellen.Wenn Sie einem Storyboard oder einer XIB-Datei eine
GIDSignInButton-Ansicht hinzufügen möchten, fügen Sie eine Ansicht hinzu und legen Sie die benutzerdefinierte Klasse aufGIDSignInButtonfest. Beachten Sie, dass beim Hinzufügen einerGIDSignInButton-Ansicht zu Ihrem Storyboard die Anmeldeschaltfläche nicht im Interface Builder gerendert wird. Führen Sie die App aus, um die Anmeldeschaltfläche zu sehen.Sie können die Darstellung einer
GIDSignInButton-Schaltfläche anpassen, indem Sie die AttributecolorSchemeundstylefestlegen:Stileigenschaften von GIDSignInButton colorSchemekGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDarkstylekGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnlyVerknüpfen Sie die Schaltfläche mit einer Methode in Ihrem ViewController, die
signIn:aufruft. Verwenden Sie beispielsweise einIBAction: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.
Verknüpfen Sie die Schaltfläche mit einer Methode in Ihrem ViewController, die
signOut:aufruft. Verwenden Sie beispielsweise einIBAction:Swift
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }Objective-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
Nächste Schritte
Nachdem sich Nutzer jetzt mit ihren Google-Konten in Ihrer App anmelden können, erfahren Sie hier, wie Sie Folgendes tun:
- Profilinformationen von Google-Konten von Nutzern abrufen.
- Mit Ihrem Back-End mit dem Google-ID Token des Nutzers authentifizieren
- Google APIs im Namen des Nutzers aufrufen.