Google Log-in in die iOS- oder macOS-App einbinden

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

Laden Sie die Abhängigkeiten herunter, konfigurieren Sie Ihr Xcode-Projekt und legen Sie Ihre Client-ID fest.

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

  1. Registrieren Sie in AppDelegate Ihrer App einen Handler für kAEGetURL-Ereignisse in applicationDidFinishLaunching:

    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];
    }
    
  2. Definieren Sie den Handler für diese Ereignisse, die handleURL von GIDSignIn 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 GIDSignIns 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

  1. Prüfen Sie, ob Sie Ihrem Projekt die Abhängigkeit für die SwiftUI-Schaltfläche „Über Google anmelden“ hinzugefügt haben.

  2. 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
    
  3. 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)
    
  4. 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:) von GIDSignIn 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

  1. 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 auf GIDSignInButton fest. Wenn Sie Ihrem Storyboard eine GIDSignInButton-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 Eigenschaften colorScheme und style festlegen:

    GIDSignInButton-Stileigenschaften
    colorScheme kGIDSignInButtonColorSchemeLight
    kGIDSignInButtonColorSchemeDark
    style kGIDSignInButtonStyleStandard
    kGIDSignInButtonStyleWide
    kGIDSignInButtonStyleIconOnly
  2. Verbinden Sie die Schaltfläche mit einer Methode in Ihrem ViewController, die signIn: aufruft. Verwenden Sie beispielsweise IBAction:

    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

  1. Fügen Sie Ihrer App eine Schaltfläche zum Abmelden hinzu, die für angemeldete Nutzer sichtbar ist.

  2. Verbinden Sie die Schaltfläche mit einer Methode in Ihrem ViewController, die signOut: aufruft. Verwenden Sie beispielsweise IBAction:

    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: