אפשר להשתמש בשירותי 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.2.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.2.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.0.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.2.0") }
הגדרת פרויקט Firebase
מגדירים את טביעת האצבע SHA-1 של המשחק דרך הדף הגדרות במסוף Firebase.
אפשר להשתמש בגרד הפקודה
signingReport
:./gradlew signingReport
הפעלת Google Play Games כספק הכניסה:
מאתרים את מזהה הלקוח בשרת האינטרנט ואת סוד הלקוח של הפרויקט. באינטרנט מזהה הלקוח של השרת מזהה את פרויקט Firebase שלכם ל-Google Play שרתי אימות.
כדי למצוא את הערכים האלה:
- פותחים את פרויקט Firebase בדף פרטי הכניסה של מסוף Google APIs.
- בקטע OAuth 2.0 client ID (מזהי לקוח של OAuth 2.0), פותחים את הקטע Web client (auto Client) נוצר על ידי שירות Google). בדף זה מופיעה רשימה של האתרים ואת הסוד ואת המזהה של הלקוח בשרת.
לאחר מכן, במסוף Firebase, פותחים את הקטע אימות.
בכרטיסייה שיטת כניסה, מפעילים את פרטי הכניסה ל-Play Games ספק. תצטרכו לציין את מספר הלקוח ואת סוד הלקוח של שרת האינטרנט של הפרויקט, שקיבלתם במסוף ה-API.
הגדרת Play Games services עם פרטי האפליקציה מ-Firebase
במסוף Google Play, פותחים את אפליקציית Google Play או יוצרים אפליקציה חדשה.
בקטע צמיחה, לוחצים על Play Games services > הגדרה וניהול > הגדרה.
לוחצים על כן, המשחק שלי כבר משתמש ב-Google APIs ובוחרים את Firebase בפרויקט מהרשימה ואז לוחצים על Use.
בדף ההגדרות האישיות של Play Games services, לוחצים על Add Credential (הוספת פרטי כניסה)
- בוחרים בסוג שרת המשחקים.
- בשדה לקוח OAuth, בוחרים את מזהה לקוח האינטרנט של הפרויקט. להיות זהו אותו מזהה לקוח שציינתם כשהפעלתם את כניסה של Play Games.
- שומרים את השינויים.
בדף ההגדרה של Play Games services, לוחצים שוב על Add Credential.
- בוחרים את הסוג Android.
- בשדה לקוח OAuth, בוחרים את מזהה הלקוח של Android של הפרויקט. (אם לא רואים את מזהה הלקוח של Android, צריך להגדיר את שם המשתמש טביעת אצבע מסוג SHA-1 במסוף Firebase).
- שומרים את השינויים.
בדף בודקים, מוסיפים את כתובות האימייל של המשתמשים שצריכים את המידע להיות מסוגלים להיכנס למשחק שלכם לפני הפרסום שלו Play Store.
שילוב הכניסה ל-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();
עליך להעביר את מזהה הלקוח של שרת האינטרנט ל-method 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, ואפשר להשתמש בו כדי לזהות משתמש בכל האפליקציות פרויקט.
במשחק שלך אפשר לקבל את ה-UID של המשתמש ב-Firebase דרך FirebaseUser
object:
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 Games או כדי לגשת לשירותי Play Games: להשתמש בממשקי ה-API שסופקו על ידי Google Play Games SDK.
כדי לצאת ממשתמש, צריך להתקשר אל FirebaseAuth.signOut()
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();