Usług gier Google Play możesz używać do logowania graczy w grze na Androida utworzonej w Firebase i Unity. Aby używać 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 uwierzytelniające Firebase, których możesz użyć do uwierzytelnienia w Firebase.
Zanim zaczniesz
Konfigurowanie projektu Unity
Dodaj plik konfiguracyjny Firebase i pakiet SDK Firebase Unity do projektu Unity zgodnie z opisem w Dodawanie Firebase do projektu Unity. Postępuj zgodnie z instrukcjami dotyczącymi Androida.
Pamiętaj, aby zaimportować
FirebaseAuth.unitypackage.W edytorze Unity w sekcji Build Settings > Player Settings > Other Settings (Ustawienia kompilacji > Ustawienia odtwarzacza > Inne ustawienia) ustaw nazwę pakietu Androida w swojej grze.
Następnie w sekcji Build Settings > Player Settings > Publishing Settings (Ustawienia kompilacji > Ustawienia odtwarzacza > Ustawienia publikowania) wybierz lub utwórz magazyn kluczy i klucz, które będą używane do podpisywania pakietu Androida. Aby logowanie w Grach Play działało, plik APK musi być podpisany. Wymóg ten obowiązuje nie tylko podczas publikowania, ale też podczas tworzenia gry.
Konfigurowanie projektu w Firebase
W konsoli Firebase otwórz projekt Firebase, w którym zarejestrowano projekt Unity.Firebase
Określ odcisk cyfrowy SHA-1 swojej gry.
W konsoli Firebase otwórz ustawienia
Settings > karta General.Przewiń w dół do karty Your apps (Twoje aplikacje), wybierz aplikację na Androida i dodaj odcisk cyfrowy SHA-1 w polu SHA certificate fingerprints (Odciski cyfrowe certyfikatu SHA).
Odcisk cyfrowy SHA-1 klucza możesz uzyskać za pomocą polecenia
keytool:keytool -exportcert -list -v \ -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTOREMożesz też uzyskać skrót SHA certyfikatu podpisywania za pomocą polecenia Gradle
signingReport:gradlew signingReport
Więcej informacji o tym, jak uzyskać odcisk cyfrowy SHA aplikacji, znajdziesz w artykule Uwierzytelnianie klienta.
Plik APK musi być podpisany tym kluczem, w tym podczas tworzenia.
Włącz Google Play Games jako dostawcę logowania:
W konsoli Firebase otwórz Security > Authentication.
Wygeneruj i uzyskaj identyfikator klienta serwera WWW oraz tajny klucz klienta projektu:
Na karcie Sign-in method (Metoda logowania) włącz dostawcę logowania Google.
Skopiuj identyfikator klienta serwera WWW i tajny klucz z dostawcy logowania Google.
Na karcie Sign-in method włącz dostawcę logowania Play Games i podaj identyfikator klienta serwera WWW oraz tajny klucz klienta projektu, które zostały uzyskane w poprzednim kroku.
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 projekt Firebase z listy, a potem kliknij Użyj.
Na stronie konfiguracji Play Games services kliknij Dodaj dane uwierzytelniające.
- Wybierz typ Serwer gry.
- 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 uwierzytelniające.
- 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 stronach Zdarzenia, Osiągnięcia i Tabele wyników utwórz zasoby Play Games Gier Play, których chcesz używać w swojej grze (jeśli nie chcesz od razu używać żadnych zasobów, możesz utworzyć wpis zastępczy). Następnie na dowolnej ze stron Zdarzenia, Osiągnięcia lub Tabele wyników kliknij Pobierz zasoby i skopiuj fragment kodu zasobów Androida w dogodnym miejscu. Będziesz potrzebować tego fragmentu kodu, aby skonfigurować Google Play Games services wtyczkę.
Fragment kodu zasobów wygląda tak jak w tym przykładzie:
<?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 Twojej grze, zanim opublikujesz ją w Play Store.
Integrowanie logowania w Grach Play z grą
Pobierz najnowszą wersję wtyczki Gry Play do silnika Unity i rozpakuj ją.
Zaimportuj pakiet Unity wtyczki do projektu Unity. Pakiet Unity znajdziesz w katalogu
current-buildarchiwum wersji.Skonfiguruj wtyczkę Gry Play:
- Kliknij Window > Google Play Games > Setup > Android Setup (Okno > Gry Google Play > Konfiguracja > Konfiguracja Androida), aby otworzyć ekran Android Configuration (Konfiguracja Androida).
- Wklej fragment kodu zasobów Androida pobrany z Konsoli Play w polu Resources Definition (Definicja zasobów).
- Wklej identyfikator klienta serwera WWW, który został podany podczas włączania logowania w Grach Play w konsoli Firebase, w polu Client ID (Identyfikator klienta).
- Kliknij Setup (Konfiguruj).
W swojej grze skonfiguruj klienta Gier Play 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();Następnie, gdy gracz zdecyduje się zalogować w Grach Play, wywołaj
Social.localUser.Authenticate():Social.localUser.Authenticate((bool success) => { // handle success or failure });
Uwierzytelnianie w Firebase
Po dodaniu do gry logowania w Grach Play możesz użyć kodu autoryzacji z usług gier Play do uwierzytelnienia w Firebase.
Gdy gracz zaloguje się w Grach Play, w procedurze obsługi kontynuacji logowania uzyskaj kod autoryzacji konta gracza:
Social.localUser.Authenticate((bool success) => { if (success) { authCode = PlayGamesPlatform.Instance.GetServerAuthCode(); } });Następnie wymień kod autoryzacji z usług Gier Play na dane uwierzytelniające 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 jego identyfikatorem w Grach 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 swojej grze możesz uzyskać identyfikator UID 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 bezpieczeństwa bazy danych czasu rzeczywistego Firebase i Cloud Storage możesz uzyskać unikalny identyfikator użytkownika zalogowanego w 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 wtyczkę Gry Play.
Aby wylogować użytkownika, wywołaj SignOut():
auth.SignOut();