Zintegruj interfejs PGS Recall API ze swoją grą

Na tej stronie znajdziesz informacje o tym, jak zaimplementować interfejs Recall API w swojej grze. Najpierw omówimy konfigurowanie serwera i klienta gry, aby obsługiwały interfejs API, a potem pokażemy, jak przechowywać i pobierać tokeny.

Konfiguracja serwera gry

Skonfiguruj serwer gry, aby wykonywał wywołania interfejsu Recall API na serwerach Google.

1. Konfigurowanie projektu usług gier Play

(jeśli nie zostało to jeszcze zrobione) wykonaj instrukcje konfigurowania usług Google Play Games.

.

2. Skonfiguruj konto usługi dla gry

Postępuj zgodnie z instrukcjami dotyczącymi tworzenia konta usługi. Na koniec powinieneś mieć plik JSON z danymi logowania do konta usługi.

3. Pobierz bibliotekę Java po stronie serwera dla PlayGamesServices

Pobierz najnowszą wersję pakietu google-api-services-games library i prześlij go na serwer.

4. Przygotuj dane logowania do wywołań interfejsu Recall API

Więcej informacji znajdziesz w artykule Przygotowanie 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 komunikacji z serwerami Google.

Pakiet Java SDK

Skonfiguruj pakiet Java SDK w kliencie i upewnij się, że w pliku gradle uwzględniasz wersję com.google.android.gms:play-services-games-v2:19.0.0com.google.android.gms:play-services-tasks:18.0.2 lub nowszą.

Aby komunikować się z serwerami Google, używając prawidłowych informacji, musisz poprosić o identyfikator sesji Recall z pakietu SDK klienta, który wysyłasz na serwer 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 Unity SDK

Jeśli jeszcze tego nie zrobiono, skonfiguruj pakiet SDK Unity w swoim kliencie.

Aby przesyłać prawidłowe informacje do serwerów Google, musisz poprosić o identyfikator sesji przywracania z poziomu klienta SDK i przesłać go na serwer gry.

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

Korzystanie z interfejsu Recall API na serwerze gry

Po skonfigurowaniu serwera i klienta możesz wysłać recallSessionIDz klienta gry na serwer gry. Następnie postępuj zgodnie z instrukcjami poniżej, aby zacząć używać interfejsu Java API do przechowywania, pobierania i usuwania tokenów Recall po stronie serwera.

Przechowywanie tokenów

Dane osobowe użytkowników i token gry można przechowywać za pomocą obiektu LinkPersonaRequest. Do wywoływania interfejsów API Google musisz używać interfejsu GoogleCredential (patrz Wywoływanie interfejsów API Google). Pamiętaj, że zgodnie z ograniczeniem liczby 1:1 możesz połączyć tylko jedną personę z jednym profilem PGS (i odwrotnie).W razie, gdy profil PGS jest już połączony z inną personą, ustaw politykę dotyczącą rozdzielczości.

Opcjonalnie możesz ustawić czas życia tokena, który określa, jak długo token jest ważny, za pomocą obiektu Durations. Możesz ustawić to za pomocą atrybutu SetTtl() (jak pokazano poniżej), który ustawia datę ważności na podstawie czasu określonego w metodzie, lub atrybutu setExpireTime(), który pozwala ustawić dokładny czas ważności tokenów.

Musisz zaszyfrować personę i token gry. Nie mogą one zawierać danych umożliwiających identyfikację. Ciągi znaków związane z personami i tokenami mogą mieć maksymalnie 256 znaków. W przypadku każdego gracza i każdej gry można przechowywać maksymalnie 20 tokenów lub person.

W danym momencie można przechowywać tylko 1 token na konto na jednego gracza. Próba zapisania innego tokena z tą samą personą powoduje zastąpienie pierwotnego 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 wybrać jedną z 3 opcji pobierania tokena. Możesz poprosić o:

  • tokeny powiązane z bieżącą grą, w tym tokeny przywołania w zakresie gry;
  • Ostatni token przechowywany we wszystkich grach należących do konta dewelopera.
  • Na podstawie listy gier należących do konta dewelopera wszystkie tokeny wycofania powiązane z każdą grą.

Tokeny wycofywania ograniczone do gry

Aby pobrać tokeny przywołania z obecnej gry, pobierz z klienta tokenrecallSessionId 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
}

najnowszy token przywrócenia we wszystkich grach należących do konta dewelopera;

Aby pobrać najnowszy token przechowywany we wszystkich grach należących do konta dewelopera w Konsoli Google Play, musisz uzyskać recallSessionIdz klienta i przekazać go do interfejsu API lastTokenFromAllDeveloperGames, jak pokazano w tym fragmencie kodu. W ramach 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 przywrócenia na danej liście 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 z 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.
}

Usuwanie tokena przywołania

W razie potrzeby możesz też usunąć token przywołania za pomocą tego wywołania:

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łączanie trybu bez profilu

Aby włączyć ograniczoną funkcjonalność interfejsu Recall API dla użytkowników, którzy nie mają profili PGS, wykonaj te czynności:

  1. Włącz wycofywanie bez profilu w projekcie gry w usługach gier Play w Konsoli Play. Wybierz opcję „Włącz pamięć”.
  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" />

Dodatkowe warunki

Oprócz Warunków korzystania z usług Usług gier Play zgadzasz się, że jeśli używasz interfejsu Recall API w przypadku użytkowników bez profilu w usługach gier Play, co umożliwia udostępnianie danych użytkownika Google bez jego profilu w usługach gier Play, przed udostępnieniem takich danych Google musisz przekazać użytkownikowi odpowiednie powiadomienie zawierające te informacje:

  1. Udostępnianie danych Google w celu umożliwienia korzystania z funkcji łączenia kont w Gierach Play.
  2. Dostępność ustawień umożliwiających zarządzanie takim udostępnianiem, np. w ustawieniach Gier Play.
  3. przetwarzanie takich danych zgodnie z polityką prywatności Google oraz uzyskanie odpowiedniej zgody użytkownika na takie udostępnianie, która spełnia wszystkie obowiązujące wymogi prawne;