Uwierzytelnij się w Unity, korzystając z usług gier Google Play

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

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

  2. W edytorze Unity w obszarze Ustawienia kompilacji > Ustawienia gracza > Inne ustawienia ustaw nazwę pakietu Android dla swojej gry.

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

  1. W konsoli Firebase przejdź do projektu Firebase, w którym zarejestrowałeś swój projekt Unity.

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

  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 klucz tajny klienta:

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

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

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

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

  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, a następnie kliknij Użyj .

  4. Na stronie konfiguracji usług Gier Play kliknij Dodaj dane uwierzytelniające .

    1. Wybierz typ serwera gier .
    2. 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.
    3. Zapisz zmiany.
  5. Wciąż na stronie konfiguracji usług Gier Play kliknij ponownie Dodaj dane uwierzytelniające .

    1. Wybierz typ Androida .
    2. 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.)
    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 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>
    
  7. 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ą

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

  2. Zaimportuj pakiet Unity wtyczki do swojego projektu Unity. Pakiet Unity można znaleźć w katalogu current-build kompilacji archiwum wydań.

  3. Skonfiguruj wtyczkę Gry Play:

    1. Kliknij Okno > Gry Google Play > Konfiguracja > Konfiguracja systemu Android, aby otworzyć ekran konfiguracji systemu Android .
    2. Wklej fragment zasobów Androida pobrany z konsoli Play do pola Definicja zasobów .
    3. Wklej identyfikator klienta serwera internetowego, który podałeś podczas włączania logowania do Gier Play w konsoli Firebase, w polu Identyfikator klienta .
    4. Kliknij opcję Konfiguracja .
  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
    });
    

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.

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