אפשר להשתמש במרכז המשחקים כדי להכניס שחקנים למשחק בפלטפורמות של Apple שמבוסס על Firebase. שפת תרגום
נכנסים ל-Game Center באמצעות Firebase, קודם צריך לוודא שהשחקן המקומי
נכנסים לחשבון במרכז המשחקים, ואז משתמשים באובייקט GameCenterAuthProvider
כדי
ליצור פרטי כניסה ל-Firebase, ולהשתמש בהם כדי לבצע אימות ב-Firebase.
לפני שמתחילים
שימוש ב-Swift Package Manager כדי להתקין ולנהל יחסי תלות ב-Firebase.
- ב-Xcode, כשפרויקט האפליקציה פתוח, עוברים אל File > (קובץ >) הוספת חבילות.
- כשמופיעה בקשה, מוסיפים את מאגר ה-SDK של מוצרי הפלטפורמה של Firebase של 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.
- בכרטיסייה שיטת כניסה, מפעילים את מרכז המשחקים ספק הכניסה.
שילוב הכניסה למרכז המשחקים במשחק
קודם כול, אם המשחק שלכם עדיין לא משתמש ב-Game Center, פועלים לפי ההוראות במאמרים שילוב Game Center במשחק ואימות שחקן מקומי במכשיר באתר למפתחים של Apple.
עליך לוודא שמזהה החבילה שסיפקת ל-iTunes Connect תואם למזהה החבילה ש ששימשו כשחיברתם את האפליקציה לפרויקט Firebase.
כחלק מהשילוב של מרכז המשחקים, מגדירים handler של אימות שנקרא במספר נקודות בתהליך האימות של אוסף המשחקים. לחשבון ה-handler הזה, צריך לבדוק אם השחקן מחובר באמצעות מרכז המשחקים. אם כן, תוכלו להמשיך להיכנס ל-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
אחרי שמוודאים שהשחקן המקומי נכנס באמצעות מרכז המשחקים,
נכנסים לחשבון של השחקן במשחק על ידי יצירת אובייקט 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, וניתן להשתמש בו כדי לזהות משתמש בכל האפליקציות בפרויקט.
במשחק, אפשר לקבל את ה-UID של המשתמש ב-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; }