בדף הזה מוסבר איך לשלב את התכונה 'כניסה באמצעות חשבון Google' באפליקציית iOS או macOS. יכול להיות שתצטרכו להתאים את ההוראות האלה למחזור החיים של האפליקציה או למודל ממשק המשתמש שלה.
לפני שמתחילים
מורידים את התלויות, מגדירים את פרויקט Xcode ומגדירים את מזהה הלקוח.
כדאי לנסות את אפליקציית הדוגמה שלנו ל-iOS ול-macOS כדי לראות איך הכניסה פועלת.
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 של האפליקציה, רושמים handler לאירועי
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]; }מגדירים את ה-handler לאירועים האלה שקורא ל-
GIDSignInשלhandleURL: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
בחלון או בסצנה של האפליקציה, רושמים handler לקבלת כתובת ה-URL ולקריאה ל-GIDSignIns handleURL:
Swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
// ...
.onOpenURL { url in
GIDSignIn.sharedInstance.handle(url)
}
}
}
}
2. מנסים לשחזר את מצב הכניסה של המשתמש
כשהאפליקציה מופעלת, קוראים ל-restorePreviousSignInWithCallback כדי לנסות לשחזר את מצב הכניסה של משתמשים שכבר נכנסו באמצעות Google. כך המשתמשים לא יצטרכו להיכנס לחשבון בכל פעם שהם פותחים את האפליקציה (אלא אם הם יצאו מהחשבון).
באפליקציות ל-iOS, הפעולה הזו מתבצעת בדרך כלל ב-method UIApplicationDelegate's
application:didFinishLaunchingWithOptions: וב-NSApplicationDelegate's applicationDidFinishLaunching: באפליקציות ל-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
מוסיפים לחצן 'כניסה באמצעות Google' לתצוגת הכניסה. רכיבים זמינים ל-SwiftUI ול-UIKit שיוצרים באופן אוטומטי לחצן עם מיתוג Google, ומומלץ להשתמש בהם.
שימוש ב-SwiftUI
מוודאים שהוספתם לפרויקט את יחסי התלות של כפתור הכניסה באמצעות חשבון Google ב-SwiftUI.
בקובץ שבו רוצים להוסיף את הלחצן SwiftUI, מוסיפים את הייבוא הנדרש לחלק העליון של הקובץ:
import GoogleSignInSwiftמוסיפים לחצן 'כניסה באמצעות חשבון Google' לתצוגה ומציינים את הפעולה שתופעל כשלוחצים על הלחצן:
GoogleSignInButton(action: handleSignInButton)כדי להפעיל את תהליך הכניסה כשלוחצים על הלחצן, מוסיפים קריאה לשיטה
GIDSignIn'ssignIn(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 colorSchemekGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDarkstylekGIDSignInButtonStyleStandard
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.
- אימות באמצעות ה-backend באמצעות טוקן מזהה Google של המשתמש.
- הפעלת Google APIs בשם המשתמש.