Za pomocą usług Gier Google Play możesz logować graczy w grze na Androida utworzonej w Firebase. Aby zalogować się w usługach gier Google Play przez Firebase, najpierw zaloguj gracza w Grach Google Play i poproś o kod autoryzacji OAuth 2.0. Następnie przekaż ten kod do aplikacji PlayGamesAuthProvider
, by wygenerować dane logowania Firebase, których możesz używać do uwierzytelniania w Firebase.
Zanim zaczniesz
Skonfiguruj projekt na Androida
Dodaj Firebase do swojego projektu Android, chyba że masz to już za sobą.
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ą uwierzytelniania Firebase na Androida. Do kontrolowania obsługi wersji biblioteki zalecamy używanie funkcji Firebase Android BoM.Poza tym w ramach konfigurowania uwierzytelniania Firebase musisz dodać pakiet SDK Usług Google Play do swojej aplikacji.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.1.2")) // 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") }Dzięki użyciu BoM Firebase Android BoM Twoja aplikacja zawsze używa zgodnych wersji bibliotek Firebase na Androida.
(Alternatywnie) Dodawanie zależności bibliotek Firebase bez korzystania z BM
Jeśli nie chcesz używać Firebase BoM, musisz określić każdą wersję biblioteki Firebase w wierszu zależności.
Pamiętaj, że jeśli w swojej aplikacji używasz wielu bibliotek Firebase, zdecydowanie zalecamy korzystanie z BoM do zarządzania wersjami bibliotek. Dzięki temu będziesz mieć pewność, że 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") }
Skonfiguruj projekt Firebase
Ustaw odcisk cyfrowy SHA-1 swojej gry na stronie Ustawienia w konsoli Firebase.
Hasz SHA Twojego certyfikatu podpisywania możesz uzyskać za pomocą polecenia Gradle
signingReport
:./gradlew signingReport
Włącz Gry Google Play jako dostawcę logowania:
Znajdź identyfikator klienta serwera WWW i tajny klucz klienta projektu. Identyfikator klienta serwera WWW identyfikuje Twój projekt Firebase na serwerach uwierzytelniania Google Play.
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ę z informacjami o kliencie internetowym (utworzonym automatycznie przez usługę Google). Znajdziesz na niej identyfikator klienta i obiekt tajny serwera WWW.
Następnie w konsoli Firebase otwórz sekcję Uwierzytelnianie.
Na karcie Metoda logowania włącz dostawcę logowania w Grach Play. Musisz podać identyfikator klienta serwera WWW i tajny klucz klienta uzyskane z konsoli interfejsów API.
Skonfiguruj usługi Gier Play, używając informacji z aplikacji Firebase
W Konsoli Google Play otwórz lub utwórz aplikację Google Play.
W sekcji Rozwój kliknij Usługi gier Play > Konfiguracja i zarządzanie > Konfiguracja.
Kliknij Tak, moja gra już korzysta z interfejsów API Google, wybierz z listy swój projekt Firebase i kliknij Użyj.
Na stronie konfiguracji usług gier Play kliknij Dodaj dane logowania.
- Wybierz typ Serwer gry.
- W polu Klient OAuth wybierz identyfikator klienta internetowego swojego projektu. Upewnij się, że to identyfikator klienta podany podczas włączania logowania w Grach Play.
- Zapisz zmiany.
Pozostając na stronie konfiguracji usług gier Play, ponownie kliknij Dodaj dane logowania.
- Wybierz typ Androida.
- W polu Klient OAuth wybierz identyfikator klienta Androida dla swojego projektu. Jeśli nie widzisz identyfikatora klienta Androida, pamiętaj, aby ustawić odcisk cyfrowy 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 Twojej grze, zanim opublikujesz ją w Sklepie Play.
Integrowanie logowania w Grach Play z grą
Najpierw zintegruj logowanie w Grach Play ze swoją aplikacją. Pełne instrukcje znajdziesz w artykule Logowanie się w Grach na Androida.
Podczas tworzenia w integracji obiektu 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();
Do metody requestServerAuthCode
należy przekazać identyfikator klienta serwera WWW.
Jest to identyfikator podany przez Ciebie przy włączaniu logowania się przez Gry Play w konsoli Firebase.
Uwierzytelnij za pomocą Firebase
Po dodaniu do aplikacji logowania w Grach Play musisz skonfigurować Firebase, aby korzystać z danych logowania do konta Google, które otrzymujesz, gdy gracz zaloguje się w Grach Play.
- Najpierw z metody
onCreate
aktywności logowania pobierz współdzielone wystąpienie obiektuFirebaseAuth
:
Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Zanim zainicjujesz aktywność, 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.
- Gdy gracz zaloguje się w Grach Play dyskretnie lub interaktywnie, pobierz kod autoryzacji z obiektu
GoogleSignInAccount
, zastąp go danymi logowania Firebase i uwierzytelnij się w Firebase za pomocą 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
się powiedzie, możesz użyć metody getCurrentUser
, aby pobrać dane konta użytkownika.
Dalsze kroki
Gdy użytkownik loguje się po raz pierwszy, tworzone jest nowe konto użytkownika, które jest łączone z jego identyfikatorem w Grach Play. Nowe konto będzie przechowywane w ramach Twojego projektu Firebase i może służyć do identyfikowania użytkownika we wszystkich aplikacjach w Twoim projekcie.
W swojej grze identyfikator UID użytkownika Firebase użytkownika możesz uzyskać 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 Bazie danych czasu rzeczywistego Firebase i regułach zabezpieczeń Cloud Storage możesz uzyskać ze zmiennej auth
unikalny identyfikator zalogowanego użytkownika i użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.
Aby uzyskać informacje o użytkowniku w Grach Play lub uzyskać dostęp do usług Gier Play, użyj interfejsów API dostępnych w pakiecie SDK do gier Google Play.
Aby wylogować użytkownika, zadzwoń pod numer FirebaseAuth.signOut()
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();