Zintegruj interfejs PGS Recall API ze swoją grą

Na tej stronie dowiesz się, jak wdrożyć interfejs Recall API w swojej grze. Najpierw omówimy konfigurację serwera gier i klienta pod kątem obsługi interfejsu API, a następnie sposób przechowywania i pobierania tokenów.

Konfiguracja serwera gry

Skonfiguruj serwer gry tak, aby wysyłał wywołania interfejsu Recall API do serwerów Google.

1. Konfigurowanie projektu w usługach gier Play

Postępuj zgodnie z instrukcjami podanymi w artykule Konfigurowanie usług gier Google Play.

2. Skonfiguruj konto usługi gry

Wykonaj instrukcje tworzenia konta usługi. Na końcu powinien być plik JSON z danymi logowania do 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 API Recall

Więcej informacji znajdziesz w sekcji na temat przygotowywania 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 SDK Java

Skonfiguruj w kliencie pakiet SDK Java i pamiętaj, by w pliku Gradle umieścić com.google.android.gms:play-services-games-v2:19.0.0 i com.google.android.gms:play-services-tasks:18.0.2 lub nowsze.

Aby komunikować się z serwerami Google przy użyciu prawidłowych informacji, musisz zażądać od pakietu SDK klienta identyfikatora sesji, 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 SDK dla Unity

Skonfiguruj pakiet SDK Unity w kliencie, jeśli jeszcze nie został ukończony.

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

Profil gry i token gry użytkownika można przechowywać za pomocą obiektu LinkPersonaRequest. 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ć 1 profil usług gier jednocześnie z 1 profilem usług gier Play (i odwrotnie).Ustaw zasady rozwiązywania problemów na wypadek, gdyby ten profil usług gier Play został już połączony z innym profilem.

Opcjonalnie możesz ustawić wartość TTL tokena, która określa za pomocą obiektu Durations czas ważności tokena. Możesz to zrobić za pomocą pola SetTtl() (jak poniżej), który ustawia datę ważności od okresu podanego w metodzie, lub setExpireTime(), który pozwala ustawić dokładny czas wygaśnięcia tokenów.

Musisz zaszyfrować profil użytkownika i token gry. Nie mogą one zawierać informacji umożliwiających identyfikację osoby. Ciągi znaków tożsamości i tokenów mogą mieć maksymalnie 256 znaków, a na gracza może być przechowywanych maksymalnie 20 tokenów lub profili klientów.

W danym momencie można przechowywać tylko 1 token na profil na gracza. Próba zapisania innego tokena o tym samym profilu klienta spowoduje zastąpienie pierwotnego.

import com.google.api.services.games.Games.Recall.LinkPersona;
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

Aby pobrać token wycofywania, musisz uzyskać recallSessionId

od klienta i przekaż go do interfejsu API retrieveTokens:

import com.google.api.services.games.Games.Recall.RetrieveTokens;

// ...

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
}

Usuń token wycofywania

W razie potrzeby możesz też usunąć token wycofywania, używając tego wywołania:

import com.google.api.services.games.Games.Recall.UnlinkPersona;

// ...

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ć ograniczone funkcje interfejsu Recall API dla użytkowników, którzy nie mają profili usług gier Play. Aby to zrobić, wykonaj te czynności:

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

Warunki dodatkowe

Oprócz podlegania Warunkom korzystania z usług gier Play zgadzasz się, że jeśli używasz 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, przed udostępnieniem Google takich danych użytkownik musi przekazać użytkownikowi (w ramach Zasad dotyczących przetwarzania) odpowiednie powiadomienia z opisem 1) udostępniania takich danych i udostępniania odpowiednich ustawień dotyczących prywatności w Grach Play oraz udostępniania odpowiednich ustawień dotyczących prywatności w Grach Play w celu umożliwienia udostępniania odpowiednich ustawień prywatności w Grach Play.