Konfigurowanie Gier Google Play w Unity i uwierzytelnianie

Z tego dokumentu dowiesz się, jak skonfigurować projekt Unity, aby korzystać z wtyczki Gry Google Play do silnika Unity. Dowiesz się, jak zainstalować wtyczkę i skonfigurować projekt Unity. Opisujemy też, jak zweryfikować usługę uwierzytelniania.

Zanim zaczniesz

Zapoznaj się z wymaganiami dotyczącymi oprogramowania. Skonfiguruj Konsolę Play i zainstaluj edytor Unity.

Instalowanie wtyczki

Aby pobrać i zainstalować wtyczkę Gry Google Play do silnika Unity, wykonaj te czynności w edytorze Unity:

  1. Pobierz repozytorium GitHub.

  2. W katalogu current-build znajdź plik unitypackage. Ten plik reprezentuje wtyczkę. Powinien wyglądać np. tak:

      current-build/GooglePlayGamesPluginForUnity-X.YY.ZZ.unitypackage
    

Konfigurowanie projektu Unity

Aby skonfigurować projekt Unity w ustawieniach odtwarzacza:

  1. Otwórz projekt gry.

  2. W edytorze Unity kliknij Assets > Import Package > Custom Package (Zasoby > Importuj pakiet > Własny pakiet), aby zaimportować plik unitypackage do zasobów projektu.

  3. Upewnij się, że bieżąca platforma kompilacji jest ustawiona na Android.

    1. W menu głównym kliknij File > Build Settings (Plik > Ustawienia kompilacji).

    2. Wybierz Android i kliknij Switch Platform (Zmień platformę).

    3. W menu Window > Google Play Games (Okno > Gry Google Play) powinien pojawić się nowy element. Jeśli go nie ma, odśwież zasoby, klikając Assets > Refresh (Zasoby > Odśwież), a następnie ponownie ustaw platformę kompilacji.

  4. W edytorze Unity kliknij File > Build Settings > Player Settings > Other Settings (Plik > Ustawienia kompilacji > Ustawienia odtwarzacza > Inne ustawienia).

  5. W polu Target API level (Docelowy poziom interfejsu API) wybierz wersję.

  6. W polu Scripting backend (Backend skryptów) wpisz IL2CPP.

  7. W polu Target architectures (Docelowe architektury) wybierz wartość.

  8. Zanotuj nazwę pakietu package_name.Te informacje możesz wykorzystać później.

Ustawienia odtwarzacza w projekcie Unity
Ustawienia odtwarzacza w projekcie Unity.

Tworzenie nowego magazynu kluczy

Aby zweryfikować dane logowania, potrzebujesz klucza. Wykonaj te czynności:

  1. W edytorze Unity kliknij File > Build settings > Player settings (Plik > Ustawienia kompilacji > Ustawienia odtwarzacza).
  2. W sekcji Publishing settings (Ustawienia publikowania) kliknij Keystore manager (Menedżer magazynu kluczy).
    1. W oknie Keystore manager (Menedżer magazynu kluczy) kliknij Keystore > Create new > Anywhere (Magazyn kluczy > Utwórz nowy > W dowolnym miejscu).
    2. Wybierz folder i podaj nazwę magazynu kluczy.
    3. W polu Password (Hasło) wpisz hasło i potwierdź je.
    4. Kliknij Add key (Dodaj klucz).

Zanotuj nazwę folderu. Możesz jej użyć do utworzenia danych logowania w Google Cloud.

Kopiowanie zasobów Androida z Konsoli Play

Każde osiągnięcie, tabela wyników i wydarzenie utworzone w Konsoli Play zawiera zasób Androida, którego używasz podczas konfigurowania projektu Unity.

Aby uzyskać zasoby Androida dla swojej gry:

  1. W Konsoli Google Play, otwórz grę.

  2. Na stronie Usługi gier Play – konfiguracja (Rozwój > Usługi gier Play > Konfiguracja i zarządzanie > Konfiguracja), kliknij Pobierz zasoby.

  3. W oknie Zasoby kliknij kartę Android(XML).

  4. Zaznacz i skopiuj zawartość zasobów Androida (AndroidManifest.xml).

Dodawanie zasobów Androida do projektu Unity

Dodaj te zasoby Androida do projektu Unity:

  1. W edytorze Unity kliknij Window > Google Play Games > Setup > Android Setup (Okno > Gry Google Play > Konfiguracja > Konfiguracja Androida).

    • W polu Directory to save constants (Katalog do zapisywania stałych) wpisz nazwę folderu na plik stałych.
    • W polu Constants class name (Nazwa klasy stałych) wpisz nazwę klasy C#, która ma zostać utworzona, w tym przestrzeń nazw.

      Jeśli np. klasa C# to id.cs i znajduje się w Assets > myproject > scripts > id.cs (Zasoby > mójprojekt > skrypty > id.cs). Nazwa klasy stałych może być myproject.scripts.id.

    • W polu Resources definition (Definicja zasobów) wklej dane zasobów Androida (plik AndroidManifest.xml) skopiowane z Konsoli Google Play.

    • Opcjonalnie: w polu Client ID (Identyfikator klienta) wpisz identyfikator klienta połączonej aplikacji internetowej.

      Aby uzyskać identyfikator klienta gry w Google Cloud, przeczytaj artykuł Tworzenie identyfikatorów klientów.

      Jest to konieczne tylko wtedy, gdy masz backend oparty na internecie dla swojej gry i potrzebujesz kodu autoryzacji serwera, aby wymienić go na token dostępu przez serwer backendu, lub jeśli potrzebujesz tokena identyfikatora gracza do wykonywania innych wywołań interfejsu API niezwiązanych z grą.

    • Kliknij Setup (Konfiguracja). Spowoduje to skonfigurowanie gry za pomocą identyfikatora klienta i wygenerowanie klasy C#, która zawiera stałe dla każdego z zasobów Androida.

  2. W edytorze Unity kliknij Window > Google Play Games > Setup > Nearby Connections Setup (Okno > Gry Google Play > Konfiguracja > Konfiguracja połączeń w pobliżu).

    • W polu Nearby connection service ID (Identyfikator usługi połączeń w pobliżu) wpisz package_name.

      Użyj tej samej package_name, której używasz podczas konfigurowania projektu Unity.

    • Kliknij Setup (Konfiguracja).

Wybieranie platformy społecznościowej

Wtyczka usług Gier Google Play implementuje interfejs społecznościowy Unity , co zapewnia zgodność z grami, które już używają tego interfejsu podczas integracji z innymi platformami. Niektóre funkcje są jednak dostępne tylko w Grach Play i są oferowane jako rozszerzenia standardowego interfejsu społecznościowego udostępnianego przez Unity.

Standardowe wywołania interfejsu API są dostępne za pomocą obiektu Social.Active , który jest odwołaniem do interfejsu ISocialPlatform. Rozszerzenia usług gier Google Play, które nie są standardowe, są dostępne przez rzutowanie obiektu Social.Active na klasę PlayGamesPlatform , w której dostępne są dodatkowe metody.

Korzystanie z wtyczki bez zastępowania domyślnej platformy społecznościowej

Gdy wywołasz PlayGamesPlatform.Activate, usługi gier Google Play staną się domyślną implementacją platformy społecznościowej. Oznacza to że wtyczka usług Gier Google Play wykonuje statyczne wywołania metod w Social i Social.Active, co jest oczekiwanym zachowaniem w przypadku większości gier korzystających z wtyczki.

Jeśli jednak z jakiegoś powodu chcesz zachować dostęp do domyślnej implementacji (np. aby używać jej do przesyłania osiągnięć i tabel wyników na inną platformę społecznościową), możesz użyć wtyczki usług Gier Google Play bez zastępowania domyślnej implementacji. Aby to zrobić:

  1. Wywołaj metodę PlayGamesPlatform.Activate.
  2. Jeśli Xyz to nazwa metody, którą wywołujesz w klasie Social, nie wywołuj Social.Xyz. Zamiast tego wywołaj PlayGamesPlatform.Instance.Xyz.
  3. Podczas interakcji z usługami gier Google Play używaj właściwości PlayGamesPlatform.Instance zamiast Social.Active.

Dzięki temu możesz jednocześnie przesyłać wyniki i osiągnięcia na 2 lub więcej platform społecznościowych:

    // Submit achievement to original default social platform
    Social.ReportProgress("MyAchievementIdHere", 100.0f, callback);

    // Submit achievement to Google Play
    PlayGamesPlatform.Instance.ReportProgress("MyGooglePlayAchievementIdHere", 100.0f, callback);

Weryfikowanie usługi uwierzytelniania

Po otwarciu gry automatycznie podejmowana jest próba połączenia z usługami gier Play za pomocą uwierzytelniania platformy. Jeśli połączenie się powiedzie, gra wyświetli prośbę o zalogowanie i będzie gotowa do użycia wtyczki usług Gier Google Play do silnika Unity.

Jeśli użytkownik nigdy nie korzystał z usług gier Google Play na swoim urządzeniu, automatycznie wyświetli się ekran jednorazowej konfiguracji, na którym będzie mógł utworzyć konto w Grach Play.

W metodzie Start skryptu nasłuchuj wyniku automatycznej próby uwierzytelnienia, pobierz stan uwierzytelnienia i wyłącz funkcje usług gier Play, jeśli użytkownik nie jest uwierzytelniony.

Jeśli wersja wtyczki Unity jest starsza niż v11, nie możesz korzystać z funkcji uwierzytelniania.

    using GooglePlayGames;

    public void Start() {
      PlayGamesPlatform.Instance.Authenticate(ProcessAuthentication);
    }

    internal void ProcessAuthentication(SignInStatus status) {
      if (status == SignInStatus.Success) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a login button
        // to ask users to authenticate. Clicking it should call
        // PlayGamesPlatform.Instance.ManuallyAuthenticate(ProcessAuthentication).
      }
    }

Kod wyniku to wyliczenie, którego możesz użyć do określenia przyczyny niepowodzenia uwierzytelnienia.

Jeśli wolisz korzystać z platformy społecznościowej Unity, możesz użyć tego kodu:

  using GooglePlayGames;

  public void Start() {
    PlayGamesPlatform.Activate();
    Social.localUser.Authenticate(ProcessAuthentication);
  }

Dopóki nie uzyskasz wartości zwracanej Authenticate, nie możesz wykonywać żadnych wywołań interfejsu API usług gier Google Play. Dlatego zalecamy, aby gry wyświetlały ekran gotowości do czasu wywołania funkcji zwrotnej, aby użytkownicy nie mogli rozpocząć gry, dopóki nie zakończy się uwierzytelnianie.

Zapobieganie automatycznemu tworzeniu profilu

W pliku manifestu możesz wyłączyć prośby o automatyczne utworzenie profilu. Dzięki temu użytkownicy bez profilu usług gier Play mogą nadal wczytywać grę bez wyświetlania prośby o utworzenie profilu usług gier Play. Więcej informacji znajdziesz w sekcji Opcje tworzenia profilu.

Aby korzystać z tej funkcji, upewnij się, że spełnione są te warunki:

  1. W pliku AndroidManifest.xml dodaj tag com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION w elemencie <meta-data> oraz atrybuty do elementu <application>:

    <application>
        ...
        <meta-data
            android:name="com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION"
            android:value="true" />
        ...
    </application>

    Ustawienie tej flagi na true informuje usługi gier Play, że gra będzie obsługiwać proces tworzenia profilu. W związku z tym usługi gier Play nie będą automatycznie wyświetlać interfejsu tworzenia profilu użytkownikom na urządzeniu, którzy nie mają profilu usług gier Play.

  2. Aby obsługiwać przypadki, w których użytkownik nie jest uwierzytelniony z powodu braku profilu usług gier Play, możesz użyć metody PlayGamesPlatform.Instance.IsAuthenticated(). Ta metoda zwraca false ponieważ tworzenie profilu nie powiodło się. Aby rozwiązać ten problem, rozpocznij proces tworzenia profilu wywołując metodę PlayGamesPlatform.Instance.ManuallyAuthenticate().

    
    if (!PlayGamesPlatform.Instance.IsAuthenticated()) {
      // The user is unauthenticated, likely due to a missing Play Games profile.
      // Calling PlayGamesPlatform.Instance.ManuallyAuthenticate() will trigger
      // the profile creation UI.
      PlayGamesPlatform.Instance.ManuallyAuthenticate((SignInStatus status) => {
        // ...
      });
    }
    

  3. Po dodaniu tagu wyciszenia użyj okna logcat, aby sprawdzić, czy został dodany. Dane wyjściowe logcat zawierają komunikat podobny do tego: „Game opted out of automatic profile creation prompt (using manifest)” (Gra zrezygnowała z automatycznego wyświetlania prośby o utworzenie profilu – używa manifestu).

Używanie podpisywania aplikacji przez Google Play

Google zarządza kluczem podpisywania Twojej aplikacji i zabezpiecza go za Ciebie za pomocą podpisywania aplikacji przez Google Play. Możesz używać podpisywania aplikacji przez Google Play do podpisywania zoptymalizowanych plików Android App Bundle na potrzeby dystrybucji. Usługa podpisywania aplikacji przez Google Play przechowuje Twój klucz podpisywania aplikacji w bezpiecznej infrastrukturze Google. Aby korzystać z podpisywania aplikacji przez Google Play, musisz najpierw utworzyć i pobrać plik AAB z edytora Unity. Następnie możesz przesłać plik AAB do Konsoli Play i utworzyć wewnętrzną wersję testową.

Tworzenie pliku AAB

Aby utworzyć plik AAB w edytorze Unity:

  1. W edytorze Unity kliknij File > Build settings (Plik > Ustawienia kompilacji).
  2. Wybierz Build App Bundle ( Google Play ) (Skompiluj pakiet aplikacji – Google Play).

    Więcej informacji znajdziesz w artykule Ustawienia kompilacji na Androida.

  3. Kliknij Build (Skompiluj).

  4. Pobierz plik AAB z edytora Unity.

Tworzenie wewnętrznej wersji testowej

Aby utworzyć wewnętrzną wersję testową i dodać testerów w Konsoli Play:

  1. W Konsoli Google Play, wybierz grę.
  2. Otwórz stronę Testowanie i publikowanie (Testowanie > Test wewnętrzny).
  3. Kliknij Prześlij i wybierz plik AAB.
  4. W polu Szczegóły wersji wpisz nazwę.
  5. Kliknij Dalej i sprawdź szczegóły wersji.
  6. Kliknij Zapisz i opublikuj.
  7. Na karcie Testerzy kliknij Utwórz listę e-mailową, aby dodać maksymalnie 100 testerów.

    Więcej informacji znajdziesz w artykule Test wewnętrzny: zarządzanie maksymalnie 100 testerami.

  8. W polu URL lub adres e-mail do przesyłania opinii wpisz URL lub adres e-mail, na który mają być przesyłane opinie.

  9. Kliknij Zapisz.

Sprawdzanie danych logowania do podpisywania aplikacji

  1. W Konsoli Google Play, wybierz grę.
  2. Otwórz stronę Testowanie i publikowanie (Konfiguracja > Podpisywanie aplikacji).
  3. Sprawdź dane logowania do podpisywania aplikacji.

Kompilowanie i uruchamianie projektu

W tym momencie możesz skompilować i uruchomić projekt gry. Po uruchomieniu gry zobaczysz automatyczną próbę uwierzytelnienia.

Potrzebujesz fizycznego urządzenia z Androidem, na którym włączone jest debugowanie USB, lub emulatora, który może uruchomić opracowany projekt.

Pobieranie kodów uwierzytelniania serwera

Aby uzyskać dostęp do interfejsów API Google na serwerze backendu w imieniu bieżącego gracza, musisz pobrać kod uwierzytelniania z aplikacji klienckiej i przekazać go do aplikacji serwera WWW. Kod można następnie wymienić na token dostępu, aby wywoływać różne interfejsy API. Informacje o przepływie pracy znajdziesz w artykule Zaloguj się przez Google w internecie.

Aby uzyskać kod dostępu po stronie serwera:

  1. Dodaj identyfikator klienta internetowego swojej gry w Konsoli Play.
    1. W Konsoli Google Play, wybierz grę.
    2. Na stronie Konfiguracja (Rozwój > Usługi gier Play > Konfiguracja i zarządzanie > Konfiguracja) kliknij Dodaj dane logowania.
    3. Na stronie Dodaj dane logowania kliknij Serwer gry.
    4. Wygeneruj identyfikator klienta OAuth 2.0.
    5. Zanotuj wartość identyfikatora klienta. Będziesz musiał podać tę wartość później.
  2. Dodaj identyfikator klienta internetowego do Unity Hub.

    1. W Unity Hub skonfiguruj Gry Google Play do silnika Unity i uwierzytelnij się.
    2. W Unity Hub kliknij Window > Google Play Games > Setup > Android Setup (Okno > Gry Google Play > Konfiguracja > Konfiguracja Androida).
    3. Wpisz wartość identyfikatora klienta.
  3. Pobierz kod autoryzacji serwera dla dodatkowych zakresów.

    C#

    using GooglePlayGames.BasicApi;
    
    // Define selectedScope having additional identity scopes.
    private List selectedScopes = new List();
    
    // Add scopes you want to request.
    selectedScopes.Add(AuthScope.OPEN_ID);
    selectedScopes.Add(AuthScope.PROFILE);
    selectedScopes.Add(AuthScope.EMAIL);
    
    // Call RequestServerSideAccess with additional scopes and retrieve
    // authcode and grantedscopes list.
    PlayGamesPlatform.Instance.RequestServerSideAccess(
        /* forceRefreshToken= */ false,selectedScopes
        (AuthResponse authResponse) =>
        {
        string authCode = authResponse.GetAuthCode();
        List grantedScopes = authResponse.GetGrantedScopes();
    
        // send authCode to server...
    });

Konfigurowanie i dodawanie funkcji