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

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

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

  2. W edytorze Unity w sekcji Ustawienia kompilacji > Ustawienia odtwarzacza > Inne ustawienia ustaw nazwę pakietu Androida dla 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 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

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

  2. Podaj odcisk cyfrowy SHA-1 gry.

    1. W konsoli Firebase otwórz Ustawienia > karta Ogólne.

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

    Moż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.

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

    1. W konsoli Firebase otwórz Bezpieczeństwo > Uwierzytelnianie.

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

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

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

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

  1. W Google Playkonsoli 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 i kliknij Użyj.

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

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

    1. Wybierz typ Android.
    2. 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).
    3. Zapisz zmiany.
  6. 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>
    
  7. 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ą

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

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

  3. Skonfiguruj wtyczkę Gier Play:

    1. Kliknij Window > Google Play Games > Setup > Android Setup (Okno > Gry Google Play > Konfiguracja > Konfiguracja Androida), aby otworzyć ekran Android Configuration (Konfiguracja Androida).
    2. Wklej fragment kodu zasobów Androida uzyskany z Konsoli Play w polu Definicja zasobów.
    3. 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).
    4. Kliknij Konfiguruj.
  4. 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();
    
  5. 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.

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