Halaman ini menunjukkan cara mengintegrasikan Login dengan Google ke dalam aplikasi iOS atau macOS. Anda mungkin perlu menyesuaikan petunjuk ini untuk siklus proses atau model UI aplikasi.
Sebelum memulai
Download dependensi, konfigurasi project Xcode, dan tetapkan ID klien Anda.
Coba aplikasi contoh iOS dan macOS kami untuk melihat cara kerja Login dengan Google.
1. Menangani URL pengalihan autentikasi
iOS: UIApplicationDelegate
Dalam metode application:openURL:options AppDelegate Anda, panggil metode 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: NSApplicationDelegate
Di AppDelegate aplikasi Anda, daftarkan pengendali untuk peristiwa
kAEGetURLdiapplicationDidFinishLaunching: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]; }Tentukan pengendali untuk peristiwa ini yang memanggil
handleURLGIDSignIn: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 Anda, daftarkan pengendali untuk menerima URL dan panggil 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. Dengan begitu, pengguna tidak perlu login setiap kali membuka aplikasi Anda (kecuali jika mereka telah logout).
Aplikasi iOS sering melakukannya dalam metode application:didFinishLaunchingWithOptions: UIApplicationDelegate dan applicationDidFinishLaunching: NSApplicationDelegate untuk aplikasi macOS. Gunakan hasilnya untuk menentukan tampilan 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
Pastikan Anda telah menambahkan dependensi untuk tombol "Login dengan Google" SwiftUI ke project Anda.
Di file tempat Anda ingin menambahkan tombol SwiftUI, tambahkan impor yang diperlukan ke bagian atas file:
import GoogleSignInSwiftTambahkan tombol "Login dengan Google" ke Tampilan Anda dan tentukan tindakan yang akan dipanggil saat tombol ditekan:
GoogleSignInButton(action: handleSignInButton)Picu proses login saat tombol ditekan dengan menambahkan panggilan ke metode
signIn(presentingViewController:completion:)GIDSignIndalam 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 standar untuk tombol. Untuk mengontrol tampilan tombol, Anda harus membuat kustom
GoogleSignInButtonViewModel dan menetapkannya sebagai viewModel di inisialisasi tombol
menggunakan GoogleSignInButton(viewModel: yourViewModel, action:
yourAction). Lihat
kode GoogleSignInButtonViewModel sumber
untuk mengetahui informasi selengkapnya.
Menggunakan UIKit
Tambahkan tombol "Login dengan Google" ke Tampilan login Anda. Anda dapat menggunakan class
GIDSignInButtonuntuk otomatis membuat tombol dengan branding Google (direkomendasikan) atau membuat tombol Anda sendiri dengan gaya kustom.Untuk menambahkan
GIDSignInButtonke storyboard atau file XIB, tambahkan Tampilan dan setel class khususnya keGIDSignInButton. Perhatikan bahwa saat Anda menambahkan TampilanGIDSignInButtonke storyboard, tombol login tidak merender dalam builder antarmuka. Jalankan aplikasi untuk melihat tombol login.Anda dapat menyesuaikan tampilan
GIDSignInButtondengan menetapkan properticolorSchemedanstyle:Properti gaya GIDSignInButton colorSchemekGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDarkstylekGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnlyHubungkan tombol ke metode di ViewController yang memanggil
signIn:. Misalnya, gunakanIBAction: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
Tambahkan tombol logout ke aplikasi Anda, yang terlihat oleh pengguna yang login.
Hubungkan tombol ke metode di ViewController yang memanggil
signOut:. Misalnya, gunakanIBAction: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:
- Mendapatkan informasi profil Akun Google pengguna.
- Mengautentikasi dengan backend Anda menggunakan token ID Google pengguna.
- Memanggil Google API atas nama pengguna.