Zintegruj interfejs PGS Recall API ze swoją grą

Na tej stronie dowiesz się, jak wdrożyć w swojej grze interfejs Recall API. Najpierw zajmujemy się konfiguracją serwera gier i klienta pod kątem obsługi interfejsu API, a następnie opisujemy, jak przechowywać i pobierać tokeny.

Konfiguracja serwera gry

Skonfiguruj serwer gry, aby wywoływać interfejs Recall API na serwery Google.

1. Skonfiguruj projekt w usługach gier Play

Wykonaj instrukcje podane w artykule Konfigurowanie usług gier Google Play.

2. Konfigurowanie konta usługi dla gry

Postępuj zgodnie z instrukcjami tworzenia konta usługi. Na koniec powinien być plik JSON z danymi logowania konta usługi.

3. Pobierz bibliotekę Java po stronie serwera dla PlayGamesServices

Pobierz najnowszą bibliotekę google-api-services-games i prześlij ją na swój serwer.

4. Przygotowywanie danych logowania do wywołań interfejsu Recall API

Więcej informacji znajdziesz w sekcji Przygotowywanie do autoryzowanego wywołania interfejsu API.

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.services.games.Games;
import com.google.api.services.games.GamesScopes;

// ...

GoogleCredential credential =
  GoogleCredential.fromStream(new FileInputStream("<credentials>.json"))
    .createScoped(Collections.singleton(GamesScopes.ANDROIDPUBLISHER));

Games gamesApi =
    new Games.Builder(httpTransport, JSON_FACTORY, credential).build();

Konfiguracja klienta gry

Skonfiguruj klienta gry, aby pobierał identyfikatory sesji wycofywania używane przez serwer do komunikowania się z serwerami Google.

Pakiet SDK Java

Skonfiguruj w kliencie Java SDK i upewnij się, że w pliku Gradle umieść com.google.android.gms:play-services-games-v2:19.0.0 oraz com.google.android.gms:play-services-tasks:18.0.2 lub nowszą wersję.

Aby komunikować się z serwerami Google przy użyciu prawidłowych informacji, musisz zażądać od pakietu SDK klienta identyfikatora sesji wycofywania, który musisz wysłać do serwera gry.

Kotlin

PlayGames.getRecallClient(getActivity())
                .requestRecallAccess()
                .addOnSuccessListener { recallAccess -> val recallSessionId: String = recallAccess.getSessionId() }
                // Send the recallSessionId to your game server

Java

PlayGames.getRecallClient(getActivity())
  .requestRecallAccess()
  .addOnSuccessListener(
    recallAccess -> {
      String recallSessionId = recallAccess.getSessionId();
      // Send the recallSessionId to your game server
    });

Pakiet SDK Unity

Skonfiguruj w kliencie pakiet SDK Unity, jeśli jeszcze nie zostało to zrobione.

Aby komunikować się z serwerami Google przy użyciu prawidłowych informacji, musisz zażądać identyfikatora sesji wycofywania z pakietu SDK klienta i wysłać go na serwer gry.

PlayGamesPlatform.Instance.RequestRecallAccess(
    recallAccess => {
        string recallSessionId = recallAccess.sessionId;
        // Send the recallSessionId to your game server
    });

Używanie interfejsu Recall API na serwerze gry

Po skonfigurowaniu serwera i klienta możesz wysłać recallSessionID z klienta gry na serwer gry i postępować zgodnie z poniższymi wskazówkami, aby zacząć używać interfejsu Java API do przechowywania, pobierania lub usuwania tokenów wycofywania po stronie serwera.

Tokeny sklepu

Obiekt LinkPersonaRequest pozwala przechowywać profile użytkowników i token gry. Do wywoływania interfejsów API Google musisz używać interfejsu GoogleCredential (kontekst znajdziesz w artykule Wywoływanie interfejsów API Google). Pamiętaj, że zgodnie z ograniczeniem mocy zbioru 1:1 możesz połączyć tylko 1 profil klienta w danym momencie z 1 profilem usług gier Play (i odwrotnie).Ustaw zasadę rozwiązania problemu, jeśli ten profil usług gier Play został już połączony z innym profilem.

