אימות באמצעות מרכז המשחקים

אתה יכול להשתמש ב-Game Center כדי להכניס שחקנים למשחק פלטפורמות של Apple שנבנה על Firebase. כדי להשתמש בכניסה ל-Game Center עם Firebase, תחילה ודא שהשחקן המקומי מחובר ל-Game Center, ולאחר מכן השתמש באובייקט GameCenterAuthProvider כדי ליצור אישור Firebase, שבו תוכל להשתמש כדי לאמת עם Firebase.

לפני שאתה מתחיל

השתמש ב- Swift Package Manager כדי להתקין ולנהל תלות ב-Firebase.

  1. ב-Xcode, כשפרויקט האפליקציה שלך פתוח, נווט אל קובץ > הוסף חבילות .
  2. כשתתבקש, הוסף את מאגר Firebase Apple platforms SDK:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. בחר את ספריית האימות של Firebase.
  5. הוסף את הדגל -ObjC לקטע Other Linker Flags של הגדרות הבנייה של היעד שלך.
  6. בסיום, Xcode יתחיל באופן אוטומטי לפתור ולהוריד את התלות שלך ברקע.

לאחר מכן, בצע כמה שלבי תצורה:

  1. ודא שאתה רושם את אפליקציית Apple שלך ​​ב-Firebase. משמעות הדבר היא הזנת מזהה החבילה של האפליקציה שלך בקטע ההרשמה יחד עם מידע אופציונלי נוסף כגון App Store ID ומזהה צוות וכו'. הדבר יידרש לאימות מאובטחת הקהל של אישורי Game Center של המשתמש לפני השלמת הכניסה.
  2. הפעל את מרכז המשחקים כספק כניסה לפרויקט Firebase שלך:
    1. במסוף Firebase , פתח את הקטע אימות .
    2. בכרטיסייה שיטת כניסה , הפעל את ספק הכניסה ל- Game Center .

שלב כניסה למשחק מרכז במשחק שלך

ראשית, אם המשחק שלך עדיין לא משתמש ב-Game Center, עקוב אחר ההוראות בשילוב מרכז המשחקים במשחק שלך ואימות נגן מקומי במכשיר באתר המפתחים של אפל.

ודא שמזהה החבילה שאתה מספק ל-iTunes Connect תואם למזהה החבילה שבו השתמשת כשחיברת את האפליקציה שלך לפרויקט Firebase שלך.

כחלק מהשילוב שלך עם Game Center, אתה מגדיר מטפל אימות הנקרא במספר נקודות בתהליך האימות של Game Center. במטפל זה, בדוק אם השחקן מחובר ל-Game Center. אם כן, תוכל להמשיך להיכנס ל-Firebase.

מָהִיר

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:) :

מָהִיר

// 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 ID שלו. החשבון החדש הזה מאוחסן כחלק מפרויקט Firebase שלך, וניתן להשתמש בו כדי לזהות משתמש בכל אפליקציה בפרויקט שלך.

במשחק שלך, אתה יכול לקבל את ה-Firebase UID של המשתמש מאובייקט User :

מָהִיר

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 וב-Cloud Storage, תוכל לקבל את מזהה המשתמש הייחודי של המשתמש המחובר ממשתנה auth , ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.

כדי לקבל מידע על נגן Game Center של משתמש או כדי לגשת לשירותי Game Center, השתמש בממשקי ה-API שמסופקים על ידי Game Kit .

כדי להוציא משתמש מ-Firebase, התקשר ל- Auth.signOut() :

מָהִיר

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;
}