Usługi gier Google Play umożliwiają logowanie 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 Grach Google Play i poproś o kod autoryzacji OAuth 2.0. Następnie przekaż kod autoryzacji do PlayGamesAuthProvider, aby wygenerować dane logowania Firebase, których możesz użyć do uwierzytelnienia w Firebase.
Zanim zaczniesz
Konfigurowanie projektu aplikacji na Androida
Dodaj Firebase do projektu aplikacji na Androida, jeśli nie korzystasz w nim jeszcze z tej usługi.
W pliku Gradle na poziomie modułu (aplikacji) (zwykle
<project>/<app-module>/build.gradle.ktslub<project>/<app-module>/build.gradle), dodaj zależność od bibliotrzy 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:34.12.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.5.1") }Gdy korzystamy z Firebase Android BoM, aplikacja zawsze używa zgodnych wersji bibliotek Firebase na Androida.
(Alternatywnie) Dodaj zależności biblioteki Firebase bez użycia BoM
Jeśli nie chcesz używać Firebase BoM, musisz określić wersję każdej biblioteki Firebase w wierszu zależności.
Pamiętaj, że jeśli w aplikacji używasz kilku bibliotek Firebase, zdecydowanie zalecamy używanie 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:24.0.1")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.5.1") }
Konfigurowanie projektu w Firebase
Ustaw odcisk cyfrowy SHA-1 swojej gry na stronie Ustawienia konsoli Firebase.
Hash SHA 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 swojego projektu. Identyfikator klienta serwera internetowego identyfikuje Twój projekt w Firebase na serwerach uwierzytelniania Google Play.
Aby znaleźć te wartości:
- Otwórz projekt w Firebase na stronie danych logowania w konsoli interfejsów API Google.
- W sekcji Identyfikatory klientów OAuth 2.0 otwórz stronę z informacjami Klient internetowy (utworzony automatycznie przez usługę Google). Na tej stronie znajdziesz identyfikator klienta serwera internetowego i tajny klucz.
Następnie w konsoli Firebase otwórz sekcję Uwierzytelnianie.
Na karcie Metoda logowania włącz dostawcę logowania Gry Play. Musisz podać identyfikator klienta serwera WWW i tajny klucz klienta projektu, które zostały pobrane z Konsoli interfejsów API.
Konfigurowanie Play Games services za pomocą informacji o aplikacji w Firebase
W Konsoli otwórz aplikację lub utwórz nową.Google PlayGoogle Play
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 internetowego projektu. Upewnij się, że jest to ten sam identyfikator klienta, który został podany podczas włączania Play Games logowania.
- Zapisz zmiany.
Na stronie konfiguracji Play Games services kliknij ponownie Dodaj dane logowania.
- Wybierz typ Android.
- W polu Klient OAuth wybierz identyfikator klienta Androida projektu. (Jeśli nie widzisz identyfikatora klienta Androida, sprawdź, czy masz ustawiony odcisk cyfrowy SHA-1 swojej 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 Play Store.
Integrowanie logowania w usługach gier Play z grą
Najpierw zintegruj logowanie w usługach gier Play z aplikacją. Pełne instrukcje znajdziesz w artykule Logowanie w grach na Androida.
Podczas integracji, gdy tworzysz obiekt GoogleSignInOptions, użyj konfiguracji DEFAULT_GAMES_SIGN_IN i wywołaj 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 do metody requestServerAuthCode.
Jest to identyfikator, który został podany podczas włączania logowania w usługach gier Play w konsoli
Firebase.
Uwierzytelnianie w Firebase
Po dodaniu do aplikacji logowania w usługach gier Play musisz skonfigurować Firebase tak, aby używała danych logowania do konta Google, które uzyskujesz, gdy gracz zaloguje się w usługach gier Play.
Najpierw w metodzie
onCreateaktywności logowania pobierz współdzieloną instancję obiektuFirebaseAuth: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); }
Jeśli gracz nie jest zalogowany, wyświetl mu ekran wylogowania z gry, w tym opcję zalogowania się.
Gdy gracz zaloguje się w Grach Play w sposób cichy lub interaktywny, pobierz kod autoryzacji z obiektu
GoogleSignInAccount, wymień go na dane logowania Firebase i uwierzytelnij się w Firebase za pomocą 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
signInWithCredentialsię powiedzie, możesz użyć metodygetCurrentUser, 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 jego identyfikatorem w usługach gier Play. To nowe konto jest przechowywane w projekcie w Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie.
W grze możesz uzyskać identyfikator UID 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 Bazy danych czasu rzeczywistego Firebase i Cloud Storage możesz uzyskać unikalny identyfikator zalogowanego użytkownika z zmiennej auth i użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.
Aby uzyskać informacje o graczu w Grach Play 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():
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();