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. Może być konieczne dostosowanie tych instrukcji do cyklu życia aplikacji lub modelu interfejsu użytkownika.

Zanim zaczniesz

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

1. Obsługa adresu URL przekierowania uwierzytelniania

iOS: UIApplicationDelegata

W metodzie application:openURL:options aplikacji App Przedstawiciel wywołaj metodę handleURL: GIDSignIn:

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

  1. W aplikacji AppClaim zarejestruj moduł obsługi zdarzeń kAEGetURL w aplikacji 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óre wywołują obiekt handleURL klasy 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ć element GIDSignIn handleURL:

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 wywołaj restorePreviousSignInWithCallback, aby spróbować przywrócić stan logowania użytkowników, którzy zalogowali się już przez Google. Dzięki temu użytkownicy nie będą musieli logować się za każdym razem, gdy otworzą Twoją aplikację (chyba że się wylogują).

W przypadku aplikacji na iOS często robią to za pomocą metody application:didFinishLaunchingWithOptions: systemu UIApplicationDelegate i metody applicationDidFinishLaunching: NSApplicationDelegate dla aplikacji na system macOS. Na podstawie wyniku możesz określić, 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 interfejsu SwiftUI, dodaj wywołanie do restorePreviousSignIn w onAppear dla widoku początkowego:

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. Dodawanie przycisku logowania przez Google

Dodaj przycisk „Zaloguj się przez Google” do widoku logowania. W językach SwiftUI i UIKit są dostępne komponenty, które automatycznie generują przycisk z elementami marki Google i są zalecane do użycia.

Korzystanie ze SwiftUI

  1. Pamiętaj, aby dodać do projektu zależność do przycisku SwiftUI „Zaloguj się przez Google”.

  2. Na początku pliku, w którym chcesz dodać przycisk SwiftUI, dodaj wymagany import:

    import GoogleSignInSwift
    
  3. Dodaj do widoku przycisk „Zaloguj się przez Google” i określ działanie, które będzie wywoływane po naciśnięciu tego przycisku:

    GoogleSignInButton(action: handleSignInButton)
    
  4. Aktywuj proces logowania po naciśnięciu przycisku, dodając w działaniu wywołanie do metody signIn(presentingViewController:completion:) używanej przez użytkownika GIDSignIn:

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

Używany jest domyślny model widoku, który udostępnia standardowe informacje o stylu przycisku. Aby kontrolować wygląd przycisku, musisz utworzyć niestandardowy GoogleSignInButtonViewModel i ustawić go jako viewModel w inicjatorze przycisku za pomocą GoogleSignInButton(viewModel: yourViewModel, action: yourAction). Więcej informacji znajdziesz w kodzie źródłowym GoogleSignInButtonViewModel.

Korzystanie z UIKit

  1. Dodaj przycisk „Zaloguj się przez Google” do widoku logowania. Możesz użyć klasy GIDSignInButton, aby automatycznie wygenerować przycisk z elementami marki Google (zalecane), lub utworzyć własny przycisk o niestandardowym stylu.

    Aby dodać obiekt GIDSignInButton do pliku scenorysu lub XIB, dodaj obiekt View i ustaw jego klasę niestandardową na GIDSignInButton. Pamiętaj, że po dodaniu widoku GIDSignInButton do scenorysu przycisk logowania nie jest renderowany w kreatorze interfejsów. Uruchom aplikację, aby zobaczyć przycisk logowania.

    Wygląd obiektu GIDSignInButton możesz dostosować, ustawiając jego właściwości colorScheme i style:

    Właściwości stylu GIDSignInButton
    colorScheme kGIDSignInButtonColorSchemeLight
    kGIDSignInButtonColorSchemeDark
    style kGIDSignInButtonStyleStandard
    kGIDSignInButtonStyleWide
    kGIDSignInButtonStyleIconOnly
  2. Połącz przycisk z metodą w kontrolerze View, która wywołuje signIn:. Użyj na przykład elementu 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, który będzie widoczny dla zalogowanych użytkowników.

  2. Połącz przycisk z metodą w kontrolerze View, która wywołuje signOut:. Użyj na przykład elementu IBAction:

    Swift

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

    Objective-C

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

Dalsze kroki

Użytkownicy mogą już logować się w aplikacji za pomocą swoich kont Google. Dowiedz się, jak: