Uwierzytelnij się w Unity za pomocą usług gier Google Play

Możesz korzystać z usług Gier Google Play, aby logować graczy do gry na Androida opartej na Firebase i Unity. Aby korzystać z usług Gier Google Play, zaloguj się przez Firebase, najpierw zaloguj się do odtwarzacza w Grach Google Play, a następnie poproś o kod uwierzytelniający OAuth 2.0. Następnie przekaż kod uwierzytelniający do PlayGamesAuthProvider , aby wygenerować poświadczenie Firebase, którego możesz użyć do uwierzytelnienia w Firebase.

Zanim zaczniesz

Skonfiguruj swój projekt Unity

  1. Dodaj plik konfiguracyjny Firebase i zestaw Firebase Unity SDK do swojego projektu Unity zgodnie z opisem w temacie Dodawanie Firebase do projektu Unity . Postępuj zgodnie z instrukcjami dla Androida.

    Pamiętaj, aby zaimportować FirebaseAuth.unitypackage .

  2. W edytorze Unity w sekcji Ustawienia kompilacji > Ustawienia odtwarzacza > Inne ustawienia ustaw nazwę pakietu Android 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 pakietu Android. Twój plik APK musi być podpisany, aby logowanie w Grach Play działało – ten wymóg dotyczy nie tylko publikowania, ale także tworzenia gry.

Skonfiguruj swój projekt Firebase

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

  2. Ustaw odcisk cyfrowy 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 gradle signingReport :

    gradlew signingReport

    Twój plik APK musi być podpisany tym kluczem, także podczas programowania.

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

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

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

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

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

    3. Na karcie Metoda logowania włącz dostawcę logowania do Gier Play i podaj identyfikator klienta serwera sieciowego projektu oraz klucz tajny klienta, które uzyskałeś w ostatnim kroku.

Skonfiguruj usługi Gier Play, korzystając z informacji o aplikacji Firebase

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

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

  3. Kliknij Tak, moja gra korzysta już 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 logowania .

    1. Wybierz typ serwera gier .
    2. W polu Klient OAuth wybierz identyfikator klienta internetowego 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. Nadal na stronie konfiguracji usług Gier Play ponownie kliknij Dodaj dane logowania .

    1. Wybierz typ Androida .
    2. W polu Klient OAuth wybierz identyfikator klienta Android swojego projektu. (Jeśli nie widzisz swojego identyfikatora klienta Androida, upewnij się, że ustawiłeś odcisk palca 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 swojej grze (jeśli nie chcesz ich od razu używać, 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. Fragment kodu będzie potrzebny do skonfigurowania wtyczki usług Google Play Games.

    Fragment kodu zasobów 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 opublikujesz ją w Sklepie Play.

Zintegruj logowanie w Grach 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 current-build katalogu kompilacji archiwum wydania.

  3. Skonfiguruj wtyczkę Gry Play:

    1. Kliknij Okno > Gry Google Play > Konfiguracja > Konfiguracja systemu Android, aby otworzyć ekran Konfiguracja systemu Android .
    2. Wklej fragment kodu zasobów Androida pobrany z konsoli Play w polu Definicja zasobów .
    3. Wklej swój identyfikator klienta serwera WWW, który podałeś podczas włączania logowania w Grach Play w konsoli Firebase, w polu Client ID .
    4. Kliknij Ustawienia .
  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 w Firebase

Po dodaniu logowania w Grach 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ę w Grach Play, w procedurze obsługi kontynuacji logowania pobierz kod uwierzytelniający do konta gracza:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. Następnie wymień kod uwierzytelniający z usług Gier Play na dane logowania Firebase i użyj tych danych logowania 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);
    });
    

Następne kroki

Gdy użytkownik zaloguje się po raz pierwszy, tworzone jest nowe konto użytkownika, które jest powiązane z jego identyfikatorem Gier Play. To nowe konto jest przechowywane jako część Twojego projektu Firebase i może służyć do identyfikacji użytkownika w każdej aplikacji 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 Regułach bezpieczeństwa Firebase Realtime Database 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 ma dostęp.

Aby uzyskać informacje o graczach Gier Play użytkownika lub uzyskać dostęp do usług Gier Play, użyj interfejsów API udostępnianych przez wtyczkę Gier Play.

Aby wylogować użytkownika, wywołaj SignOut() :

auth.SignOut();