אתם יכולים להשתמש בשירותי Google Play Games כדי לאפשר לשחקנים להתחבר למשחק ל-Android שנבנה על Firebase. כדי להשתמש בכניסה לשירותי Google Play Games באמצעות Firebase, קודם צריך להכניס את השחקן באמצעות Google Play Games ולבקש קוד אימות מסוג OAuth 2.0. לאחר מכן, מעבירים את קוד האימות אל PlayGamesAuthProvider
כדי ליצור פרטי כניסה ל-Firebase, שבהם אפשר להשתמש כדי לבצע אימות באמצעות Firebase.
לפני שמתחילים
הגדרת הפרויקט ל-Android
אם עדיין לא עשיתם זאת, מוסיפים את Firebase לפרויקט Android.
בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל
<project>/<app-module>/build.gradle.kts
או<project>/<app-module>/build.gradle
), מוסיפים את התלות בספרייה Firebase Authentication ל-Android. מומלץ להשתמש ב-Firebase Android BoM כדי לשלוט בגרסאות הספרייה.בנוסף, כחלק מהגדרת Firebase Authentication, צריך להוסיף לאפליקציה את ה-SDK של Google Play Services.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.7.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.3.0") }כשמשתמשים ב-Firebase Android BoM, האפליקציה תמיד תשתמש בגרסאות תואמות של ספריות Firebase ל-Android.
(חלופה) מוסיפים יחסי תלות לספריות של Firebase בלי להשתמש ב-BoM
אם בוחרים לא להשתמש ב-Firebase BoM, צריך לציין את כל הגרסאות של ספריות Firebase בשורת התלות שלהן.
שימו לב: אם אתם משתמשים במספר ספריות של Firebase באפליקציה, מומלץ מאוד להשתמש ב-BoM כדי לנהל את הגרסאות של הספריות, וכך לוודא שכל הגרסאות תואמות.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:23.1.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.3.0") }
הגדרת פרויקט Firebase
מגדירים את טביעת האצבע של המשחק ב-SHA-1 בדף Settings במסוף Firebase.
אפשר לקבל את גיבוב ה-SHA של אישור החתימה באמצעות הפקודה
signingReport
של gradle:./gradlew signingReport
מפעילים את Google Play Games כספק כניסה:
מחפשים את מזהה הלקוח ואת סוד הלקוח של שרת האינטרנט של הפרויקט. מזהה הלקוח של שרת האינטרנט מזהה את פרויקט Firebase שלכם בשרתי האימות של Google Play.
כדי למצוא את הערכים האלה:
- פותחים את פרויקט Firebase בדף פרטי הכניסה ב-מסוף Google APIs.
- בקטע מזהי לקוחות OAuth 2.0, פותחים את דף הפרטים של לקוח אינטרנט (נוצר באופן אוטומטי על ידי שירות Google). בדף הזה מפורטים מזהה הלקוח והסוד של שרת האינטרנט.
לאחר מכן, במסוף Firebase, פותחים את הקטע Authentication.
בכרטיסייה Sign in method, מפעילים את ספק הכניסה Play Games. תצטרכו לציין את מזהה הלקוח ואת סוד הלקוח של שרת האינטרנט של הפרויקט, שקיבלתם מקונסולת ה-API.
הגדרת Play Games services עם פרטי האפליקציה ב-Firebase
במסוף Google Play, פותחים את אפליקציית Google Play או יוצרים אפליקציה חדשה.
בקטע צמיחה, לוחצים על Play Games services > הגדרה וניהול > הגדרה.
לוחצים על כן, המשחק שלי כבר עושה שימוש ב-Google APIs, בוחרים את הפרויקט ב-Firebase מהרשימה ולוחצים על שימוש.
בדף ההגדרה של Play Games services, לוחצים על Add Credential.
- בוחרים את הסוג שרת משחקים.
- בשדה OAuth client, בוחרים את מזהה הלקוח באינטרנט של הפרויקט. חשוב לוודא שזהו אותו מזהה לקוח שציינתם כשהפעלתם את הכניסה באמצעות Play Games.
- שומרים את השינויים.
בדף ההגדרה של Play Games services, לוחצים שוב על Add Credential.
- בוחרים את הסוג Android.
- בשדה OAuth client, בוחרים את מזהה הלקוח ב-Android של הפרויקט. (אם מזהה הלקוח של Android לא מופיע, חשוב לוודא שהגדרתם את טביעת האצבע של SHA-1 של המשחק במסוף Firebase).
- שומרים את השינויים.
בדף Testers, מוסיפים את כתובות האימייל של כל המשתמשים שצריכים להיכנס למשחק לפני שתוציאו אותו ל-Play Store.
שילוב של כניסה ל-Play Games במשחק
קודם כול, צריך לשלב את הכניסה ל-Play Games באפליקציה. ההוראות המלאות מפורטות במאמר כניסה למשחקים ב-Android.
בשילוב, כשיוצרים את האובייקט GoogleSignInOptions
, משתמשים בהגדרה DEFAULT_GAMES_SIGN_IN
ומפעילים את requestServerAuthCode
:
Kotlin
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestServerAuthCode(getString(R.string.default_web_client_id)) .build()
Java
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestServerAuthCode(getString(R.string.default_web_client_id)) .build();
צריך להעביר את מזהה הלקוח של שרת האינטרנט לשיטה requestServerAuthCode
.
זהו המזהה שסיפקתם כשהפעלתם את הכניסה ל-Play Games במסוף Firebase.
אימות באמצעות Firebase
אחרי שמוסיפים לאפליקציה את האפשרות להיכנס באמצעות Play Games, צריך להגדיר את Firebase כך שישתמש בפרטי הכניסה לחשבון Google שמקבלים כששחקן נכנס בהצלחה באמצעות Play Games.
- קודם כול, בשיטה
onCreate
של פעילות הכניסה, מקבלים את המופע המשותף של האובייקטFirebaseAuth
:
Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- כשמפעילים את הפעילות, צריך לבדוק אם השחקן כבר נכנס לחשבון באמצעות Firebase:
Kotlin
override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }
If the player isn't signed in, present the player with your game's
signed-out experience, including the option to sign in.
- אחרי שמשתמש נכנס לחשבון ב-Play Games באופן אוטומטי או באופן אינטראקטיבי, מקבלים את קוד האימות מהאובייקט
GoogleSignInAccount
, מחליפים אותו בפרטי כניסה ל-Firebase ומבצעים אימות ב-Firebase באמצעות פרטי הכניסה ל-Firebase:
Kotlin
// Call this both in the silent sign-in task's OnCompleteListener and in the // Activity's onActivityResult handler. private fun firebaseAuthWithPlayGames(acct: GoogleSignInAccount) { Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.id!!) val auth = Firebase.auth val credential = PlayGamesAuthProvider.getCredential(acct.serverAuthCode!!) auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } // ... } }
Java
// Call this both in the silent sign-in task's OnCompleteListener and in the // Activity's onActivityResult handler. private void firebaseAuthWithPlayGames(GoogleSignInAccount acct) { Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.getId()); final FirebaseAuth auth = FirebaseAuth.getInstance(); AuthCredential credential = PlayGamesAuthProvider.getCredential(acct.getServerAuthCode()); auth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = auth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.getException()); Toast.makeText(MainActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } // ... } }); }
אם הקריאה ל-signInWithCredential
תצליח, תוכלו להשתמש בשיטה getCurrentUser
כדי לקבל את נתוני החשבון של המשתמש.
השלבים הבאים
אחרי שמשתמש נכנס לחשבון בפעם הראשונה, נוצר חשבון משתמש חדש שמקושר למזהה שלו ב-Play Games. החשבון החדש הזה מאוחסן כחלק מפרויקט Firebase, וניתן להשתמש בו כדי לזהות משתמש בכל האפליקציות בפרויקט.
במשחק, אפשר לקבל את מזהה המשתמש ב-Firebase מהאובייקט FirebaseUser
:
Kotlin
val user = auth.currentUser user?.let { val playerName = it.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 FirebaseUser.getIdToken() instead. val uid = it.uid }
Java
FirebaseUser user = mAuth.getCurrentUser(); String playerName = user.getDisplayName(); // 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 FirebaseUser.getIdToken() instead. String uid = user.getUid();
במסגרת כללי האבטחה של Firebase Realtime Database ושל Cloud Storage, אפשר לקבל את מזהה המשתמש הייחודי של המשתמש שנכנס לחשבון מהמשתנה auth
, ולהשתמש בו כדי לקבוע לאילו נתונים למשתמש תהיה גישה.
כדי לקבל את פרטי השחקן של משתמש ב-Play Games או כדי לגשת לשירותי Play Games, צריך להשתמש בממשקי ה-API שסופקו על ידי Google Play Games SDK.
כדי להוציא משתמש, קוראים לפונקציה FirebaseAuth.signOut()
:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();