หน้านี้แสดงวิธีผสานรวม Google Sign-In ในแอป iOS หรือ macOS คุณอาจต้องปรับวิธีการเหล่านี้สําหรับอายุการใช้งานหรือโมเดล UI ของแอป
ก่อนเริ่มต้น
ดาวน์โหลดทรัพยากร Dependency กําหนดค่าโปรเจ็กต์ Xcode แล้วตั้งค่ารหัสไคลเอ็นต์
1. จัดการ URL เปลี่ยนเส้นทางการตรวจสอบสิทธิ์
iOS: UIApplicationDelegate
ในเมธอด application:openURL:options
ของ AppDelegate ให้เรียกใช้เมธอด 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
ใน AppDelegate ของแอปลงทะเบียนเครื่องจัดการสําหรับเหตุการณ์
kAEGetURL
ใน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]; }
กําหนดเครื่องจัดการสําหรับเหตุการณ์เหล่านี้ซึ่งเรียกใช้
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
ในหน้าต่างหรือฉากของแอป ให้ลงทะเบียนเครื่องจัดการเพื่อรับ URL และเรียก handleURL
GIDSignIn
Swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onOpenURL { url in
GIDSignIn.sharedInstance.handle(url)
}
}
}
}
2. การพยายามกู้คืนสถานะการลงชื่อเข้าใช้ของผู้ใช้
เมื่อแอปเริ่มทํางาน ให้โทรหา restorePreviousSignInWithCallback
เพื่อพยายามกู้คืนสถานะการลงชื่อเข้าใช้ของผู้ใช้ที่ลงชื่อเข้าใช้ด้วย Google อยู่แล้ว ซึ่งช่วยให้ผู้ใช้ไม่ต้องลงชื่อเข้าใช้ทุกครั้งที่เปิดแอป (เว้นแต่จะออกจากระบบ)
แอป iOS มักจะดําเนินการนี้ในเมธอด application:didFinishLaunchingWithOptions:
ของ UIApplicationDelegate
และ applicationDidFinishLaunching:
ของ NSApplicationDelegate
สําหรับแอป macOS ใช้ผลลัพธ์เพื่อกําหนดมุมมองที่จะแสดงแก่ผู้ใช้ เช่น
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
หากคุณใช้ SwiftUI ให้เพิ่มการเรียกใช้ไปยัง restorePreviousSignIn
ใน onAppear
เพื่อดูมุมมองเริ่มต้น
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. เพิ่มปุ่ม Google Sign-In
เพิ่มปุ่ม "ลงชื่อเข้าใช้ด้วย Google" ลงในมุมมองการลงชื่อเข้าใช้ คอมโพเนนต์พร้อมใช้งานสําหรับ SwiftUI และ UIKit ที่สร้างปุ่มโดยอัตโนมัติด้วยการแสดงแบรนด์ Google และแนะนําให้ใช้
การใช้ SwiftUI
ตรวจสอบว่าคุณได้เพิ่มทรัพยากร Dependency สําหรับปุ่ม "ลงชื่อเข้าใช้ด้วย Google" ใน SwiftUI ในโปรเจ็กต์
ในไฟล์ที่ต้องการเพิ่มปุ่ม SwiftUI ให้เพิ่มการนําเข้าที่จําเป็นไว้ที่ด้านบนของไฟล์ดังนี้
import GoogleSignInSwift
เพิ่มปุ่ม "ลงชื่อเข้าใช้ด้วย Google" ในข้อมูลพร็อพเพอร์ตี้ของคุณ และระบุการทํางานที่จะถูกเรียกใช้เมื่อกดปุ่ม:
GoogleSignInButton(action: handleSignInButton)
เริ่มกระบวนการลงชื่อเข้าใช้เมื่อมีการกดปุ่มโดยการเพิ่มวิธีเมธอด
signIn(presentingViewController:completion:)
ของGIDSignIn
ในการดําเนินการนี้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. } ) }
ซึ่งจะใช้รูปแบบมุมมองเริ่มต้นที่ให้ข้อมูลการจัดรูปแบบมาตรฐานสําหรับปุ่ม หากต้องการควบคุมลักษณะที่ปรากฏของปุ่ม คุณต้องสร้าง GoogleSignInButtonViewModel
ที่กําหนดเอง และตั้งค่าเป็น viewModel
ในตัวทริกเกอร์ของปุ่มโดยใช้ GoogleSignInButton(viewModel: yourViewModel, action:
yourAction)
ดูซอร์สโค้ด GoogleSignInButtonViewModel
สําหรับข้อมูลเพิ่มเติม
การใช้ UIKit
เพิ่มปุ่ม "ลงชื่อเข้าใช้ด้วย Google" ลงในมุมมองการลงชื่อเข้าใช้ คุณใช้คลาส
GIDSignInButton
เพื่อสร้างปุ่มโดยอัตโนมัติได้ด้วยการแสดงแบรนด์ Google (แนะนํา) หรือสร้างปุ่มของคุณเองด้วยการจัดรูปแบบที่กําหนดเองหากต้องการเพิ่ม
GIDSignInButton
ลงในสตอรีบอร์ดหรือไฟล์ XIB ให้เพิ่มมุมมองและตั้งค่าคลาสที่กําหนดเองเป็นGIDSignInButton
โปรดทราบว่าเมื่อคุณเพิ่มมุมมองGIDSignInButton
ลงในสตอรีบอร์ด ปุ่มลงชื่อเข้าใช้จะไม่แสดงผลในเครื่องมือสร้างอินเทอร์เฟซ เรียกใช้แอปเพื่อดูปุ่มลงชื่อเข้าใช้คุณปรับแต่งลักษณะที่ปรากฏของ
GIDSignInButton
ได้โดยตั้งค่าพร็อพเพอร์ตี้colorScheme
และstyle
ดังนี้พร็อพเพอร์ตี้รูปแบบ GIDSignInButton colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
เชื่อมต่อปุ่มกับเมธอดใน ViewController ที่เรียกใช้
signIn:
เช่น ใช้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. เพิ่มปุ่มออกจากระบบ
เพิ่มปุ่มออกจากระบบลงในแอปเพื่อให้ผู้ใช้ที่ลงชื่อเข้าใช้เห็น
เชื่อมต่อปุ่มกับเมธอดใน ViewController ที่เรียกใช้
signOut:
เช่น ใช้IBAction
Swift
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }
Objective-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
ขั้นตอนถัดไป
ตอนนี้ผู้ใช้สามารถลงชื่อเข้าใช้แอปโดยใช้บัญชี Google ได้แล้ว ดูวิธีการต่อไปนี้
- ขอรับข้อมูลโปรไฟล์บัญชี Google ของผู้ใช้
- ตรวจสอบสิทธิ์ด้วยแบ็กเอนด์โดยใช้รหัส Google ของผู้ใช้
- เรียก Google API ในนามของผู้ใช้