Usług gier Google Play możesz używać do logowania graczy w grze na Androida utworzonej w Firebase. Aby korzystać z logowania w usługach gier Google Play za pomocą Firebase, najpierw zaloguj gracza w usługach gier Google Play i poproś o kod uwierzytelniający OAuth 2.0. Następnie prześlij kod uwierzytelniający do PlayGamesAuthProvider
, aby wygenerować dane logowania Firebase, których możesz użyć do uwierzytelnienia w Firebase.
Zanim zaczniesz
Konfigurowanie projektu na Androida
Jeśli jeszcze tego nie zrobiono, dodaj Firebase do projektu na Androida.
W pliku Gradle modułu (na poziomie aplikacji) (zwykle
<project>/<app-module>/build.gradle.kts
lub<project>/<app-module>/build.gradle
) dodaj zależność z biblioteką Firebase Authentication na Androida. Zalecamy używanie Firebase Android BoM do kontrolowania wersji biblioteki.W ramach konfigurowania Firebase Authentication musisz też dodać do aplikacji pakiet SDK usług Google Play.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.7.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.3.0") }Gdy korzystasz z Firebase Android BoM, aplikacja zawsze używa zgodnych wersji bibliotek Firebase na Androida.
(Alternatywnie) Dodaj zależności biblioteki Firebase bez używania pakietu BoM
Jeśli zdecydujesz się nie używać Firebase BoM, musisz podać każdą wersję biblioteki Firebase w jej wierszu zależności.
Jeśli w aplikacji używasz kilku bibliotek Firebase, zdecydowanie zalecamy korzystanie z BoM do zarządzania wersjami bibliotek. Dzięki temu wszystkie wersje będą ze sobą 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.1.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.3.0") }
Konfigurowanie projektu Firebase
Skonfiguruj odcisk cyfrowy SHA-1 gry na stronie Ustawienia konsoli Firebase.
Hasz SHA certyfikatu podpisywania możesz uzyskać za pomocą polecenia gradle
signingReport
:./gradlew signingReport
Włącz Gry Play jako dostawcę logowania:
Znajdź identyfikator klienta i tajny klucz klienta serwera WWW projektu. Identyfikator klienta serwera internetowego identyfikuje Twój projekt Firebase na serwerach Google Play Auth.
Aby znaleźć te wartości:
- Otwórz projekt Firebase na stronie z danymi logowania w Konsoli interfejsów API Google.
- 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 tajny klucz klienta serwera WWW.
Następnie w konsoli Firebase otwórz sekcję Uwierzytelnianie.
Na karcie Metoda logowania włącz logowanie za pomocą Gier Play. Musisz podać identyfikator klienta serwera WWW i tajny klucz klienta, które uzyskasz w Konsoli interfejsów API.
Konfigurowanie Play Games services za pomocą informacji o aplikacji Firebase
W konsoli Google Play otwórz aplikację Google Play lub utwórz nową.
W sekcji Rozwój kliknij Play Games services > Konfiguracja i zarządzanie > Konfiguracja.
Kliknij Tak, w swojej grze używam już interfejsów API Google, wybierz z listy projekt Firebase, a następnie kliknij Użyj.
Na stronie konfiguracji Play Games services kliknij Dodaj dane logowania.
- Wybierz typ Serwer gier.
- W polu Klient OAuth wybierz identyfikator klienta usługi internetowej swojego projektu. Upewnij się, że jest to ten sam identyfikator klienta, który został podany podczas włączania logowania Play Games.
- Zapisz zmiany.
Na stronie konfiguracji Play Games services kliknij ponownie Dodaj dane logowania.
- Wybierz typ Android.
- W polu Klient OAuth wybierz identyfikator klienta Androida w projekcie. (jeśli nie widzisz identyfikatora klienta Androida, ustaw odcisk palca SHA-1 gry w konsoli Firebase).
- Zapisz zmiany.
Na stronie Testerzy dodaj adresy e-mail wszystkich użytkowników, którzy muszą mieć możliwość zalogowania się w grze przed jej opublikowaniem na Play Store.
Integrowanie logowania w Grach Play z grą
Najpierw zintegruj logowanie w Gry Play z aplikacją. Pełne instrukcje znajdziesz w artykule Logowanie w Gry na Androida.
Podczas tworzenia obiektu GoogleSignInOptions
w ramach integracji użyj konfiguracji DEFAULT_GAMES_SIGN_IN
i wywołaj funkcję requestServerAuthCode
:
Kotlin
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ć identyfikator klienta serwera WWW metodzie requestServerAuthCode
.
To identyfikator, który został podany podczas włączania logowania w Grach Play w konsoli Firebase.
Uwierzytelnienie za pomocą Firebase
Po dodaniu do aplikacji logowania w Grach Play musisz skonfigurować Firebase tak, aby używać danych logowania do konta Google, które otrzymujesz, gdy gracz zaloguje się w Grach Play.
- Najpierw w metodzie
onCreate
działania logowania uzyskaj współdzielony elementFirebaseAuth
:
Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Podczas inicjowania aktywności sprawdź, czy gracz jest już zalogowany w Firebase:
Kotlin
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.
- Gdy gracz zaloguje się w Google Play w sposób cichy lub interaktywny, możesz uzyskać kod uwierzytelniający z obiektu
GoogleSignInAccount
, wymienić go na dane logowania Firebase i zalogować się w Firebase przy użyciu tych danych:
Kotlin
// 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 metody signInWithCredential
się powiedzie, możesz użyć metody getCurrentUser
, aby uzyskać dane konta użytkownika.
Dalsze kroki
Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i połączone z identyfikatorem gracza w Google Play. To nowe konto jest przechowywane w ramach projektu Firebase i może służyć do identyfikowania użytkownika we wszystkich aplikacjach w tym projekcie.
W grze możesz uzyskać identyfikator Firebase użytkownika z obiektu FirebaseUser
:
Kotlin
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 pobrać z zmiennej auth
niepowtarzalny identyfikator zalogowanego użytkownika i użyć go do kontrolowania, do których danych ma on dostęp.
Aby uzyskać informacje o użytkowniku w usługach gier Play lub uzyskać dostęp do usług gier Play, użyj interfejsów API dostępnych w pakiecie SDK usług gier Google Play.
Aby wylogować użytkownika, wywołaj funkcję FirebaseAuth.signOut()
:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();