אימות באמצעות שירותי המשחקים של Google Play ב-Android

אתה יכול להשתמש בשירותי Google Play Games כדי להכניס שחקנים למשחק אנדרואיד שנבנה ב-Firebase. כדי להשתמש בשירותי Google Play Games היכנס עם Firebase, תחילה היכנס לנגן באמצעות Google Play Games, ובקש קוד אישור OAuth 2.0 כאשר תעשה זאת. לאחר מכן, העבר את קוד האימות ל- PlayGamesAuthProvider כדי ליצור אישור Firebase, שבו תוכל להשתמש כדי לאמת עם Firebase.

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

הגדר את פרויקט האנדרואיד שלך

  1. אם עדיין לא עשית זאת, הוסף את Firebase לפרויקט Android שלך .

  2. בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל <project>/<app-module>/build.gradle.kts או <project>/<app-module>/build.gradle ), הוסף את התלות עבור אימות Firebase ספרייה עבור אנדרואיד. אנו ממליצים להשתמש ב- Firebase Android BoM כדי לשלוט בגירסאות של הספרייה.

    כמו כן, כחלק מהגדרת אימות Firebase, עליך להוסיף את ה-SDK של שירותי Google Play לאפליקציה שלך.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:32.8.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.0.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.3.1")
    // Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.0.0")
    }
    מחפש מודול ספרייה ספציפי לקוטלין? החל מאוקטובר 2023 (Firebase BoM 32.5.0) , מפתחי Kotlin ו-Java יכולים להיות תלויים במודול הספרייה הראשי (לפרטים, עיין בשאלות הנפוצות לגבי יוזמה זו ).

הגדר את פרויקט Firebase שלך

  1. הגדר את טביעת האצבע SHA-1 של המשחק שלך מדף ההגדרות של קונסולת Firebase.

    אתה יכול לקבל את ה-SHA hash של תעודת החתימה שלך עם הפקודה gradle signingReport :

    ./gradlew signingReport

  2. הפעל את Google Play Games כספק כניסה:

    1. מצא את מזהה הלקוח של שרת האינטרנט של הפרויקט ואת סוד הלקוח. מזהה הלקוח של שרת האינטרנט מזהה את פרויקט Firebase שלך ​​לשרתי האימות של Google Play.

      כדי למצוא את הערכים האלה:

      1. פתח את פרויקט Firebase שלך ​​בדף האישורים של מסוף Google APIs .
      2. בקטע מזהי לקוח OAuth 2.0 , פתח את דף הפרטים של לקוח האינטרנט (נוצר אוטומטית על ידי שירות Google) . דף זה מפרט את מזהה הלקוח והסוד של שרת האינטרנט שלך.
    2. לאחר מכן, במסוף Firebase , פתח את הקטע אימות .

    3. בכרטיסייה שיטת כניסה , הפעל את ספק הכניסה ל- Play Games . יהיה עליך לציין את מזהה הלקוח של שרת האינטרנט של הפרויקט שלך ואת סוד הלקוח, שקיבלת ממסוף ממשקי ה-API.

הגדר את שירותי Play Games עם פרטי אפליקציית Firebase שלך

  1. ב- Google Play Console , פתח את אפליקציית Google Play שלך או צור אחת.

  2. בקטע 'גדל' , לחץ על שירותי הפעלה של משחקים > הגדרה וניהול > תצורה .

  3. לחץ על כן, המשחק שלי כבר משתמש בממשקי API של Google , בחר בפרויקט Firebase שלך ​​מהרשימה ולאחר מכן לחץ על השתמש .

  4. בדף התצורה של שירותי Play Games, לחץ על הוסף פרטי כניסה .

    1. בחר את סוג שרת המשחק .
    2. בשדה לקוח OAuth , בחר את מזהה לקוח האינטרנט של הפרויקט שלך. ודא שזהו אותו מזהה לקוח שציינת כשהפעלת את הכניסה ל-Play משחקים.
    3. שמור את השינויים שלך.
  5. עדיין בדף התצורה של שירותי Play Games, לחץ שוב על הוסף פרטי כניסה .

    1. בחר את סוג האנדרואיד .
    2. בשדה לקוח OAuth , בחר את מזהה לקוח Android של הפרויקט שלך. (אם אינך רואה את מזהה לקוח Android שלך, הקפד להגדיר את טביעת האצבע SHA-1 של המשחק שלך בקונסולת Firebase.)
    3. שמור את השינויים שלך.
  6. בדף הבודקים , הוסף את כתובות האימייל של המשתמשים שצריכים להיות מסוגלים להיכנס למשחק שלך לפני שתשחרר אותו בחנות 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.

  1. ראשית, בשיטת 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();
  1. בעת אתחול הפעילות שלך, בדוק אם הנגן כבר מחובר עם 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.
  1. לאחר ששחקן נכנס ל-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();