Mengintegrasikan Login dengan Google ke dalam aplikasi iOS atau macOS

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

Sebelum memulai

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

Coba aplikasi contoh iOS dan macOS untuk melihat cara kerja Login.

1. Menangani URL alihan autentikasi

iOS: UIApplicationDelegate

Dalam metode application:openURL:options Tailwind Anda, panggil metode GIDSignIn Metode 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. Di Tailwind 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 ini 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 milik 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 dan memulihkan status login pengguna yang sudah login menggunakan Google. Tindakan ini memastikan pengguna tidak perlu masuk setiap kali mereka membuka aplikasi (kecuali mereka telah logout).

Aplikasi iOS sering melakukannya di UIApplicationDelegate Metode application:didFinishLaunchingWithOptions: 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 pandangan 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 "Login dengan Google" ke Tampilan login Anda. Komponen tersedia untuk SwiftUI dan UIKit yang secara otomatis menghasilkan dengan branding Google dan direkomendasikan untuk digunakan.

Menggunakan SwiftUI

  1. Pastikan Anda telah menambahkan dependensi untuk "Login dengan Google" SwiftUI tombol pada proyek Anda.

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

    import GoogleSignInSwift
    
  3. Tambahkan "Login dengan Google" ke View Anda dan menentukan tindakan yang akan dipanggil saat tombol ditekan:

    GoogleSignInButton(action: handleSignInButton)
    
  4. Memicu proses login ketika tombol ditekan dengan menambahkan panggilan ke GIDSignIn Metode signIn(presentingViewController:completion:) di 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.
        }
      )
    }
    

Ini menggunakan model tampilan default yang menyediakan informasi gaya visual standar untuk tombolnya. Untuk mengontrol penampilan tombol, Anda perlu membuat GoogleSignInButtonViewModel dan tetapkan sebagai viewModel dalam penginisialisasi menggunakan GoogleSignInButton(viewModel: yourViewModel, action: yourAction). Lihat kode sumber GoogleSignInButtonViewModel untuk informasi selengkapnya.

Menggunakan UIKit

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

    Untuk menambahkan GIDSignInButton ke storyboard atau file XIB, tambahkan View dan atur class khususnya menjadi GIDSignInButton. Perhatikan bahwa saat Anda menambahkan GIDSignInButton Lihat ke storyboard Anda, tombol login tidak dirender di builder antarmuka. Jalankan aplikasi untuk melihat tombol login.

    Anda dapat menyesuaikan tampilan GIDSignInButton dengan menyetelnya Properti colorScheme dan style:

    Properti gaya GIDSignInButton
    colorScheme kGIDSignInButtonColorSchemeLight
    kGIDSignInButtonColorSchemeDark
    style kGIDSignInButtonStyleStandard
    kGIDSignInButtonStyleWide
    kGIDSignInButtonStyleIconOnly
  2. Hubungkan tombol ke sebuah metode dalam 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 login.

  2. Hubungkan tombol ke sebuah 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 caranya menjadi: