Firebase is back at Google I/O on May 10! Register now

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

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Możesz korzystać z usług Gier Google Play, aby logować graczy do gry na Androida opartej na Firebase. Aby korzystać z usług Gier Google Play, zaloguj się przez Firebase, najpierw zaloguj gracza w Grach Google Play, a następnie poproś o kod uwierzytelniający OAuth 2.0. Następnie przekaż kod uwierzytelniający do PlayGamesAuthProvider , aby wygenerować poświadczenie Firebase, którego możesz użyć do uwierzytelnienia 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. W pliku Gradle modułu (na poziomie aplikacji) (zwykle <project>/<app-module>/build.gradle ) dodaj zależność dla biblioteki Firebase Authentication Android. Zalecamy używanie Firebase Android BoM do kontrolowania wersji bibliotek.

    Ponadto w ramach konfigurowania uwierzytelniania Firebase musisz dodać do swojej aplikacji pakiet SDK usług Google Play.

    Kotlin+KTX

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

    Korzystając z Firebase Android BoM , Twoja aplikacja będzie zawsze korzystać ze zgodnych wersji bibliotek Firebase Android.

    (Alternatywnie) Dodaj zależności biblioteki Firebase bez korzystania z BoM

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

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

    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-ktx:21.2.0'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.1'
    }

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.4.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:20.4.1'
    }

    Korzystając z Firebase Android BoM , Twoja aplikacja będzie zawsze korzystać ze zgodnych wersji bibliotek Firebase Android.

    (Alternatywnie) Dodaj zależności biblioteki Firebase bez korzystania z BoM

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

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

    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:21.2.0'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.1'
    }

Skonfiguruj swój projekt Firebase

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

    Możesz uzyskać skrót SHA swojego certyfikatu podpisującego za pomocą polecenia gradle signingReport :

    ./gradlew signingReport

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

    1. Znajdź identyfikator klienta serwera WWW i klucz tajny klienta swojego projektu. Identyfikator klienta serwera WWW identyfikuje Twój projekt Firebase na serwerach uwierzytelniających Google Play.

      Aby znaleźć te wartości:

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

    3. Na karcie Metoda logowania włącz dostawcę logowania w Grach Play . Będziesz musiał podać identyfikator klienta serwera sieciowego swojego projektu i klucz tajny klienta, który uzyskałeś z konsoli interfejsów API.

Skonfiguruj usługi Gier Play, korzystając z informacji o aplikacji Firebase

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

  2. W sekcji Rozwój kliknij Usługi gier Play > Konfiguracja i zarządzanie > Konfiguracja .

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

  4. Na stronie konfiguracji usług Gier Play kliknij Dodaj dane logowania .

    1. Wybierz typ serwera gier .
    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 dane logowania .

    1. Wybierz typ Androida .
    2. W polu Klient OAuth wybierz identyfikator klienta Android swojego 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, zanim opublikujesz ją w Sklepie Play.

Zintegruj logowanie w Grach Play ze swoją grą

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

Podczas integracji, gdy tworzysz obiekt GoogleSignInOptions , użyj konfiguracji DEFAULT_GAMES_SIGN_IN i wywołaj 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();

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

Uwierzytelnij w Firebase

Po dodaniu logowania w Grach Play do swojej aplikacji musisz skonfigurować Firebase do używania danych logowania do konta Google, które otrzymujesz, gdy gracz pomyślnie zaloguje się w Grach Play.

  1. Najpierw w metodzie onCreate aktywności związanej z logowaniem pobierz udostępnioną instancję 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. Podczas inicjowania aktywności sprawdź, czy gracz jest już zalogowany w 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 w trybie cichym lub interaktywnym, pobierz kod autoryzacji z obiektu GoogleSignInAccount , wymień go na dane logowania Firebase i uwierzytelnij się w Firebase przy użyciu danych logowania 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);
                    }

                    // ...
                }
            });
}

Jeśli wywołanie funkcji 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, tworzone jest nowe konto użytkownika, które jest powiązane z jego identyfikatorem Gier Play. To nowe konto jest przechowywane jako część Twojego projektu Firebase i może służyć do identyfikacji użytkownika w każdej aplikacji w Twoim projekcie.

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

W Regułach bezpieczeństwa Firebase Realtime Database i Cloud Storage możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.

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

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

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();