בדף הזה מוסבר איך לשלב כניסה באמצעות חשבון Google באפליקציה ל-iOS או ל-macOS. יכול להיות שתצטרכו להתאים את ההוראות האלה למודל של מחזור החיים או ממשק המשתמש של האפליקציה.
לפני שמתחילים
מורידים את יחסי התלות, מגדירים את פרויקט Xcode ומגדירים את מזהה הלקוח.
אתם יכולים לנסות את האפליקציה לדוגמה שלנו ל-iOS ול-macOS כדי לראות איך הכניסה פועלת.
1. טיפול בכתובת ה-URL להפניה אוטומטית לאימות
iOS: UIApplicationDelegate
בשיטה application:openURL:options
של AppDelegate, קוראים ל-method 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 לאירועים האלה שקוראים ל-
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
בחלון או בסצנה של האפליקציה, רושמים handler כדי לקבל את כתובת ה-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
מוסיפים לחצן "כניסה באמצעות חשבון Google" לתצוגת הכניסה. יש רכיבים זמינים ל-SwiftUI ול-UIKit שמייצרים באופן אוטומטי לחצן עם מיתוג של Google ומומלץ להשתמש בהם.
שימוש ב-SwiftUI
חשוב לוודא שהוספתם לפרויקט את תלות הלחצן 'Sign in with Google' (כניסה באמצעות חשבון Google) ב-SwiftUI.
בקובץ שאליו רוצים להוסיף את לחצן SwiftUI, מוסיפים את הייבוא הנדרש בחלק העליון של הקובץ:
import GoogleSignInSwift
מוסיפים לתצוגה לחצן 'Sign in with Google' (כניסה באמצעות חשבון 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 APIs בשם המשתמש.