בדף הזה מוסבר איך לשלב את הכניסה באמצעות חשבון Google באפליקציה ל-iOS או ל-macOS. ייתכן שתצטרכו להתאים את ההוראות האלה למחזור החיים או למודל ממשק המשתמש של האפליקציה.
לפני שמתחילים
מורידים את יחסי התלות, מגדירים את פרויקט ה-Xcode ומגדירים את מזהה הלקוח.
כדאי לנסות את האפליקציה לדוגמה ל-iOS ול-macOS כדי לראות איך פועלת הכניסה.
1. טיפול בכתובת ה-URL להפניה אוטומטית לאימות
iOS: UIApplicationApplication היום
בשיטה 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
ב-AppOutline של האפליקציה שלך, צריך לרשום 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 עושות זאת בדרך כלל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
הוספה של 'כניסה באמצעות חשבון 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
:מאפייני סגנון לחצן GIDSignInSign colorScheme
kGIDSignInButtonColorSchemeLight
kGIDSignInButtonColorSchemeDark
style
kGIDSignInButtonStyleStandard
kGIDSignInButtonStyleWide
kGIDSignInButtonStyleIconOnly
מחברים את הלחצן ל-method ב-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. הוספת לחצן ליציאה
צריך להוסיף לחצן יציאה לאפליקציה שלך, שיהיה גלוי למשתמשים מחוברים.
מחברים את הלחצן ל-method ב-ViewController שקוראת
signOut:
לדוגמה, אפשר להזיןIBAction
:Swift
@IBAction func signOut(sender: Any) { GIDSignIn.sharedInstance.signOut() }
Objective-C
- (IBAction)signOut:(id)sender { [GIDSignIn.sharedInstance signOut]; }
השלבים הבאים
עכשיו, כשמשתמשים יכולים להיכנס לאפליקציה באמצעות חשבונות Google שלהם, כדאי לך ללמוד איך to:
- השגת משתמשים פרטי הפרופיל מחשבון Google.
- אימות עם הקצה העורפי באמצעות מזהה Google של המשתמש ב-Assistant.
- לקרוא ל-Google APIs בשם המשתמש.