Mengintegrasikan Login dengan Google ke dalam aplikasi iOS atau macOS

Halaman ini menunjukkan cara mengintegrasikan Login dengan Google ke dalam aplikasi iOS atau macOS. Anda mungkin perlu menyesuaikan petunjuk ini untuk siklus proses aplikasi atau model UI Anda.

Sebelum memulai

Download dependensi, konfigurasikan project Xcode, dan tetapkan client ID Anda.

1. Menangani URL alihan autentikasi

iOS: UIApplicationDelegate

Dalam metode application:openURL:options AppDelegate Anda, panggil metode handleURL: dari 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: NSApplicationDelegate

  1. Di AppDelegate aplikasi Anda, daftarkan pengendali untuk peristiwa kAEGetURL di 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. Tentukan pengendali untuk peristiwa berikut yang memanggil handleURL 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

Di jendela atau scene aplikasi, daftarkan pengendali untuk menerima URL dan memanggil handleURL GIDSignIn:

Swift

@main
struct MyApp: App {

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

2. Mencoba memulihkan status login pengguna

Saat aplikasi Anda dimulai, panggil restorePreviousSignInWithCallback untuk mencoba memulihkan status login pengguna yang sudah login menggunakan Google. Tindakan ini dapat memastikan bahwa pengguna tidak perlu login setiap kali membuka aplikasi Anda (kecuali jika mereka sudah logout).

Aplikasi iOS sering kali melakukannya dalam metode application:didFinishLaunchingWithOptions: UIApplicationDelegate dan applicationDidFinishLaunching: NSApplicationDelegate untuk aplikasi macOS. Gunakan hasilnya untuk menentukan tampilan mana yang akan ditampilkan kepada pengguna. Contoh:

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

Jika Anda menggunakan SwiftUI, tambahkan panggilan ke restorePreviousSignIn di onAppear untuk tampilan awal Anda:

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. Menambahkan tombol Login dengan Google

Tambahkan tombol "Login dengan Google" ke Tampilan login Anda. Komponen tersedia untuk SwiftUI dan UIKit yang otomatis membuat tombol dengan branding Google dan direkomendasikan untuk digunakan.

Menggunakan SwiftUI

  1. Pastikan Anda telah menambahkan dependensi untuk tombol "Sign in with Google" SwiftUI ke project Anda.

  2. Di file tempat Anda ingin menambahkan tombol SwiftUI, tambahkan impor yang diperlukan ke bagian atas file:

    import GoogleSignInSwift
    
  3. Tambahkan tombol "Sign in with Google" ke View Anda dan tentukan tindakan yang akan dipanggil saat tombol ditekan:

    GoogleSignInButton(action: handleSignInButton)
    
  4. Picu proses login saat tombol ditekan dengan menambahkan panggilan ke metode signIn(presentingViewController:completion:) GIDSignIn dalam tindakan Anda:

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

Tindakan ini menggunakan model tampilan default yang menyediakan informasi gaya visual standar untuk tombol. Untuk mengontrol tampilan tombol, Anda harus membuat GoogleSignInButtonViewModel kustom dan menetapkannya sebagai viewModel dalam penginisialisasi tombol menggunakan GoogleSignInButton(viewModel: yourViewModel, action: yourAction). Lihat kode sumber GoogleSignInButtonViewModel untuk informasi selengkapnya.

Menggunakan UIKit

  1. Tambahkan tombol "Login dengan Google" ke Tampilan login Anda. Anda dapat menggunakan class GIDSignInButton untuk secara otomatis membuat tombol dengan branding Google (direkomendasikan) atau membuat tombol Anda sendiri dengan gaya visual kustom.

    Untuk menambahkan GIDSignInButton ke storyboard atau file XIB, tambahkan Tampilan dan setel class kustomnya ke GIDSignInButton. Perhatikan bahwa saat Anda menambahkan Tampilan GIDSignInButton ke storyboard, tombol login tidak merender dalam builder antarmuka. Jalankan aplikasi untuk melihat tombol login.

    Anda dapat menyesuaikan tampilan GIDSignInButton dengan menetapkan properti colorScheme dan style-nya:

    Properti gaya GIDSignInButton
    colorScheme kGIDSignInButtonColorSchemeLight
    kGIDSignInButtonColorSchemeDark
    style kGIDSignInButtonStyleStandard
    kGIDSignInButtonStyleWide
    kGIDSignInButtonStyleIconOnly
  2. Hubungkan tombol ke metode di ViewController yang memanggil signIn:. Misalnya, gunakan 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. Menambahkan tombol logout

  1. Tambahkan tombol logout ke aplikasi Anda, yang dapat dilihat oleh pengguna yang sudah login.

  2. Hubungkan tombol ke metode di ViewController yang memanggil signOut:. Misalnya, gunakan IBAction:

    Swift

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

    Objective-C

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

Langkah berikutnya

Setelah pengguna dapat login ke aplikasi Anda menggunakan Akun Google mereka, pelajari cara: