หน้านี้จะแสดงวิธีผสานรวม Google Sign-In เข้ากับแอป iOS หรือ macOS คุณอาจต้องปรับวิธีการเหล่านี้สำหรับวงจรของแอปหรือรูปแบบ UI
ก่อนเริ่มต้น
ดาวน์โหลดทรัพยากร Dependency กำหนดค่าโปรเจ็กต์ Xcode และตั้งค่ารหัสไคลเอ็นต์
ลองใช้แอปตัวอย่างสำหรับ iOS และ macOS เพื่อดูวิธีการทำงานของการลงชื่อเข้าใช้
1. จัดการ URL เปลี่ยนเส้นทางการตรวจสอบสิทธิ์
iOS: UIApplicationDelegate
ในเมธอด application:openURL:options
ของ AppDelegate ให้เรียกใช้ GIDSignIn
เมธอด 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
ใน 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 มักจะทำเช่นนี้ใน UIApplicationDelegate
application:didFinishLaunchingWithOptions:
วิธีและ
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
ตรวจสอบว่าคุณเพิ่มการขึ้นต่อกันสำหรับ SwiftUI "ลงชื่อเข้าใช้ด้วย Google" ปุ่ม ลงในโปรเจ็กต์ของคุณ
ในไฟล์ที่ต้องการเพิ่มปุ่ม SwiftUI ให้เพิ่มปุ่มนำเข้าที่จำเป็นไว้ที่ด้านบนของไฟล์ดังนี้
import GoogleSignInSwift
เพิ่มปุ่ม "ลงชื่อเข้าใช้ด้วย Google" ลงในมุมมองของคุณและระบุการทำงาน ที่จะเรียกใช้เมื่อกดปุ่ม:
GoogleSignInButton(action: handleSignInButton)
เรียกใช้กระบวนการลงชื่อเข้าใช้เมื่อกดปุ่มโดยเพิ่มการเรียกใช้ ของ
GIDSignIn
signIn(presentingViewController:completion:)
วิธีใน การดำเนินการของคุณ: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 APIs ในนามของผู้ใช้