Uwierzytelniaj za pomocą usług gier Google Play na Androidzie

Możesz używać usług Gier Google Play do logowania graczy w grach na Androida stworzonych w Firebase. Aby korzystać z usług Gier Google Play, gdy zalogujesz się za pomocą Firebase: najpierw zaloguj gracza w Grach Google Play i poproś o uwierzytelnianie OAuth 2.0 w tym przypadku. Następnie przekaż kod autoryzacji aplikacji PlayGamesAuthProvider do wygenerować dane logowania Firebase, których możesz używać do uwierzytelniania w Firebase.

Zanim zaczniesz

Konfigurowanie projektu na Androida

  1. Jeśli jeszcze nie masz tego za sobą, dodaj Firebase do swojego projektu na Androida.

  2. w pliku Gradle (na poziomie aplikacji) modułu, (zwykle <project>/<app-module>/build.gradle.kts lub <project>/<app-module>/build.gradle), dodaj zależność z biblioteką Firebase Authentication na Androida. Zalecamy użycie metody Firebase Android BoM aby kontrolować obsługę wersji biblioteki.

    Podczas konfigurowania usługi Firebase Authentication musisz też dodać do Twojej aplikacji przy użyciu pakietu SDK Usług Google Play.

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

    Korzystając z narzędzia Firebase Android BoM, Twoja aplikacja zawsze używa zgodnych wersji bibliotek Firebase na Androida.

    (Wersja alternatywna) Dodaj zależności biblioteki Firebase bez użycia komponentu BoM

    Jeśli nie chcesz używać biblioteki Firebase BoM, musisz określić każdą wersję biblioteki Firebase w wierszu zależności.

    Pamiętaj, że jeśli używasz wielu bibliotek Firebase w swojej aplikacji, zalecamy korzystanie z BoM do zarządzania wersjami biblioteki. Dzięki temu wszystkie wersje są zgodne.

    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")
    }
    Szukasz modułu biblioteki korzystającego z usługi Kotlin? Zaczyna się za Październik 2023 r. (Firebase BoM 32.5.0) zarówno programiści Kotlin, jak i Java zależą od modułu biblioteki głównej (więcej informacji znajdziesz w Najczęstsze pytania na temat tej inicjatywy).

Skonfiguruj projekt Firebase

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

    Za pomocą Gradle możesz uzyskać hasz SHA Twojego certyfikatu podpisywania Polecenie signingReport:

    ./gradlew signingReport

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

    1. Znajdź identyfikator klienta serwera WWW i tajny klucz klienta projektu. Sieć identyfikator klienta serwera identyfikuje Twój projekt Firebase w Google Play serwerów uwierzytelniania.

      Aby znaleźć te wartości:

      1. Otwórz projekt Firebase na stronie z danymi logowania w konsoli interfejsów API Google.
      2. W sekcji Identyfikatory klienta OAuth 2.0 otwórz pole Klient internetowy (automatycznie utworzony przez usługę Google). Na tej stronie wyświetlana jest lista identyfikator klienta i klucz tajny serwera.
    2. Następnie w konsoli Firebase otwórz sekcję Uwierzytelnianie.

    3. Na karcie Metoda logowania włącz logowanie w Grach Play. dostawcy usług. Musisz podać serwer WWW swojego projektu identyfikator klienta i tajny klucz klienta uzyskane z konsoli interfejsów API.

Skonfiguruj Play Games services, używając informacji z aplikacji Firebase

  1. W Konsola Google Play, otwórz aplikację Google Play lub utwórz aplikację.

  2. W sekcji Rozwój kliknij Play Games services Konfiguracja Zarządzanie > Konfiguracja.

  3. Kliknij Tak, moja gra już używa interfejsów API Google i wybierz Firebase. projekt na liście i kliknij Użyj.

  4. Na stronie konfiguracji Play Games services kliknij Add Credential (Dodaj dane logowania).

    1. Wybierz typ Serwer gry.
    2. W polu Klient OAuth wybierz identyfikator klienta internetowego swojego projektu. Bądź upewnij się, że jest to identyfikator klienta podany podczas włączania opcji Play Games – logowanie.
    3. Zapisz zmiany.
  5. Pozostając na stronie konfiguracji Play Games services, kliknij Ponownie Dodaj dane logowania.

    1. Wybierz typ Androida.
    2. W polu Klient OAuth wybierz identyfikator klienta Androida dla swojego projektu. (Jeśli nie widzisz identyfikatora klienta Androida, upewnij się, że masz ustawiony Odcisk cyfrowy SHA-1 w konsoli Firebase).
    3. Zapisz zmiany.
  6. Na stronie Testerzy dodaj adresy e-mail wszystkich użytkowników, którzy że będziesz mieć możliwość zalogowania się w grze przed opublikowaniem jej Play Store

Integrowanie logowania w Grach Play z grą

Najpierw zintegruj logowanie przez Gry Play ze swoją aplikacją. Zobacz Logowanie się w Grach na Androida .

Podczas tworzenia w integracji obiektu GoogleSignInOptions użyj Konfiguracja DEFAULT_GAMES_SIGN_IN i wywołanie 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();

Do metody requestServerAuthCode należy przekazać identyfikator klienta serwera WWW. To identyfikator podany przez Ciebie przy włączaniu logowania przez Gry Play na stronie Konsola Firebase.

Uwierzytelnij za pomocą Firebase

Po dodaniu do aplikacji logowania przez Gry Play musisz skonfigurować Firebase, aby korzystać z tej usługi dane logowania do konta Google, które otrzymujesz, gdy gracz się zaloguje; w Grach Play.

  1. Najpierw w metodzie onCreate aktywności związanej z logowaniem pobierz współdzielone wystąpienie obiektu 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. Zanim rozpoczniesz aktywność, sprawdź, czy gracz nie jest już zalogowany z 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. Gdy gracz zaloguje się w Grach Play cicho lub interaktywnie: pobierz kod autoryzacji z obiektu GoogleSignInAccount, wymień go dane logowania do Firebase i uwierzytelnienie w Firebase za pomocą tej platformy. dane logowania:

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

                    // ...
                }
            });
}

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

Dalsze kroki

Gdy użytkownik zaloguje się po raz pierwszy, tworzone jest nowe konto użytkownika. powiązane z identyfikatorem Gier Play. To nowe konto jest przechowywane w ramach projektu Firebase i możesz go użyć do identyfikacji użytkownika w każdej aplikacji w projektach AI.

W swojej grze możesz uzyskać identyfikator Firebase UID użytkownika w FirebaseUser obiekt:

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

W Bazie danych czasu rzeczywistego Firebase i Regułach zabezpieczeń Cloud Storage możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i użyj go do kontrolować dostęp użytkownika do danych.

Aby uzyskać informacje o użytkowniku w Grach Play lub uzyskać dostęp do usług Gier Play: korzysta z interfejsów API udostępnionych przez pakiet SDK do gier Google Play.

Aby wylogować użytkownika, zadzwoń pod numer FirebaseAuth.signOut():

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();