אתה יכול להשתמש בשירותי Google Play Games כדי להכניס שחקנים למשחק אנדרואיד שנבנה ב-Firebase. כדי להשתמש בשירותי Google Play Games היכנס עם Firebase, תחילה היכנס לנגן באמצעות Google Play Games, ובקש קוד אישור OAuth 2.0 כאשר תעשה זאת. לאחר מכן, העבר את קוד האימות ל- PlayGamesAuthProvider
כדי ליצור אישור Firebase, שבו תוכל להשתמש כדי לאמת עם Firebase.
לפני שאתה מתחיל
הגדר את פרויקט האנדרואיד שלך
אם עדיין לא עשית זאת, הוסף את Firebase לפרויקט Android שלך .
בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל
<project>/<app-module>/build.gradle.kts
או<project>/<app-module>/build.gradle
), הוסף את התלות עבור אימות Firebase ספריית אנדרואיד. אנו ממליצים להשתמש ב- Firebase Android BoM כדי לשלוט בגירסאות של הספרייה.כמו כן, כחלק מהגדרת אימות Firebase, עליך להוסיף את ה-SDK של שירותי Google Play לאפליקציה שלך.
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // 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-ktx")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:20.7.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-ktx:22.1.2")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:20.7.0") }Java
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // 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:20.7.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:22.1.2")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:20.7.0") }
הגדר את פרויקט Firebase שלך
הגדר את טביעת האצבע SHA-1 של המשחק שלך מדף ההגדרות של קונסולת Firebase.
אתה יכול לקבל את ה-Hash SHA של תעודת החתימה שלך עם הפקודה gradle
signingReport
:./gradlew signingReport
הפעל את Google Play Games כספק כניסה:
מצא את מזהה הלקוח של שרת האינטרנט של הפרויקט ואת סוד הלקוח. מזהה הלקוח של שרת האינטרנט מזהה את פרויקט Firebase שלך לשרתי האימות של Google Play.
כדי למצוא את הערכים האלה:
- פתח את פרויקט Firebase שלך בדף האישורים של מסוף Google APIs .
- בקטע מזהי לקוח OAuth 2.0 , פתח את דף הפרטים של לקוח האינטרנט (נוצר אוטומטית על ידי שירות Google) . דף זה מפרט את מזהה הלקוח והסוד של שרת האינטרנט שלך.
לאחר מכן, במסוף Firebase , פתח את הקטע אימות .
בכרטיסייה שיטת כניסה , הפעל את ספק הכניסה ל- Play Games . יהיה עליך לציין את מזהה הלקוח של שרת האינטרנט של הפרויקט שלך ואת סוד הלקוח, שקיבלת ממסוף ממשקי ה-API.
הגדר את שירותי Play Games עם פרטי אפליקציית Firebase שלך
ב- Google Play Console , פתח את אפליקציית Google Play שלך או צור אחת.
בקטע 'גדל' , לחץ על שירותי הפעלה של משחקים > הגדרה וניהול > תצורה .
לחץ על כן, המשחק שלי כבר משתמש בממשקי API של Google , בחר בפרויקט Firebase שלך מהרשימה ולאחר מכן לחץ על השתמש .
בדף התצורה של שירותי Play Games, לחץ על הוסף פרטי כניסה .
- בחר את סוג שרת המשחק .
- בשדה לקוח OAuth , בחר את מזהה לקוח האינטרנט של הפרויקט שלך. ודא שזהו אותו מזהה לקוח שציינת כשהפעלת את הכניסה ל-Play משחקים.
- שמור את השינויים שלך.
עדיין בדף התצורה של שירותי Play Games, לחץ שוב על הוסף פרטי כניסה .
- בחר את סוג האנדרואיד .
- בשדה לקוח OAuth , בחר את מזהה לקוח Android של הפרויקט שלך. (אם אינך רואה את מזהה לקוח Android שלך, הקפד להגדיר את טביעת האצבע SHA-1 של המשחק שלך בקונסולת Firebase.)
- שמור את השינויים שלך.
בדף הבודקים , הוסף את כתובות האימייל של המשתמשים שצריכים להיות מסוגלים להיכנס למשחק שלך לפני שתשחרר אותו בחנות Play.
שלב את הכניסה של Play Games לתוך המשחק שלך
ראשית, שלב את הכניסה של Play Games באפליקציה שלך. ראה כניסה למשחקי Android לקבלת הוראות מלאות.
בשילוב שלך, כאשר אתה בונה את האובייקט GoogleSignInOptions
, השתמש בתצורה DEFAULT_GAMES_SIGN_IN
והתקשר requestServerAuthCode
:
Kotlin+KTX
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+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- בעת אתחול הפעילות שלך, בדוק אם הנגן כבר מחובר עם Firebase:
Kotlin+KTX
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+KTX
// 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 UID של המשתמש מהאובייקט FirebaseUser
:
Kotlin+KTX
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 וב-Cloud Storage, תוכל לקבל את מזהה המשתמש הייחודי של המשתמש המחובר ממשתנה auth
, ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.
כדי לקבל מידע על נגן Play משחקים של משתמש או כדי לגשת לשירותי Play משחקים, השתמש בממשקי ה-API שסופקו על ידי Google Play Games SDK .
כדי לצאת ממשתמש, התקשר ל- FirebaseAuth.signOut()
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();