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
Jeśli jeszcze tego nie zrobiłeś, dodaj Firebase do swojego projektu na Androida .
Korzystając z modułu Firebase Android BoM , zadeklaruj zależność dla biblioteki Firebase Authentication dla systemu 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.2.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 korzystać z BoM 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.6'
// 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.2.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 korzystać z BoM 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.6'
// 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
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
Włącz Gry Google Play jako dostawcę logowania:
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:
- Otwórz projekt Firebase na stronie danych logowania konsoli interfejsów API Google .
- 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.
Następnie w konsoli Firebase otwórz sekcję Uwierzytelnianie .
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
W Konsoli Google Play otwórz aplikację Google Play lub ją utwórz.
W sekcji Rozwijaj się kliknij Usługi gier Play > Konfiguracja i zarządzanie > Konfiguracja .
Kliknij Tak, moja gra korzysta już z interfejsów Google API , wybierz swój projekt Firebase z listy, a następnie kliknij Użyj .
Na stronie konfiguracji usług Gier Play kliknij Dodaj poświadczenia .
- Wybierz typ serwera gry .
- 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.
- Zapisz zmiany.
Nadal na stronie konfiguracji usług Gier Play ponownie kliknij Dodaj poświadczenia .
- Wybierz typ Androida .
- 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).
- Zapisz zmiany.
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.
- Najpierw w metodzie
onCreate
aktywności logowania uzyskaj udostępnioną instancję obiektuFirebaseAuth
:
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
- 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.
- 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()