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

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

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

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

  1. Registrieren Sie in der 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, der handleURL von GIDSignIn aufruft:

    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

  1. Achten Sie darauf, dass Sie Ihrem Projekt die Abhängigkeit für die Schaltfläche „Über Google anmelden“ von SwiftUI hinzugefügt haben.

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

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

  1. Fügen Sie Ihrer Anmeldeansicht eine Schaltfläche „Über Google anmelden“ hinzu. Sie können die Klasse GIDSignInButton verwenden, 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 auf GIDSignInButton fest. Beachten Sie, dass beim Hinzufügen einer GIDSignInButton-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 Attribute colorScheme und style festlegen:

    Stileigenschaften von GIDSignInButton
    colorScheme kGIDSignInButtonColorSchemeLight
    kGIDSignInButtonColorSchemeDark
    style kGIDSignInButtonStyleStandard
    kGIDSignInButtonStyleWide
    kGIDSignInButtonStyleIconOnly
  2. Verknüpfen Sie die Schaltfläche mit einer Methode in Ihrem ViewController, die signIn: aufruft. Verwenden Sie beispielsweise ein 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. Abmeldeschaltfläche hinzufügen

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

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

    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: