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

Uwierzytelnij się za pomocą usług gier Google Play na Androida

Za pomocą usług Gier Google Play możesz logować graczy do gry na Androida opartej na Firebase. Aby korzystać z logowania do usług Gier Google Play za pomocą Firebase, najpierw zaloguj się odtwarzacza za pomocą Gier Google Play i poproś o kod uwierzytelniania OAuth 2.0, gdy to zrobisz. Następnie przekaż kod uwierzytelniający do PlayGamesAuthProvider , aby wygenerować dane logowania Firebase, których możesz użyć do uwierzytelniania w Firebase.

Zanim zaczniesz

Skonfiguruj swój projekt na Androida

  1. Jeśli jeszcze tego nie zrobiłeś, dodaj Firebase do swojego projektu na Androida .

  2. Za pomocą Firebase Android BoM zadeklaruj zależność dla biblioteki Firebase Authentication Android w pliku Gradle modułu (na poziomie aplikacji) (zwykle app/build.gradle ).

    Ponadto w ramach konfigurowania Uwierzytelniania Firebase musisz dodać do swojej aplikacji pakiet SDK usług 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'
    }

    Korzystając z Firebase Android BoM , Twoja aplikacja będzie zawsze używać zgodnych wersji bibliotek Firebase Android.

    (Alternatywnie) Zadeklaruj zależności biblioteki Firebase bez użycia BoM

    Jeśli zdecydujesz się nie używać zestawienia komponentów Firebase, musisz określić każdą wersję biblioteki Firebase w jej wierszu zależności.

    Pamiętaj, że jeśli korzystasz z wielu bibliotek Firebase w swojej aplikacji, zdecydowanie zalecamy używanie BoM do zarządzania wersjami bibliotek, co zapewnia zgodność wszystkich wersji.

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

    Korzystając z Firebase Android BoM , Twoja aplikacja będzie zawsze używać zgodnych wersji bibliotek Firebase Android.

    (Alternatywnie) Zadeklaruj zależności biblioteki Firebase bez użycia BoM

    Jeśli zdecydujesz się nie używać zestawienia komponentów Firebase, musisz określić każdą wersję biblioteki Firebase w jej wierszu zależności.

    Pamiętaj, że jeśli korzystasz z wielu bibliotek Firebase w swojej aplikacji, zdecydowanie zalecamy używanie BoM do zarządzania wersjami bibliotek, co zapewnia zgodność wszystkich wersji.

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

Skonfiguruj projekt Firebase

  1. Ustaw odcisk cyfrowy SHA-1 swojej gry na stronie Ustawienia konsoli Firebase.

    Skrót SHA certyfikatu podpisującego można uzyskać za pomocą polecenia gradle signingReport :

    ./gradlew signingReport

  2. Włącz Gry Google Play jako dostawcę logowania:

    1. Znajdź identyfikator klienta serwera WWW i tajny klucz klienta. Identyfikator klienta serwera WWW identyfikuje Twój projekt Firebase na serwerach uwierzytelniania Google Play.

      Aby znaleźć te wartości:

      1. Otwórz projekt Firebase na stronie danych logowania konsoli interfejsów API Google .
      2. W sekcji Identyfikatory klientów OAuth 2.0 otwórz stronę szczegółów klienta internetowego (utworzonego automatycznie przez usługę Google) . Na tej stronie znajduje się twój identyfikator klienta serwera WWW i klucz tajny.
    2. Następnie w konsoli Firebase otwórz sekcję Uwierzytelnianie .

    3. Na karcie Metoda logowania włącz dostawcę logowania do Gier Play . Musisz określić identyfikator klienta serwera WWW swojego projektu i klucz tajny klienta, które uzyskałeś z konsoli interfejsów API.

Skonfiguruj usługi Gier Play przy użyciu informacji o aplikacji Firebase

  1. W Konsoli Google Play otwórz aplikację Google Play lub ją utwórz.

  2. W sekcji Rozwijaj się kliknij Usługi gier Play > Konfiguracja i zarządzanie > Konfiguracja .

  3. Kliknij Tak, moja gra korzysta już z interfejsów Google API , wybierz swój projekt Firebase z listy, a następnie kliknij Użyj .

  4. Na stronie konfiguracji usług Gier Play kliknij Dodaj poświadczenia .

    1. Wybierz typ serwera gry .
    2. W polu Klient OAuth wybierz identyfikator klienta internetowego projektu. Upewnij się, że jest to ten sam identyfikator klienta, który podałeś podczas włączania logowania w Grach Play.
    3. Zapisz zmiany.
  5. Nadal na stronie konfiguracji usług Gier Play ponownie kliknij Dodaj poświadczenia .

    1. Wybierz typ Androida .
    2. W polu Klient OAuth wybierz identyfikator klienta Android projektu. (Jeśli nie widzisz swojego identyfikatora klienta Androida, upewnij się, że ustawiłeś odcisk palca SHA-1 gry w konsoli Firebase).
    3. Zapisz zmiany.
  6. Na stronie Testerzy dodaj adresy e-mail wszystkich użytkowników, którzy muszą mieć możliwość zalogowania się do Twojej gry przed opublikowaniem jej w Sklepie Play.

Zintegruj logowanie do Gier Play ze swoją grą

Najpierw zintegruj logowanie w Grach Play ze swoją aplikacją. Zobacz Logowanie do gier na Androida, aby uzyskać pełne instrukcje.

W swojej integracji podczas tworzenia obiektu GoogleSignInOptions użyj konfiguracji DEFAULT_GAMES_SIGN_IN i wywołaj 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()

Musisz przekazać swój identyfikator klienta serwera WWW do metody requestServerAuthCode . Jest to identyfikator podany przez Ciebie podczas włączania logowania w Grach Play w konsoli Firebase.

Uwierzytelnij się w Firebase

Gdy dodasz logowanie w Grach Play do swojej aplikacji, musisz skonfigurować Firebase tak, by używało danych logowania do konta Google, które otrzymujesz, gdy gracz pomyślnie zaloguje się w Grach Play.

  1. Najpierw w metodzie onCreate aktywności logowania uzyskaj udostępnioną instancję obiektu 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. Podczas inicjowania aktywności sprawdź, czy gracz jest już zalogowany w 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. Gdy gracz zaloguje się w Grach Play w trybie cichym lub interaktywnym, pobierz kod uwierzytelniający z obiektu GoogleSignInAccount , wymień go na poświadczenia Firebase i uwierzytelnij się w Firebase przy użyciu poświadczeń 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)
                }

                // ...
            }
}

Jeśli wywołanie signInWithCredential powiedzie się, możesz użyć metody getCurrentUser , aby uzyskać dane konta użytkownika.

Następne kroki

Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i powiązane z jego identyfikatorem Gier Play. To nowe konto jest przechowywane jako część projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie.

W swojej grze możesz uzyskać identyfikator użytkownika Firebase z obiektu 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
}

W regułach bezpieczeństwa bazy danych czasu rzeczywistego i usługi Cloud Storage Firebase możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i używać go do kontrolowania, do jakich danych użytkownik może uzyskać dostęp.

Aby uzyskać informacje o odtwarzaczu Gier Play użytkownika lub uzyskać dostęp do usług Gier Play, użyj interfejsów API udostępnianych przez pakiet SDK Gier Google Play .

Aby wylogować użytkownika, wywołaj FirebaseAuth.signOut() :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()