Check out what’s new from Firebase at Google I/O 2022. Learn more

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

Za pomocą usług Gier Google Play możesz logować graczy w grach na Androida opartych na Firebase i Unity. Aby korzystać z usług Gier Google Play, logując się za pomocą Firebase, najpierw zaloguj się do odtwarzacza za pomocą Gier Google Play i poproś o kod uwierzytelniania OAuth 2.0, gdy to zrobisz. Następnie przekaż kod uwierzytelniający do PlayGamesAuthProvider , aby wygenerować dane logowania Firebase, których możesz użyć do uwierzytelniania w Firebase.

Zanim zaczniesz

Skonfiguruj swój projekt Unity

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

    Pamiętaj o zaimportowaniu FirebaseAuth.unitypackage .

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

  3. Następnie w obszarze 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. To wymaganie 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 certyfikatu podpisującego za pomocą polecenia gradle signingReport :

    gradlew signingReport

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

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

    1. Znajdź identyfikator klienta serwera WWW i tajny klucz klienta. Identyfikator klienta serwera WWW identyfikuje Twój projekt Firebase na serwerach uwierzytelniania Google Play.

      Aby znaleźć te wartości:

      1. Otwórz projekt Firebase na stronie danych logowania konsoli interfejsów API Google .
      2. W sekcji Identyfikatory klientów OAuth 2.0 otwórz stronę szczegółów klienta internetowego (utworzonego automatycznie przez usługę Google) . Na tej stronie znajduje się twój identyfikator klienta serwera WWW i klucz tajny.
    2. Następnie w konsoli Firebase otwórz sekcję Uwierzytelnianie .

    3. Na karcie Metoda logowania włącz dostawcę logowania do Gier Play . Musisz określić identyfikator klienta serwera WWW swojego projektu i klucz tajny klienta, które uzyskałeś z konsoli interfejsów API.

Skonfiguruj usługi Gier Play przy użyciu informacji o aplikacji Firebase

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

  2. W sekcji Rozwijaj się kliknij Usługi gier Play > Konfiguracja i zarządzanie > Konfiguracja .

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

  4. Na stronie konfiguracji usług Gier Play kliknij Dodaj poświadczenia .

    1. Wybierz typ serwera gry .
    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 poświadczenia .

    1. Wybierz typ Androida .
    2. W polu Klient OAuth wybierz identyfikator klienta Android 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 Zdarzenia , 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 używać ich 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. Fragment kodu będzie potrzebny do skonfigurowania wtyczki usług gier Google Play.

    Fragment kodu zasobów wygląda jak w następującym 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 przed opublikowaniem jej w Sklepie Play.

Zintegruj logowanie do Gier Play ze swoją grą

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

  2. Zaimportuj pakiet Unity wtyczki do swojego projektu Unity. Pakiet Unity można znaleźć w katalogu current-build 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 otrzymany z Konsoli Play w polu Definicja zasobów .
    3. W polu Identyfikator klienta wklej identyfikator klienta serwera internetowego podany podczas włączania logowania w Grach Play w konsoli Firebase.
    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 się w Firebase

Gdy dodasz do gry logowanie w Grach Play, możesz użyć kodu uwierzytelniającego z usług Gier Play, by uwierzytelnić się w Firebase.

  1. Po pomyślnym zalogowaniu się gracza przy użyciu Gier Play w module obsługi kontynuacji logowania uzyskaj kod autoryzacji dla 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 danych logowania Firebase, aby uwierzytelnić gracza:

    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
    Firebase.Auth.Credential credential =
        Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

Następne kroki

Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i powiązane z jego identyfikatorem Gier Play. To nowe konto jest przechowywane jako część projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie.

W swojej grze możesz uzyskać identyfikator użytkownika Firebase z obiektu Firebase.Auth.FirebaseUser :

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  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 i usługi Cloud Storage Firebase możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i używać go do kontrolowania, do jakich danych użytkownik może uzyskać dostęp.

Aby uzyskać informacje o odtwarzaczu Gier Play użytkownika 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();