Check out what’s new from Firebase at Google I/O 2022. Learn more

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

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

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

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

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

  2. באמצעות Firebase Android BoM , הכריז על התלות של ספריית Firebase Authentication Android בקובץ Gradle של המודול שלך (ברמת האפליקציה) (בדרך כלל app/build.gradle ).

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

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.1.0')
    
        // Declare 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 declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.2.0'
    }

    באמצעות Firebase Android BoM , האפליקציה שלך תמיד תשתמש בגרסאות תואמות של ספריות Firebase Android.

    (אלטרנטיבי) הכרזה על תלות בספריית Firebase מבלי להשתמש ב-BoM

    אם תבחר לא להשתמש ב-Firebase BoM, עליך לציין כל גרסת ספריית Firebase בשורת התלות שלה.

    שים לב שאם אתה משתמש במספר ספריות Firebase באפליקציה שלך, אנו ממליצים מאוד להשתמש ב-BoM לניהול גרסאות ספרייה, מה שמבטיח שכל הגרסאות תואמות.

    dependencies {
        // Declare 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:21.0.5'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.2.0'
    }

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.1.0')
    
        // Declare 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 declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.2.0'
    }

    באמצעות Firebase Android BoM , האפליקציה שלך תמיד תשתמש בגרסאות תואמות של ספריות Firebase Android.

    (אלטרנטיבי) הכרזה על תלות בספריית Firebase מבלי להשתמש ב-BoM

    אם תבחר לא להשתמש ב-Firebase BoM, עליך לציין כל גרסת ספריית Firebase בשורת התלות שלה.

    שים לב שאם אתה משתמש במספר ספריות Firebase באפליקציה שלך, אנו ממליצים מאוד להשתמש ב-BoM לניהול גרסאות ספרייה, מה שמבטיח שכל הגרסאות תואמות.

    dependencies {
        // Declare 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:21.0.5'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.2.0'
    }

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

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

    אתה יכול לקבל את ה-Hash SHA של תעודת החתימה שלך עם הפקודה 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 :

Java

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build();

Kotlin+KTX

val gso = 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 :

Java

private FirebaseAuth mAuth;
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();

Kotlin+KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth
  1. בעת אתחול הפעילות שלך, בדוק אם הנגן כבר מחובר עם Firebase:

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

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

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

                    // ...
                }
            });
}

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

                // ...
            }
}

אם הקריאה ל- signInWithCredential מצליחה, תוכל להשתמש בשיטת getCurrentUser כדי לקבל את נתוני החשבון של המשתמש.

הצעדים הבאים

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

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

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();

Kotlin+KTX

val user = auth.currentUser
user?.let {
    val 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 FirebaseUser.getIdToken() instead.
    val uid = user.uid
}

בכללי האבטחה שלך במסד הנתונים בזמן אמת של Firebase וב-Cloud Storage, תוכל לקבל את מזהה המשתמש הייחודי של המשתמש auth ממשתנה האימות, ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.

כדי לקבל מידע על נגן Play משחקים של משתמש או כדי לגשת לשירותי Play משחקים, השתמש בממשקי ה-API שסופקו על ידי Google Play Games SDK .

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

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()