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:
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
kAEGetURL
diapplicationDidFinishLaunching
: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
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 Anda, 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 dimulai, panggil restorePreviousSignInWithCallback
untuk mencoba dan
memulihkan status login pengguna yang sudah login menggunakan Google. Tindakan ini memastikan pengguna tidak perlu login setiap kali mereka membuka aplikasi Anda (kecuali jika mereka telah 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 secara otomatis menghasilkan tombol dengan branding Google dan direkomendasikan untuk digunakan.
Menggunakan SwiftUI
Pastikan Anda telah menambahkan dependensi untuk tombol "Sign in with Google" SwiftUI ke project.
Pada file tempat Anda ingin menambahkan tombol SwiftUI, tambahkan impor yang diperlukan ke bagian atas file:
import GoogleSignInSwift
Tambahkan 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:)
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. } ) }
Ini menggunakan model tampilan default yang menyediakan informasi gaya standar untuk
tombol. Untuk mengontrol tampilan tombol, Anda harus membuat GoogleSignInButtonViewModel
kustom dan menyetelnya sebagai viewModel
di penginisialisasi tombol menggunakan GoogleSignInButton(viewModel: yourViewModel, action:
yourAction)
. Lihat
kode sumber GoogleSignInButtonViewModel
untuk informasi selengkapnya.
Menggunakan UIKit
Tambahkan tombol "Login dengan Google" ke Tampilan login Anda. Anda dapat menggunakan class
GIDSignInButton
untuk membuat tombol secara otomatis dengan branding Google (direkomendasikan) atau membuat tombol sendiri dengan gaya visual kustom.Untuk menambahkan
GIDSignInButton
ke storyboard atau file XIB, tambahkan Tampilan dan setel class kustomnya keGIDSignInButton
. Perlu diperhatikan bahwa saat Anda menambahkan TampilanGIDSignInButton
ke storyboard, tombol login tidak akan merender di builder antarmuka. Jalankan aplikasi untuk melihat tombol login.Anda dapat menyesuaikan tampilan
GIDSignInButton
dengan menetapkan properticolorScheme
danstyle
:Properti gaya GIDSignInButton colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
Hubungkan tombol ke metode di ViewController Anda 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 dapat dilihat oleh pengguna yang login.
Hubungkan tombol ke metode di ViewController Anda 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.