Integracja Logowania przez Google z aplikacją na iOS lub macOS

Na tej stronie dowiesz się, jak zintegrować Logowanie przez Google z aplikacją na iOS lub macOS. Konieczne może być dostosowanie tych instrukcji do cyklu życia aplikacji lub modelu interfejsu.

Zanim zaczniesz

Pobierz zależności, skonfiguruj projekt Xcode i ustaw identyfikator klienta.

Wypróbuj naszą przykładową aplikację na iOS i macOS, aby zobaczyć, jak działa logowanie

1. Obsługa adresu URL przekierowania uwierzytelniania

iOS: UIApplicationDelegate

W metodzie application:openURL:options usługi AppDelegate wywołaj GIDSignIn Metoda 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. W aplikacji AppDelegate zarejestruj moduł obsługi zdarzeń kAEGetURL w 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. Określ moduł obsługi tych zdarzeń, który wywołuje funkcję handleURL interfejsu GIDSignIn:

    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

W oknie lub scenie aplikacji zarejestruj moduł obsługi, aby otrzymać adres URL i wywołać handleURL (GIDSignIn):

Swift

@main
struct MyApp: App {

  var body: some Scene {
    WindowGroup {
      ContentView()
        // ...
        .onOpenURL { url in
          GIDSignIn.sharedInstance.handle(url)
        }
    }
  }
}

2. Spróbuj przywrócić stan logowania użytkownika

Po uruchomieniu aplikacji zadzwoń pod numer restorePreviousSignInWithCallback, aby spróbować: przywrócenie stanu logowania użytkowników, którzy zalogowali się już przez Google. Robię to aby użytkownicy nie musieli logować się za każdym razem, gdy otwierają aplikację (chyba że się wylogowało).

Aplikacje na iOS często robią to na: UIApplicationDelegate application:didFinishLaunchingWithOptions: i applicationDidFinishLaunching: dla systemu NSApplicationDelegate dla aplikacji na macOS. Używaj wynik w celu określenia, który widok wyświetlić użytkownikowi. Na przykład:

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

Jeśli używasz SwiftUI, dodaj wywołanie do restorePreviousSignIn w onAppear dla Twój początkowy widok:

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. Dodaj przycisk Logowania przez Google

Dodaj opcję „Zaloguj się przez Google” do widoku logowania. Dla SwiftUI i UIKit dostępne są komponenty, które automatycznie generują z logo Google i zalecamy ich użycie.

Korzystanie z SwiftUI

  1. Upewnij się, że masz dodaną zależność w interfejsie SwiftUI „Zaloguj się przez Google”. do swojego projektu.

  2. W pliku, do którego chcesz dodać przycisk SwiftUI, dodaj na początku pliku wymagany element importu:

    import GoogleSignInSwift
    
  3. Dodaj opcję „Zaloguj się przez Google” do widoku danych i określ działanie, który zostanie wywołany po naciśnięciu przycisku:

    GoogleSignInButton(action: handleSignInButton)
    
  4. Wywołuj proces logowania po naciśnięciu przycisku, dodając wywołanie do funkcji GIDSignIn – Metoda signIn(presentingViewController:completion:) w Twoje działanie:

    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.
        }
      )
    }
    

Wykorzystuje domyślny model widoku, który podaje standardowe informacje o stylu dla: kliknij przycisk. Aby sterować wyglądem przycisku, musisz utworzyć własny GoogleSignInButtonViewModel i ustaw ją jako viewModel w przycisku inicjator za pomocą metody GoogleSignInButton(viewModel: yourViewModel, action: yourAction). Zobacz kod źródłowy GoogleSignInButtonViewModel .

Korzystanie z UIKit

  1. Dodaj opcję „Zaloguj się przez Google” do widoku logowania. Za pomocą GIDSignInButton klasa, aby automatycznie wygenerować przycisk przy użyciu Google oznaczenia marki (zalecane) lub utworzyć własny przycisk z własnym stylem.

    Aby dodać element GIDSignInButton do scenorysu lub pliku XIB, dodaj opcję Widok i zestaw swoją klasę niestandardową na GIDSignInButton. Pamiętaj, że dodanie GIDSignInButton Wyświetlenie scenorysu – przycisk logowania się nie renderuje w kreatorze interfejsów. Uruchom aplikację, aby zobaczyć przycisk logowania.

    Możesz dostosować wygląd GIDSignInButton, ustawiając jego Usługi colorScheme i style:

    Właściwości stylu GIDSignInButton
    colorScheme kGIDSignInButtonColorSchemeLight
    kGIDSignInButtonColorSchemeDark
    style kGIDSignInButtonStyleStandard
    kGIDSignInButtonStyleWide
    kGIDSignInButtonStyleIconOnly
  2. Połącz przycisk z metodą w elemencie ViewController, która wywołuje metodę signIn: Możesz na przykład użyć atrybutu 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. Dodawanie przycisku wylogowania

  1. Dodaj do aplikacji przycisk wylogowania widoczny dla zalogowanych użytkowników.

  2. Połącz przycisk z metodą w elemencie ViewController, która wywołuje metodę signOut: Możesz na przykład użyć atrybutu IBAction:

    Swift

    @IBAction func signOut(sender: Any) {
      GIDSignIn.sharedInstance.signOut()
    }
    

    Objective-C

    - (IBAction)signOut:(id)sender {
      [GIDSignIn.sharedInstance signOut];
    }
    

Dalsze kroki

Teraz użytkownicy mogą logować się w Twojej aplikacji za pomocą swoich kont Google. Dowiedz się, jak to zrobić. do: