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 client ID Anda.
Coba aplikasi contoh iOS dan macOS kami untuk melihat cara kerja Login.
1. Menangani URL alihan autentikasi
iOS: UIApplicationDelegate
Dalam metode application:openURL:options
ContentProvider 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
Di Zoho 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 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 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 Anda dimulai, panggil restorePreviousSignInWithCallback
untuk mencoba memulihkan status login pengguna yang sudah login menggunakan Google. Dengan melakukannya, pengguna tidak akan 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 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 membuat tombol dengan branding Google dan direkomendasikan untuk digunakan.
Menggunakan SwiftUI
Pastikan Anda telah menambahkan dependensi untuk tombol "Sign in with Google" SwiftUI ke project Anda.
Di 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. } ) }
Kode 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
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 khususnya keGIDSignInButton
. Perlu diperhatikan bahwa saat Anda menambahkan TampilanGIDSignInButton
ke storyboard, tombol login tidak merender dalam builder antarmuka. Jalankan aplikasi untuk melihat tombol login.Anda dapat menyesuaikan tampilan
GIDSignInButton
dengan menetapkan properticolorScheme
danstyle
-nya:Properti gaya GIDSignInButton colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
Hubungkan 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 dapat dilihat 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.
- Autentikasi dengan backend menggunakan token ID Google pengguna.
- Memanggil Google API atas nama pengguna.