Za pomocą usług gier Google Play możesz logować graczy do gry na Androida opartej na Firebase i Unity. Aby korzystać z usług Gier Google Play, zaloguj się za pomocą Firebase, najpierw zaloguj się w odtwarzaczu za pomocą Gier Google Play i poproś o kod autoryzacji OAuth 2.0. Następnie przekaż kod autoryzacyjny do PlayGamesAuthProvider
, aby wygenerować dane uwierzytelniające Firebase, których możesz użyć do uwierzytelnienia w Firebase.
Zanim zaczniesz
Skonfiguruj projekt Unity
Dodaj plik konfiguracyjny Firebase i pakiet SDK Firebase Unity do projektu Unity zgodnie z opisem w artykule Dodawanie Firebase do projektu Unity . Postępuj zgodnie z instrukcjami dla Androida.
Pamiętaj, aby zaimportować
FirebaseAuth.unitypackage
.W edytorze Unity w obszarze Ustawienia kompilacji > Ustawienia gracza > Inne ustawienia ustaw nazwę pakietu Android dla swojej gry.
Następnie w obszarze Ustawienia kompilacji > Ustawienia odtwarzacza > Ustawienia publikowania wybierz lub utwórz magazyn kluczy i klucz, który będzie używany do podpisywania Twojego pakietu Androida. Aby logowanie do Gier Play działało, Twój plik APK musi być podpisany – ten wymóg dotyczy nie tylko publikowania, ale także tworzenia gry.
Skonfiguruj projekt Firebase
W konsoli Firebase przejdź do projektu Firebase, w którym zarejestrowałeś swój projekt Unity.
Ustaw odcisk palca SHA-1 swojej gry na stronie Ustawienia konsoli Firebase, używając klucza ustawionego w Unity.
Możesz uzyskać odcisk palca SHA-1 swojego klucza za pomocą polecenia
keytool
:keytool -exportcert -list -v \ -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE
Alternatywnie możesz uzyskać skrót SHA swojego certyfikatu podpisującego za pomocą polecenia stopniowego
signingReport
:gradlew signingReport
Twój plik APK musi być podpisany tym kluczem, także podczas programowania.
Włącz Gry Google Play jako dostawcę logowania:
W konsoli Firebase otwórz sekcję Uwierzytelnianie .
Wygeneruj i uzyskaj identyfikator klienta serwera WWW oraz klucz tajny klienta:
Na karcie Metoda logowania włącz dostawcę logowania Google .
Skopiuj identyfikator klienta serwera internetowego i klucz tajny od dostawcy logowania Google .
Na karcie Metoda logowania włącz dostawcę logowania do Gier Play i podaj identyfikator klienta serwera WWW swojego projektu oraz klucz tajny klienta, które otrzymałeś w ostatnim kroku.
Skonfiguruj usługi gier Play przy użyciu informacji o aplikacji Firebase
W Konsoli Google Play otwórz aplikację Google Play lub utwórz ją.
W sekcji Rozwój kliknij Usługi gier Play > Konfiguracja i zarządzanie > Konfiguracja .
Kliknij Tak, moja gra już korzysta z interfejsów API Google , wybierz z listy swój projekt Firebase, a następnie kliknij Użyj .
Na stronie konfiguracji usług Gier Play kliknij Dodaj dane uwierzytelniające .
- Wybierz typ serwera gier .
- W polu Klient OAuth wybierz identyfikator klienta internetowego swojego projektu. Upewnij się, że jest to ten sam identyfikator klienta, który podałeś podczas włączania logowania w Grach Play.
- Zapisz zmiany.
Wciąż na stronie konfiguracji usług Gier Play kliknij ponownie Dodaj dane uwierzytelniające .
- Wybierz typ Androida .
- W polu Klient OAuth wybierz identyfikator klienta Androida swojego projektu. (Jeśli nie widzisz swojego identyfikatora klienta Androida, upewnij się, że ustawiłeś odcisk palca SHA-1 swojej gry w konsoli Firebase.)
- Zapisz zmiany.
Na stronach Wydarzenia , Osiągnięcia i Tabele wyników utwórz dowolne zasoby Gier Play, których chcesz używać w swojej grze (jeśli nie chcesz z nich korzystać od razu, możesz utworzyć wpis zastępczy). Następnie na dowolnej stronie Wydarzenia , Osiągnięcia lub Tabele wyników kliknij Pobierz zasoby i skopiuj fragment kodu zasobów Androida w dogodne miejsce. Będziesz potrzebował fragmentu kodu, aby skonfigurować wtyczkę usług gier Google Play.
Fragment kodu Resources wygląda jak w poniższym 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ę do Twojej gry, zanim udostępnisz ją w Sklepie Play.
Zintegruj logowanie się do Gier Play ze swoją grą
Pobierz najnowszą wersję wtyczki Play Games dla Unity i rozpakuj ją.
Zaimportuj pakiet Unity wtyczki do swojego projektu Unity. Pakiet Unity można znaleźć w katalogu
current-build
kompilacji archiwum wydań.Skonfiguruj wtyczkę Gry Play:
- Kliknij Okno > Gry Google Play > Konfiguracja > Konfiguracja systemu Android, aby otworzyć ekran konfiguracji systemu Android .
- Wklej fragment zasobów Androida pobrany z konsoli Play do pola Definicja zasobów .
- Wklej identyfikator klienta serwera internetowego, który podałeś podczas włączania logowania do Gier Play w konsoli Firebase, w polu Identyfikator klienta .
- Kliknij opcję Konfiguracja .
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 });
Uwierzytelnij się w Firebase
Po dodaniu logowania do Gier Play do swojej gry możesz użyć kodu uwierzytelniającego z usług Gier Play, aby uwierzytelnić się w Firebase.
Gdy gracz pomyślnie zaloguje się przy użyciu Gier Play, w procedurze obsługi kontynuacji logowania uzyskaj kod autoryzacyjny dla konta gracza:
Social.localUser.Authenticate((bool success) => { if (success) { authCode = PlayGamesPlatform.Instance.GetServerAuthCode(); } });
Następnie wymień kod autoryzacyjny z usług Gier Play na dane uwierzytelniające Firebase i użyj danych uwierzytelniających Firebase, aby uwierzytelnić 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); });
Następne kroki
Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i powiązane z jego identyfikatorem w Grach Play. To nowe konto jest przechowywane jako część Twojego projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w Twoim 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 Firebase Realtime i Cloud Storage możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth
i użyć go do kontrolowania, do jakich danych użytkownik może uzyskać dostęp.
Aby uzyskać informacje o odtwarzaczu Gier Play lub uzyskać dostęp do usług Gier Play, skorzystaj z interfejsów API udostępnianych przez wtyczkę Gry Play.
Aby wylogować użytkownika, wywołaj SignOut()
:
auth.SignOut();