Opcjonalnie możesz ustawić dla tokena wartość TTL, która za pomocą obiektu Durations (Czas trwania) deklaruje, jak długo token jest prawidłowy. Możesz użyć parametru SetTtl() (jak pokazano poniżej), który ustawia datę ważności po upływie czasu podanego w metodzie, lub setExpireTime(), która określa dokładny czas wygaśnięcia tokenów.

Musisz zaszyfrować profil i token gry. Nie mogą one zawierać informacji umożliwiających identyfikację osoby. Ciągi znaków osobistych i tokenów mogą mieć maksymalnie 256 znaków, a każdy gracz w danej grze może przechowywać maksymalnie 20 tokenów lub profili.

W danym momencie każdy gracz może przechowywać tylko 1 token. Próba zapisania innego tokena o tym samym profilu spowoduje zastąpienie oryginalnego tokena.

import com.google.api.services.games.Games.Recall.LinkPersona;
import com.google.api.services.games.model.LinkPersonaRequest;
import com.google.api.services.games.model.LinkPersonaResponse;
import com.google.protobuf.util.Durations;

// ...

Games gamesApi =
    new Games.Builder(httpTransport, JSON_FACTORY, credential).build();

String recallSessionId = ... // recallSessionID from game client
String persona = ... // encrypted opaque string, stable for in-game account
String token = ... // encrypted opaque string encoding the progress line

LinkPersonaRequest linkPersonaRequest =
  LinkPersonaRequest.newBuilder()
    .setSessionId(recallSessionId)
    .setPersona(persona)
    .setToken(token)
    .setCardinalityConstraint(ONE_PERSONA_TO_ONE_PLAYER)
    .setConflictingLinksResolutionPolicy(CREATE_NEW_LINK)
    .setTtl(Durations.fromDays(7)) // Optionally set TTL for token
    .build();

LinkPersonaResponse linkPersonaResponse =
  gamesApi.recall().linkPersona(linkPersonaRequest).execute();

if (linkPersonaResponse.getState() == LINK_CREATED) {
  // success
}

Pobieranie tokenów

W zależności od potrzeb gry możesz uzyskać token na 3 sposoby. Możesz poprosić o:

  • Tokeny powiązane z bieżącą grą, w tym tokeny wycofywania ograniczone do gry.
  • Ostatni token zapisany we wszystkich grach należących do konta dewelopera.
  • Mając listę gier należących do konta dewelopera, wszystkie tokeny wycofywania powiązane z każdą z nich.

Tokeny wycofywania w zakresie gry

Aby pobrać tokeny wycofywania z bieżącej gry, pobierz recallSessionId od klienta i przekaż go do interfejsu API retrieveTokens:

import com.google.api.services.games.Games;
import com.google.api.services.games.model.RetrievePlayerTokensResponse;
import com.google.api.services.games.model.RecallToken;

// ...

String recallSessionId = ... // recallSessionID from game client

RetrievePlayerTokensResponse retrievePlayerTokensResponse =
  gamesApi.recall().retrieveTokens(recallSessionId).execute();

for (RecallToken recallToken : retrievePlayerTokensResponse.getTokens()) {
  String token recallToken.getToken();
  // Same string as was written in LinkPersona call
  // decrypt and recover in-game account
}

Ostatni token wycofywania we wszystkich grach należących do konta dewelopera

Aby pobrać w Konsoli Google Play najnowszy token zapisany we wszystkich grach należących do konta dewelopera, musisz pobrać recallSessionId od klienta i przekazać go do interfejsu API lastTokenFromAllDeveloperGames, jak pokazano w tym fragmencie kodu. W odpowiedzi możesz sprawdzić identyfikator aplikacji powiązany z tym tokenem.

