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

Probieren Sie unsere Beispiel-App für iOS und macOS aus, um zu sehen, wie die Anmeldung funktioniert.

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

  1. Registrieren Sie in der AppDelegate-Datei 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 das 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, 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

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

  2. 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
    
  3. „Über Google anmelden“ hinzufügen zur Ansicht hinzufügen und die Aktion wird aufgerufen, wenn die Schaltfläche gedrückt wird:

    GoogleSignInButton(action: handleSignInButton)
    
  4. 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

  1. „Ü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 auf GIDSignInButton. Beachten Sie, dass beim Hinzufügen eines GIDSignInButton 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 seine colorScheme- und style-Properties:

    GIDSignInButton-Stileigenschaften
    colorScheme kGIDSignInButtonColorSchemeLight
    kGIDSignInButtonColorSchemeDark
    style kGIDSignInButtonStyleStandard
    kGIDSignInButtonStyleWide
    kGIDSignInButtonStyleIconOnly
  2. Verbinden Sie die Schaltfläche mit einer Methode in Ihrem ViewController, die das Aufrufen von signIn: Verwenden Sie beispielsweise einen 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 das Aufrufen von signOut: Verwenden Sie beispielsweise einen IBAction:

    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: