Uwierzytelnij się w Unity przy użyciu usług gier Google Play

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

  1. 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.

  2. W Edytorze Unity w sekcji Ustawienia kompilacji > Ustawienia odtwarzacza > Inne ustawienia ustaw nazwę pakietu Androida swojej gry.

  3. 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

  1. W konsoli Firebase otwórz projekt Firebase, w którym zarejestrowano projekt Unity.

  2. 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.

  3. Włącz Google Play Games jako dostawcę logowania:

    1. W konsoli Firebase otwórz sekcję Authentication.

    2. Wygeneruj i pobierz identyfikator klienta serwera WWW oraz jego klucz tajny:

      1. Na karcie Metoda logowania włącz dostawcę logowania Google.

      2. Skopiuj identyfikator klienta serwera internetowego i tajny klucz od dostawcy usługi logowania Google.

    3. 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

  1. W konsoli Google Play otwórz aplikację Google Play lub utwórz nową.

  2. W sekcji Rozwój kliknij Play Games services > Konfiguracja i zarządzanie > Konfiguracja.

  3. Kliknij Tak, w swojej grze używam już interfejsów API Google, wybierz z listy projekt Firebase, a następnie kliknij Użyj.

  4. Na stronie konfiguracji Play Games services kliknij Dodaj dane logowania.

    1. Wybierz typ Serwer gier.
    2. 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.
    3. Zapisz zmiany.
  5. Na stronie konfiguracji Play Games services kliknij ponownie Dodaj dane logowania.

    1. Wybierz typ Android.
    2. 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).
    3. Zapisz zmiany.
  6. Na stronach Zdarzenia, OsiągnięciaTabele 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>
    
  7. 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ą

  1. Pobierz najnowszą wersję wtyczki Play Games do Unity i rozpakuj ją.

  2. Zaimportuj pakiet wtyczki Unity do projektu Unity. Pakiet Unity znajdziesz w katalogu current-build archiwum wersji.

  3. Konfigurowanie wtyczki Gier Play:

    1. Kliknij Okno > Usługi gier Google Play > Konfiguracja > Konfiguracja Androida, aby otworzyć ekran Konfiguracja Androida.
    2. Wklej fragment kodu zasobów Androida z Konsoli Play w polu Definicja zasobów.
    3. Wklej identyfikator klienta serwera internetowego, który został podany podczas włączania logowania w Google Play Games w konsoli Firebase, w polu Identyfikator klienta.
    4. Kliknij Konfiguruj.
  4. 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();
    
  5. 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.

  1. 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();
      }
    });
    
  2. 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();