אתם יכולים להשתמש ב-Game Center כדי לאפשר לשחקנים להיכנס למשחק בפלטפורמות של Apple שנוצר ב-Firebase. כדי להשתמש בכניסה באמצעות Game Center ב-Firebase, קודם צריך לוודא שהשחקן המקומי נכנס באמצעות Game Center, ואז להשתמש באובייקט GameCenterAuthProvider
כדי ליצור פרטי כניסה ל-Firebase, שאפשר להשתמש בהם כדי לבצע אימות באמצעות Firebase.
לפני שמתחילים
שימוש ב-Swift Package Manager כדי להתקין ולנהל יחסי תלות ב-Firebase.
- ב-Xcode, כשפרויקט האפליקציה פתוח, עוברים אל קובץ > הוספת חבילות.
- כשמופיעה בקשה, מוסיפים את המאגר של Firebase SDK לפלטפורמות Apple:
- בוחרים את הספרייה Firebase Authentication.
- מוסיפים את הדגל
-ObjC
לקטע Other Linker Flags (דגלים אחרים של קישור) בהגדרות ה-build של היעד. - בסיום, Xcode יתחיל לפתור את יחסי התלות ולהוריד אותם באופן אוטומטי ברקע.
https://github.com/firebase/firebase-ios-sdk.git
לאחר מכן, מבצעים כמה שלבים להגדרה:
- חשוב לרשום את האפליקציה ל-Apple ב-Firebase. כלומר, צריך להזין את מזהה החבילה של האפליקציה בקטע הרישום, יחד עם מידע אופציונלי נוסף כמו מזהה App Store ומזהה צוות וכו'. המידע הזה יידרש כדי לאמת בצורה מאובטחת את הקהל של פרטי הכניסה של המשתמש ב-Game Center לפני השלמת הכניסה.
- מפעילים את Game Center כספק כניסה לפרויקט Firebase:
- במסוף Firebase, פותחים את הקטע Authentication.
- בכרטיסייה Sign in method, מפעילים את ספק הכניסה Game Center.
שילוב כניסה ל-Game Center במשחק
קודם כול, אם המשחק שלכם עדיין לא משתמש ב-Game Center, פועלים לפי ההוראות במאמרים שילוב Game Center במשחק ואימות שחקן מקומי במכשיר באתר למפתחים של Apple.
חשוב לוודא שמזהה החבילה שסיפקתם ל-iTunes Connect תואם למזהה החבילה שבו השתמשתם כשקישרתם את האפליקציה לפרויקט Firebase.
כחלק מהשילוב של Game Center, מגדירים טיפול באימות שנקרא במספר נקודות בתהליך האימות של Game Center. בטיפול הזה, בודקים אם השחקן מחובר באמצעות Game Center. אם כן, תוכלו להמשיך להיכנס ל-Firebase.
Swift
let localPlayer = GKLocalPlayer.localPlayer() localPlayer.authenticateHandler = { (gcAuthViewController?, error) in if let gcAuthViewController = gcAuthViewController { // Pause any activities that require user interaction, then present the // gcAuthViewController to the player. } else if localPlayer.isAuthenticated { // Player is signed in to Game Center. Get Firebase credentials from the // player's Game Center credentials (see below). } else { // Error } }
Objective-C
__weak GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; localPlayer.authenticateHandler = ^(UIViewController *gcAuthViewController, NSError *error) { if (gcAuthViewController != nil) { // Pause any activities that require user interaction, then present the // gcAuthViewController to the player. } else if (localPlayer.isAuthenticated) { // Player is signed in to Game Center. Get Firebase credentials from the // player's Game Center credentials (see below). } else { // Error } };
אימות באמצעות Firebase
אחרי שמחליטים שהשחקן המקומי נכנס באמצעות Game Center, צריך להכניס אותו למשחק על ידי יצירת אובייקט AuthCredential
באמצעות GameCenterAuthProvider.getCredential()
והעברת האובייקט הזה אל signIn(with:)
:
Swift
// Get Firebase credentials from the player's Game Center credentials GameCenterAuthProvider.getCredential() { (credential, error) in if let error = error { return } // The credential can be used to sign in, or re-auth, or link or unlink. Auth.auth().signIn(with:credential) { (user, error) in if let error = error { return } // Player is signed in! }
Objective-C
// Get Firebase credentials from the player's Game Center credentials [FIRGameCenterAuthProvider getCredentialWithCompletion:^(FIRAuthCredential *credential, NSError *error) { // The credential can be used to sign in, or re-auth, or link or unlink. if (error == nil) { [[FIRAuth auth] signInWithCredential:credential completion:^(FIRUser *user, NSError *error) { // If error is nil, player is signed in. }]; } }];
השלבים הבאים
אחרי שמשתמש נכנס לחשבון בפעם הראשונה, נוצר חשבון משתמש חדש שמקושר למזהה שלו ב-Game Center. החשבון החדש הזה מאוחסן כחלק מפרויקט Firebase, וניתן להשתמש בו כדי לזהות משתמש בכל האפליקציות בפרויקט.
במשחק, אפשר לקבל את מזהה המשתמש ב-Firebase מהאובייקט User
:
Swift
let user = Auth.auth().currentUser if let user = user { let playerName = user.displayName // The user's ID, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, // if you have one. Use getToken(with:) instead. let uid = user.uid }
Objective-C
FIRUser *user = [FIRAuth auth].currentUser; if (user) { NSString *playerName = user.displayName; // The user's ID, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, // if you have one. Use getTokenWithCompletion:completion: instead. NSString *uid = user.uid; }
במסגרת כללי האבטחה של Firebase Realtime Database ושל Cloud Storage, אפשר לקבל את מזהה המשתמש הייחודי של המשתמש שנכנס לחשבון מהמשתנה auth
, ולהשתמש בו כדי לקבוע לאילו נתונים למשתמש תהיה גישה.
כדי לקבל את פרטי המשתמש ב-Game Center או כדי לגשת לשירותי Game Center, צריך להשתמש בממשקי ה-API שסופקו על ידי Game Kit.
כדי להוציא משתמש מ-Firebase, צריך לבצע קריאה ל-Auth.signOut()
:
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print ("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }