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

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

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

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

  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 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

  1. Achten Sie darauf, dass 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 am Anfang der Datei ein:

    import GoogleSignInSwift
    
  3. 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)
    
  4. Lösen Sie den Anmeldevorgang aus, wenn die Schaltfläche gedrückt wird, indem Sie der Aktion signIn(presentingViewController:completion:) von GIDSignIn 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

  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) 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 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. Abmeldeschaltfläche hinzufügen

  1. Fügen Sie Ihrer App eine Abmeldeschaltfläche 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 jetzt mit ihren Google-Konten bei Ihrer Anwendung anmelden können, erfahren Sie hier, wie Sie: