Dostęp po stronie serwera do usług gier Google Play

Zalecamy uwierzytelnianie graczy i bezpiecznie przekazać tożsamość gracza do serwera zaplecza. Dzięki temu aby bezpiecznie pobierać tożsamość gracza i inne dane bez na potencjalne ingerencje w urządzenie.

W takiej sytuacji, gdy gracz się zaloguje, możesz poprosić o specjalny jednorazowy kod (nazywany kodem autoryzacji serwera) z Gier Play. Pakiet SDK usług w wersji 2, który klient przekazuje na serwer. Następnie na serwerze wymienić kod uwierzytelniania serwera na token OAuth 2.0, którego serwer może używać używać wywołań interfejsu Google Play Games Services API.

Dodatkowe wskazówki dotyczące dodawania metod logowania w grach znajdziesz w artykule Logowanie się w grach na Androida

Aby uzyskać dostęp w trybie offline, musisz wykonać te czynności:

  1. W Konsoli Google Play: utwórz dane logowania do serwera gier. Typ klienta OAuth danych logowania to „internet”.
  2. W aplikacji na Androida: podczas logowania poproś o kod autoryzacji serwera dla swojego dane logowania serwera i przekazać je do serwera.
  3. Na serwerze gry: wymieniaj kod autoryzacji serwera na potrzeby dostępu OAuth za pomocą usług uwierzytelniania Google, a następnie użyj go do wywołania metody Usługi gier Play Interfejsy API typu REST.

Zanim zaczniesz

Najpierw musisz dodać grę do Konsoli Google Play, jak opisano na stronie Skonfiguruj usługi gier Google Play. zintegrować funkcję logowania do usług gier Play z grą.

Tworzenie aplikacji internetowej po stronie serwera

Usługi gier Google Play nie zapewniają backendu i obsługuje gry internetowe. Zapewnia jednak obsługę serwerów backendu na serwer gry na Androida.

Jeśli chcesz użyć atrybutu Interfejsy API typu REST dla usług gier Google Play w aplikacji po stronie serwera, wykonaj te czynności:

  1. W grze w Konsoli Google Play kliknij Usługi gier Play > Konfiguracja i zarządzanie > Konfiguracja.
  2. Wybierz Dodaj dane logowania, aby otworzyć stronę Dodaj dane logowania. Jako typ danych logowania wybierz Serwer gry i przejdź do sekcji Autoryzacja.
    1. Jeśli serwer gry ma już identyfikator klienta OAuth, wybierz go z menu. Po zapisaniu zmian przejdź do następnej sekcji.
    2. Jeśli nie masz identyfikatora klienta OAuth serwera gry, możesz go utworzyć.
      1. Kliknij Utwórz klienta OAuth i kliknij link Utwórz identyfikator klienta OAuth.
      2. Spowoduje to otwarcie strony Utwórz identyfikator klienta OAuth w Google Cloud Platform dla projektu Cloud Platform powiązanego z grą.
      3. Wypełnij formularz na stronie i kliknij Utwórz. Pamiętaj, aby ustawić typ aplikacji na Aplikacja internetowa.
      4. Wróć do sekcji Autoryzacja na stronie dodawania danych logowania, wybierz nowo utworzonego klienta OAuth i zapisz zmiany.

Uzyskiwanie kodu autoryzacji serwera

Aby pobrać kod uwierzytelniania serwera, którego gra może używać do uzyskiwania tokenów dostępu na serwerze backendu:

  1. Wywołaj połączenie requestServerSideAccess z poziomu klienta.

    1. Upewnij się, że używasz identyfikatora klienta OAuth zarejestrowanego na serwerze gier, a nie identyfikatora klienta OAuth aplikacji na Androida.
    2. (Opcjonalnie) Jeśli serwer gier wymaga dostępu offline (długotrwałego dostępu przy użyciu tokena odświeżania) do usług gier Play, możesz ustawić wartość parametru forceRefreshToken na wartość „true”.
    GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);
    gamesSignInClient
      .requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID, /* forceRefreshToken= */ false)
      .addOnCompleteListener( task -> {
        if (task.isSuccessful()) {
          String serverAuthToken = task.getResult();
          // Send authentication code to the backend game server to be
          // exchanged for an access token and used to verify the player
          // via the Play Games Services REST APIs.
        } else {
          // Failed to retrieve authentication code.
        }
    });
    
  2. Wyślij token kodu uwierzytelniania OAuth do serwera backendu, aby go wymienić, identyfikator gracza zweryfikowany w interfejsach API REST usług gier Play, a następnie uwierzytelnienie w grze.

Wyślij kod autoryzacji serwera

Wyślij kod uwierzytelniania serwera do serwera backendu, aby uzyskać dostęp i tokeny odświeżania. Użyj tokena dostępu do wywoływania interfejsu Play Games Services API i, opcjonalnie, zapisać token odświeżania, aby uzyskać nowy po jego wygaśnięciu.

Fragment kodu poniżej pokazuje, jak możesz zastosować kod po stronie serwera w języka programowania Java i wymienić kod uwierzytelniania serwera w celu uzyskania dostępu. tokeny. Wykorzystuje clientserverskeleton.

