Usługi gier Google Play umożliwiają logowanie graczy w grze na Androida
opartej na Firebase i Unity. Aby używać logowania w usługach gier Google Play za pomocą Firebase, najpierw zaloguj gracza w usługach gier 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 uwierzytelniania w Firebase.
Zanim zaczniesz
Konfigurowanie projektu Unity
Dodaj do projektu Unity plik konfiguracyjny Firebase i pakiet SDK Firebase Unity zgodnie z instrukcjami w artykule Dodawanie Firebase do projektu Unity. Postępuj zgodnie z instrukcjami dotyczącymi Androida.
Pamiętaj, aby zaimportować
FirebaseAuth.unitypackage.W edytorze Unity w sekcji Ustawienia kompilacji > Ustawienia odtwarzacza > Inne ustawienia ustaw nazwę pakietu Androida dla gry.
Następnie w sekcji 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. Wymaganie to dotyczy nie tylko publikowania, ale też tworzenia gry.
Konfigurowanie projektu w Firebase
W Firebasekonsoli otwórz projekt w Firebase, w którym zarejestrowano projekt Unity.
Podaj odcisk cyfrowy SHA-1 gry.
W konsoli Firebase otwórz
Ustawienia > karta Ogólne.Przewiń w dół do karty Twoje aplikacje, wybierz aplikację na Androida i dodaj odcisk cyfrowy SHA-1 w polu 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 aplikacji.
Włącz Google Play Games jako dostawcę logowania:
W konsoli Firebase otwórz Bezpieczeństwo > Uwierzytelnianie.
Wygeneruj i uzyskaj identyfikator klienta serwera WWW projektu oraz tajny klucz klienta:
Na karcie Metoda logowania włącz dostawcę logowania Google.
Skopiuj identyfikator klienta i tajny klucz serwera internetowego od dostawcy logowania Google.
Na karcie Metoda logowania włącz dostawcę logowania Play Games i określ identyfikator klienta serwera WWW projektu oraz tajny klucz klienta uzyskane w ostatnim kroku.
Skonfiguruj Play Games services za pomocą informacji o aplikacji w Firebase.
W Google Playkonsoli 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 i kliknij Użyj.
Na stronie konfiguracji Play Games services kliknij Dodaj dane logowania.
- Wybierz typ Serwer gry.
- W polu Klient OAuth wybierz identyfikator klienta usługi internetowej projektu. Upewnij się, że jest to ten sam identyfikator klienta, który został podany podczas włączania logowania za pomocą Play Games.
- Zapisz zmiany.
Na stronie konfiguracji Play Games services ponownie kliknij Dodaj dane logowania.
- Wybierz typ Android.
- W polu Klient OAuth wybierz identyfikator klienta Androida w swoim projekcie. (Jeśli nie widzisz identyfikatora klienta Androida, upewnij się, że w Firebase konsoli ustawiono odcisk cyfrowy SHA-1 gry).
- Zapisz zmiany.
Na stronach Wydarzenia, Osiągnięcia i Tabele wyników utwórz dowolne zasobyPlay Games, których chcesz używać w grze (jeśli nie chcesz od razu używać żadnych zasobów, możesz utworzyć wpis zastępczy). Następnie na dowolnej stronie Zdarzenia, Osiągnięcia lub Tabele wyników kliknij Pobierz zasoby i skopiuj fragment kodu zasobów Androida w wygodnym miejscu. Fragment kodu będzie 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 użytkowników, którzy muszą mieć możliwość zalogowania się w Twojej grze przed jej opublikowaniem w Play Store.
Integrowanie logowania w Grach Play z grą
Pobierz najnowszą wersję wtyczki Gry Play do silnika Unity i ją rozpakuj.
Zaimportuj pakiet Unity wtyczki do projektu Unity. Pakiet Unity znajdziesz w katalogu
current-buildw archiwum wersji.Skonfiguruj wtyczkę Gier 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 uzyskany z Konsoli Play w polu Definicja zasobów.
- Wklej identyfikator klienta serwera WWW, który został podany podczas włączania logowania w Grach Play w Firebase konsoli, w polu Client ID (Identyfikator klienta).
- Kliknij Konfiguruj.
W 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();Gdy gracz zdecyduje się zalogować w Grach Play, wywołaj:
Social.localUser.Authenticate()Social.localUser.Authenticate((bool success) => { // handle success or failure });
Uwierzytelnianie za pomocą Firebase
Po dodaniu do gry logowania w usługach Gier Play możesz użyć kodu autoryzacji z usług Gier Play do uwierzytelniania w Firebase.
Gdy gracz zaloguje się w usługach Gier Play, w obsłudze 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 logowania Firebase i użyj ich 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 ramach projektu w Firebase i może służyć do identyfikowania użytkownika we wszystkich aplikacjach w projekcie.
W grze możesz uzyskać identyfikator Firebase UID 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ń Bazy danych czasu rzeczywistego Firebase i Cloud Storage możesz pobrać unikalny identyfikator zalogowanego użytkownika ze 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 dostęp do usług Gier Play, użyj interfejsów API udostępnianych przez wtyczkę Gier Play.
Aby wylogować użytkownika, wywołaj funkcję SignOut():
auth.SignOut();