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

Za pomocą usług Gier Google Play możesz logować się w grach na Androida utworzonych w Firebase i Unity. Aby zalogować się w usługach gier Google Play przez Firebase, zaloguj się w odtwarzaczu w Grach Google Play i w razie potrzeby poproś o kod autoryzacji OAuth 2.0. Następnie przekaż ten kod do aplikacji PlayGamesAuthProvider, by wygenerować dane logowania Firebase, których możesz używać do uwierzytelniania w Firebase.

Zanim zaczniesz

Konfigurowanie projektu w Unity

  1. Dodaj plik konfiguracyjny Firebase i pakiet SDK Firebase Unity do projektu w Unity zgodnie z opisem w sekcji Dodawanie Firebase do projektu Unity. Postępuj zgodnie z instrukcjami dotyczącymi Androida.

    Pamiętaj, aby zaimportować: FirebaseAuth.unitypackage.

  2. W edytorze Unity, w sekcji Ustawienia kompilacji > Ustawienia gracza > Inne ustawienia wpisz nazwę pakietu na Androida Twojej gry.

  3. 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 podpisania pakietu na Androida. Aby logowanie w Grach Play działało, plik APK musi być podpisany – wymaga to nie tylko publikowania, ale też tworzenia gry.

Skonfiguruj projekt Firebase

  1. W konsoli Firebase otwórz projekt Firebase, w którym został zarejestrowany Twój projekt Unity.

  2. Ustaw odcisk cyfrowy SHA-1 swojej gry na stronie Ustawienia w konsoli Firebase za pomocą klucza ustawionego 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

    Hasz SHA certyfikatu podpisywania możesz też uzyskać za pomocą polecenia Grale signingReport:

    gradlew signingReport

    Plik APK musi być podpisany tym kluczem, również w trakcie tworzenia.

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

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

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

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

      2. Skopiuj identyfikator klienta i obiekt tajny serwera WWW z usługi logowania Google.

    3. Na karcie Metoda logowania włącz dostawcę logowania w Grach Play i podaj identyfikator klienta serwera WWW oraz tajny klucz klienta uzyskane w ostatnim kroku.

Skonfiguruj usługi Gier Play, używając informacji z aplikacji Firebase

  1. W Konsoli Google Play otwórz lub utwórz aplikację Google Play.

  2. W sekcji Rozwój kliknij Usługi gier Play > Konfiguracja i zarządzanie > Konfiguracja.

  3. Kliknij Tak, moja gra już korzysta z interfejsów API Google, wybierz z listy swój projekt Firebase i kliknij Użyj.

  4. Na stronie konfiguracji usług gier Play kliknij Dodaj dane logowania.

    1. Wybierz typ Serwer gry.
    2. W polu Klient OAuth wybierz identyfikator klienta internetowego swojego projektu. Upewnij się, że to identyfikator klienta podany podczas włączania logowania w Grach Play.
    3. Zapisz zmiany.
  5. Pozostając na stronie konfiguracji usług gier Play, ponownie kliknij Dodaj dane logowania.

    1. Wybierz typ Androida.
    2. W polu Klient OAuth wybierz identyfikator klienta Androida dla swojego projektu. Jeśli nie widzisz identyfikatora klienta Androida, pamiętaj, aby ustawić odcisk cyfrowy SHA-1 gry w konsoli Firebase.
    3. Zapisz zmiany.
  6. Na stronach Wydarzenia, Osiągnięcia i Tabele wyników utwórz dowolne zasoby Gier Play, których chcesz używać w grze (jeśli nie chcesz ich od razu wykorzystywać, 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 z zasobami Androida w dogodnym miejscu. Ten fragment kodu jest potrzebny do skonfigurowania wtyczki usług gier Google Play.

    Fragment kodu zasobu wygląda 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>
    
  7. 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 Sklepie Play.

Integrowanie logowania w Grach Play z grą

  1. Pobierz najnowszą wersję wtyczki Gry Play do Unity i wyodrębnij ją.

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

  3. Skonfiguruj wtyczkę Gry Play:

    1. Kliknij Okno > Gry Google Play > Konfiguracja > Konfiguracja Androida, by otworzyć ekran Konfiguracja Androida.
    2. W polu Definicja zasobów wklej fragment kodu zasobów Androida pobrany z Konsoli Play.
    3. W polu Client ID (Identyfikator klienta) wklej identyfikator klienta serwera WWW podany przy włączaniu logowania przez Gry Play w konsoli Firebase.
    4. Kliknij Konfiguruj.
  4. Skonfiguruj w swojej grze 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();
    
  5. 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 za pomocą Firebase

Po dodaniu do gry logowania w Grach Play możesz używać kodu autoryzacji z usług Gier Play, by uwierzytelniać się w Firebase.

  1. Gdy gracz zaloguje się za pomocą Gier Play, w module obsługi kontynuacji logowania pobierz kod autoryzacji konta gracza:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. Następnie wymień kod autoryzacji z usług gier Play na dane logowania Firebase i użyj danych logowania Firebase 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 loguje się po raz pierwszy, tworzone jest nowe konto użytkownika, które jest łączone z jego identyfikatorem w Grach Play. Nowe konto będzie przechowywane w ramach Twojego projektu Firebase i może służyć do identyfikowania użytkownika we wszystkich aplikacjach w Twoim projekcie.

W swojej 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 Bazie danych czasu rzeczywistego Firebase i regułach zabezpieczeń Cloud Storage możesz uzyskać ze zmiennej auth unikalny identyfikator zalogowanego użytkownika i użyć go do kontrolowania, do jakich danych użytkownik ma 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 dostępnych we wtyczce Gry Play.

Aby wylogować użytkownika, zadzwoń pod numer SignOut():

auth.SignOut();