/**
 * Exchanges the authcode for an access token credential.  The credential
 * is the associated with the given player.
 *
 * @param authCode - the non-null authcode passed from the client.
 * @param player   - the player object which the given authcode is
 *                 associated with.
 * @return the HTTP response code indicating the outcome of the exchange.
 */
private int exchangeAuthCode(String authCode, Player player) {
try {

    // The client_secret.json file is downloaded from the Google API
    // console.  This is used to identify your web application.  The
    // contents of this file should not be shared.
    //
    File secretFile = new File("client_secret.json");

    // If we don't have the file, we can't access any APIs, so return
    // an error.
    if (!secretFile.exists()) {
        log("Secret file : " + secretFile
                .getAbsolutePath() + "  does not exist!");
        return HttpServletResponse.SC_FORBIDDEN;
    }

    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(
            JacksonFactory.getDefaultInstance(), new
            FileReader(secretFile));

    // Extract the application id of the game from the client id.
    String applicationId = extractApplicationId(clientSecrets
            .getDetails().getClientId());

    GoogleTokenResponse tokenResponse =
            new GoogleAuthorizationCodeTokenRequest(
            HTTPTransport,
            JacksonFactory.getDefaultInstance(),
            "https://oauth2.googleapis.com/token",
            clientSecrets.getDetails().getClientId(),
            clientSecrets.getDetails().getClientSecret(),
            authCode,
            "")
            .execute();

    log("hasRefresh == " + (tokenResponse.getRefreshToken() != null));
    log("Exchanging authCode: " + authCode + " for token");
    Credential credential = new Credential
            .Builder(BearerToken.authorizationHeaderAccessMethod())
            .setJsonFactory(JacksonFactory.getDefaultInstance())
            .setTransport(HTTPTransport)
            .setTokenServerEncodedUrl("https://www.googleapis.com/oauth2/v4/token")
            .setClientAuthentication(new HttpExecuteInterceptor() {
                @Override
                public void intercept(HttpRequest request)
                        throws IOException {
                        }
            })
            .build()
            .setFromTokenResponse(tokenResponse);

    player.setCredential(credential);

    // Now that we have a credential, we can access the Games API.
    PlayGamesAPI api = new PlayGamesAPI(player, applicationId,
            HTTPTransport, JacksonFactory.getDefaultInstance());

    // Call the verify method, which checks that the access token has
    // access to the Games API, and that the player id used by the
    // client matches the playerId associated with the accessToken.
    boolean ok = api.verifyPlayer();

    // Call a Games API on the server.
    if (ok) {
        ok = api.updatePlayerInfo();
        if (ok) {
            // persist the player.
            savePlayer(api.getPlayer());
        }
    }

    return ok ? HttpServletResponse.SC_OK :
            HttpServletResponse.SC_INTERNAL_SERVER_ERROR;

  } catch (IOException e) {
    e.printStackTrace();
  }
  return HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
}

Wywoływanie interfejsów API typu REST z serwera

Zobacz interfejsy API typu REST dla usług gier Google Play aby zobaczyć pełny opis dostępnych wywołań interfejsu API.

Przykłady wywołań interfejsu API REST, które mogą Ci się przydać:

Zawodnik

Chcesz pobrać identyfikator i dane profilu zalogowanego gracza? Zadzwoń do [Players.get][] z identyfikatorem 'me'.

Znajomi

Szczegółowe informacje znajdziesz w przewodniku Znajomi.

Osiągnięcia

Więcej informacji znajdziesz w przewodniku Osiągnięcia.

  • Aby uzyskać listę aktualnych osiągnięć, zadzwoń pod numer privilegementDefinitions.list (w języku angielskim).

  • Połącz to z wywołaniem Osiągnięcia.lista i dowiedzieć się, które z nich odblokował gracz.

  • Zadzwoń do nas Osiągnięcia.unlock aby odblokować osiągnięcie gracza.

  • Zadzwoń do nas Osiągnięcia.increment , by raportować postępy w osiągnięciu osiągnięcia i sprawdzić, czy gracz je odblokował.

  • Jeśli debugujesz grę, która nie została jeszcze wprowadzona w wersji produkcyjnej, możesz wywołać funkcję Osiągnięcia.reset lub Osiągnięcia.resetAll z interfejsów API zarządzania, aby przywrócić osiągnięcia do ich pierwotnego stanu.

Tabele wyników

Więcej informacji znajdziesz w przewodniku Tabele wyników.

  • Chcesz zobaczyć listę wszystkich tablic wyników w grze? Zadzwoń do Tabele wyników.list

  • Jeśli gracz skończył już grę, możesz przesłać jego wynik do Wyniki.submit i zobaczyć, czy da się zmienić rekord.

  • Aby wyświetlić tabelę wyników, pobierz dane z: Wyniki.lista i wyświetlać je użytkownikowi.

  • Użyj Scores.listWindow w celu znalezienia kolekcji wyników bliskich najwyższego wyniku użytkownika.

  • Aby uzyskać więcej informacji o wyniku gracza w określonej tabeli wyników (na przykład jeśli gracz znajduje się w 12% najlepszych graczy), wywołaj polecenie Scores.get.

  • Jeśli debugujesz grę, możesz użyć funkcji Wyniki.reset z interfejsów API zarządzania, aby zresetować wszystkie wyniki danego gracza z określonego tabeli wyników.