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 utworzonej w Firebase i Unity. Aby używać logowania w usługach Gier Google Play za pomocą Firebase, najpierw zaloguj gracza w Grach Google Play i poproś o kod autoryzacji OAuth 2.0. Następnie przekaż kod autoryzacji do PlayGamesAuthProvider, aby wygenerować dane uwierzytelniające Firebase, których możesz użyć do uwierzytelnienia w Firebase.

Zanim zaczniesz

Konfigurowanie projektu Unity

  1. Dodaj plik konfiguracyjny Firebase i pakiet SDK Firebase Unity do projektu Unity zgodnie z opisem w 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 Build Settings > Player Settings > Other Settings (Ustawienia kompilacji > Ustawienia odtwarzacza > Inne ustawienia) ustaw nazwę pakietu Androida w swojej grze.

  3. Następnie w sekcji Build Settings > Player Settings > Publishing Settings (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. Wymóg ten obowiązuje nie tylko podczas publikowania, ale też podczas tworzenia gry.

Konfigurowanie projektu w Firebase

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

  2. Określ odcisk cyfrowy SHA-1 swojej gry.

    1. W konsoli Firebase otwórz ustawienia Settings > karta General.

    2. Przewiń w dół do karty Your apps (Twoje aplikacje), wybierz aplikację na Androida i dodaj odcisk cyfrowy SHA-1 w polu SHA certificate fingerprints (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.

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

    1. W konsoli Firebase otwórz Security > Authentication.

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

      1. Na karcie Sign-in method (Metoda logowania) włącz dostawcę logowania Google.

      2. Skopiuj identyfikator klienta serwera WWW i tajny klucz z dostawcy logowania Google.

    3. Na karcie Sign-in method włącz dostawcę logowania Play Games i podaj identyfikator klienta serwera WWW oraz tajny klucz klienta projektu, które zostały uzyskane w poprzednim kroku.

Konfigurowanie Play Games services za pomocą informacji o aplikacji w Firebase

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

  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 projekt Firebase z listy, a potem kliknij Użyj.

  4. Na stronie konfiguracji Play Games services kliknij Dodaj dane uwierzytelniające.

    1. Wybierz typ Serwer gry.
    2. W polu Klient OAuth wybierz identyfikator klienta internetowego projektu. Upewnij się, że jest to ten sam identyfikator klienta, który został podany podczas włączania Play Games logowania.
    3. Zapisz zmiany.
  5. Na stronie konfiguracji Play Games services kliknij ponownie Dodaj dane uwierzytelniające.

    1. Wybierz typ Android.
    2. W polu Klient OAuth wybierz identyfikator klienta Androida projektu. (Jeśli nie widzisz identyfikatora klienta Androida, sprawdź, czy masz ustawiony odcisk cyfrowy SHA-1 swojej gry w konsoli Firebase).
    3. Zapisz zmiany.
  6. Na stronach Zdarzenia, Osiągnięcia i Tabele wyników utwórz zasoby Play Games Gier Play, których chcesz używać w swojej grze (jeśli nie chcesz od razu używać żadnych zasobów, możesz utworzyć wpis zastępczy). Następnie na dowolnej ze stron Zdarzenia, Osiągnięcia lub Tabele wyników kliknij Pobierz zasoby i skopiuj fragment kodu zasobów Androida w dogodnym miejscu. Będziesz potrzebować tego fragmentu kodu, aby skonfigurować Google Play Games services wtyczkę.

    Fragment kodu zasobów wygląda tak jak 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 Play Store.

Integrowanie logowania w Grach Play z grą

  1. Pobierz najnowszą wersję wtyczki Gry Play do silnika Unity i rozpakuj 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 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 pobrany z Konsoli Play w polu Resources Definition (Definicja zasobów).
    3. Wklej identyfikator klienta serwera WWW, który został podany podczas włączania logowania w Grach Play w konsoli Firebase, w polu Client ID (Identyfikator klienta).
    4. Kliknij Setup (Konfiguruj).
  4. 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();
    
  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
    });
    

Uwierzytelnianie w Firebase

Po dodaniu do gry logowania w Grach Play możesz użyć kodu autoryzacji z usług gier Play do uwierzytelnienia w Firebase.

  1. Gdy gracz zaloguje się w Grach Play, w procedurze obsługi 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 uwierzytelniające 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 jego identyfikatorem w Grach Play. To nowe konto jest przechowywane w projekcie w Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w 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 czasu rzeczywistego Firebase i Cloud Storage możesz uzyskać unikalny identyfikator użytkownika zalogowanego w 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 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 SignOut():

auth.SignOut();