Usług gier Google Play możesz używać do logowania graczy w grze na Androida stworzonej w Firebase i Unity. Aby korzystać z logowania do usług w Google Play Games za pomocą Firebase, najpierw zaloguj gracza w Google Play Games i poproś o kod uwierzytelniający OAuth 2.0. Następnie prześlij ten kod do usługi PlayGamesAuthProvider
, aby wygenerować dane logowania Firebase, których możesz użyć do uwierzytelnienia się w Firebase.
Zanim zaczniesz
Konfigurowanie projektu Unity
Dodaj plik konfiguracji Firebase i pakiet SDK Firebase Unity do projektu Unity zgodnie z instrukcjami w artykule Dodawanie Firebase do projektu Unity. Postępuj zgodnie z instrukcjami dotyczącymi Androida.
Pamiętaj, aby zaimportować plik
FirebaseAuth.unitypackage
.W Edytorze Unity w sekcji Ustawienia kompilacji > Ustawienia odtwarzacza > Inne ustawienia ustaw nazwę pakietu Androida swojej gry.
Następnie w sekcji Ustawienia kompilacji > Ustawienia odtwarzacza > Ustawienia publikacji wybierz lub utwórz magazyn kluczy i klucz, który będzie używany do podpisywania pakietu na Androida. Plik APK musi być podpisany, aby umożliwić logowanie się w Gierach Google Play. Ten wymóg dotyczy nie tylko publikowania, ale też tworzenia gry.
Konfigurowanie projektu Firebase
W konsoli Firebase otwórz projekt Firebase, w którym zarejestrowano projekt Unity.
Ustaw odcisk cyfrowy SHA-1 gry na stronie Ustawienia konsoli Firebase, używając klucza skonfigurowanego w Unity.
Odcisk cyfrowy SHA-1 klucza możesz uzyskać za pomocą polecenia
keytool
:keytool -exportcert -list -v \ -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE
Możesz też uzyskać hasz SHA certyfikatu podpisywania za pomocą polecenia gradle
signingReport
:gradlew signingReport
Plik APK musi być podpisany tym kluczem, w tym podczas tworzenia.
Włącz Google Play Games jako dostawcę logowania:
W konsoli Firebase otwórz sekcję Authentication.
Wygeneruj i pobierz identyfikator klienta serwera WWW oraz jego klucz tajny:
Na karcie Metoda logowania włącz dostawcę logowania Google.
Skopiuj identyfikator klienta serwera internetowego i tajny klucz od dostawcy usługi logowania Google.
Na karcie Metoda logowania włącz dostawcę logowania Play Games i określ identyfikator klienta serwera WWW projektu oraz klucz klienta, które zostały podane w ostatnim kroku.
Skonfiguruj 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 stronach Zdarzenia, Osiągnięcia i Tabele wyników utwórz zasoby Play Games, których chcesz używać w grze (jeśli nie chcesz ich używać od razu, możesz utworzyć wpis zastępczy). Następnie na którejkolwiek z stron Zdarzenia, Osiągnięcia lub Tablice wyników kliknij Pobierz zasoby i skopiuj fragment kodu zasobów na Androida w wygodne miejsce. Fragment kodu będzie Ci potrzebny do skonfigurowania wtyczki Google Play Games services.
Fragment kodu zasobów wygląda tak:
<?xml version="1.0" encoding="utf-8"?> <!-- Google Play game services IDs. Save this file as res/values/games-ids.xml in your project. --> <resources> <!-- app_id --> <string name="app_id" translatable="false">123456789000</string> <!-- package_name --> <string name="package_name" translatable="false">com.example.game</string> <!-- event Wiped Raid --> <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string> </resources>
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ą
Pobierz najnowszą wersję wtyczki Play Games do Unity i rozpakuj ją.
Zaimportuj pakiet wtyczki Unity do projektu Unity. Pakiet Unity znajdziesz w katalogu
current-build
archiwum wersji.Konfigurowanie wtyczki Gier Play:
- Kliknij Okno > Usługi gier Google Play > Konfiguracja > Konfiguracja Androida, aby otworzyć ekran Konfiguracja Androida.
- Wklej fragment kodu zasobów Androida z Konsoli Play w polu Definicja zasobów.
- Wklej identyfikator klienta serwera internetowego, który został podany podczas włączania logowania w Google Play Games w konsoli Firebase, w polu Identyfikator klienta.
- Kliknij Konfiguruj.
W grze skonfiguruj klienta Google Play Games z włączonym ustawieniem
RequestServerAuthCode
:using GooglePlayGames; using GooglePlayGames.BasicApi; using UnityEngine.SocialPlatforms; using System.Threading.Tasks; PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder() .RequestServerAuthCode(false /* Don't force refresh */) .Build(); PlayGamesPlatform.InitializeInstance(config); PlayGamesPlatform.Activate();
Gdy gracz zdecyduje się zalogować za pomocą Google Play Games, wywołaj:
Social.localUser.Authenticate()
Social.localUser.Authenticate((bool success) => { // handle success or failure });
Uwierzytelnienie za pomocą Firebase
Po dodaniu logowania się w Grach Play do gry możesz użyć kodu uwierzytelniania z usług gier Play, aby uwierzytelnić się w Firebase.
Gdy gracz zaloguje się w Google Play, w obiekcie ContinuationHandler w logika zalogowania otrzymasz kod uwierzytelniający do jego konta:
Social.localUser.Authenticate((bool success) => { if (success) { authCode = PlayGamesPlatform.Instance.GetServerAuthCode(); } });
Następnie zastąp kod uwierzytelniający z usług gier w Google Play danymi logowania Firebase i użyj tych danych do uwierzytelnienia gracza:
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; Firebase.Auth.Credential credential = Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); });
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 Firebase.Auth.FirebaseUser
:
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
string 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 User.TokenAsync() instead.
string uid = user.UserId;
}
W regułach zabezpieczeń 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 Grach Play lub uzyskać dostęp do usług Gier Play, użyj interfejsów API udostępnianych przez wtyczkę Gry Play.
Aby wylogować użytkownika, wywołaj funkcję SignOut()
:
auth.SignOut();