import com.google.api.services.games.Games;
import com.google.api.services.games.model.RetrieveDeveloperGamesLastPlayerTokenResponse;
import com.google.api.services.games.model.GamePlayerToken;
import com.google.api.services.games.model.RecallToken;

// ...

String recallSessionId = ... // recallSessionID from game client

RetrieveDeveloperGamesLastPlayerTokenResponse response =
        gamesApi.recall().lastTokenFromAllDeveloperGames(recallSessionId)
        .execute();

if (response.hasGamePlayerToken()) {
    GamePlayerToken gamePlayerToken = response.getGamePlayerToken();

    // The ID of the application that the token is associated with.
    String applicationId = gamePlayerToken.getApplicationId();

    // Same string as was written in LinkPersona call.
    RecallToken recallToken = gamePlayerToken.getRecallToken();

    // Decrypt and recover in-game account.
}

wszystkie tokeny wycofywania w przypadku danej listy gier należących do konta dewelopera;

Aby pobrać wszystkie tokeny powiązane z listą gier należących do Twojego konta dewelopera w Konsoli Google Play, pobierz recallSessionId od klienta i przekaż go do interfejsu API gamesPlayerTokens. Podaj listę identyfikatorów aplikacji.

import com.google.api.services.games.Games;
import com.google.api.services.games.model.RetrieveGamesPlayerTokensResponse;
import com.google.api.services.games.model.GamePlayerToken;
import com.google.api.services.games.model.RecallToken;

// ...

String recallSessionId = ... // recallSessionID from game client

// Application IDs for which you would like to retrieve the recall tokens.
List<String> applicationIds = ...

RetrieveGamesPlayerTokensResponse response =
gamesApiClient
        .recall()
        .gamesPlayerTokens(recallSessionId)
        .setApplicationIds(applicationIds)
        .execute();

for (GamePlayerToken gamePlayerToken : response.getGamePlayerTokens()) {
    // The ID of the application that the token is associated with.
    String applicationId  = gamePlayerToken.getApplicationId();


    // Same string as was written in LinkPersona call.
    RecallToken recallToken = gamePlayerToken.getRecallToken();
    
    // Decrypt and recover in-game account.
}

Usuń token wycofywania

W razie potrzeby możesz też usunąć token wycofywania z tym wywołaniem:

import com.google.api.services.games.Games;
import com.google.api.services.games.model.UnlinkPersonaRequest;
import com.google.api.services.games.model.UnlinkPersonaResponse;

// ...

String recallSessionId = ...
String persona = ...
String token = ...

Games gamesApi =
    new Games.Builder(httpTransport, JSON_FACTORY, credential).build();

UnlinkPersonaRequest unlinkPersonaRequest =
  UnlinkPersonaRequest.newBuilder()
    .setSessionId(recallSessionId)
    .setPersona(persona)
    // .setToken(token) - alternatively set token, but not both
    .build();

UnlinkPersonaResponse unlinkPersonaResponse =
  gamesApi.recall().unlinkPersona(unlinkPersonaRequest).execute();

boolean unlinked = unlinkPersonaResponse.isUnlinked();

Włącz tryb bezprofilowy

Możesz włączyć ograniczoną funkcjonalność interfejsu Recall API dla użytkowników, którzy nie mają profili usług gier Play. Aby to zrobić:

  1. Włącz wycofywanie bez profilu dla projektu gry dla usług gier Play w Konsoli Play. Wybierz opcję „Włącz pamięć masową”.
  2. Zapoznaj się z dodatkowymi warunkami opisanymi w dalszej części tej sekcji.
  3. Dodaj do pliku manifestu aplikacji ten tag metadanych:
<meta-data
  android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
  android:value="true" />

Warunki dodatkowe

Oprócz przestrzegania Warunków korzystania z usług gier Play wyrażasz zgodę na to, aby w przypadku korzystania z interfejsu Recall API w przypadku użytkowników bez profilu usług gier Play, który umożliwia udostępnianie Google danych użytkownika bez profilu usług gier Play, za pomocą interfejsu Recall API.