Zintegruj interfejs PGS Recall API ze swoją grą

Z tego artykułu dowiesz się, jak wdrożyć interfejs Recall API w Twojej gry. Najpierw zajmujemy się konfigurowaniem serwera gry i klienta do obsługi API, a następnie pokazuje, jak przechowywać i odbierać tokeny.

Konfiguracja serwera gry

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

1. Skonfiguruj projekt w usługach gier Play

(Jeśli jeszcze nie zostało to zrobione) Postępuj zgodnie z instrukcjami w artykule Konfigurowanie Google Play. Usługi gier.

2. Konfigurowanie konta usługi dla gry

Wykonaj instrukcje dotyczące tworzenia usługi. . Na końcu powinien być plik JSON z danymi logowania konta usługi.

3. Pobierz bibliotekę Java po stronie serwera dla PlayGamesServices

Pobierz najnowsze google-api-services-games biblioteka i prześlij go na swój serwer.

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

Patrz sekcja Przygotowanie do utworzenia autoryzowanego interfejsu API zadzwoń .

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 komunikacją z serwerami Google.

Pakiet SDK Java

Skonfiguruj w kliencie pakiet SDK Java. pamiętaj, aby dodać com.google.android.gms:play-services-games-v2:19.0.0 i com.google.android.gms:play-services-tasks:18.0.2 lub więcej na Gradle.

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

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

Jeśli jeszcze nie zostało to zrobione, skonfiguruj pakiet Unity SDK w .

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 do pakietu serwera.

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 i postępuj zgodnie z poniższymi wskazówkami, za pomocą interfejsu Java API do przechowywania, pobierania i usuwania tokenów wycofywania po stronie serwera.

Tokeny sklepu

Lista użytkowników Tokeny i profili użytkowników można przechowywać za pomocą LinkPersonaRequest obiektu. Do wywoływania interfejsów API Google należy używać interfejsu GoogleCredential (patrz Połączenia Google Interfejsy API , aby uzyskać kontekst). Pamiętaj, że zgodnie z mocą 1:1 ograniczenie, możesz połączyć tylko 1 profil klienta do 1 profilu usług gier Play naraz (i odwrotnie).Ustaw rozdzielczość zasad w przypadku tego, że ten profil usług gier Play został już połączony z innym profilem.

Opcjonalnie możesz ustawić dla tokena wartość TTL, która określa, jak długo token jest prawidłowy przy użyciu Czasy trwania obiektu. Możesz użyć parametru SetTtl() (jak pokazano poniżej), który ustawia datę wygaśnięcia po upływie czasu podanego w metodzie; setExpireTime(), która pozwala ustawić dokładny czas wygaśnięcia tokenów.

Musisz zaszyfrować profil i token gry. Nie mogą one zawierać osobistej informacjami umożliwiającymi identyfikację. Ciągi znaków dotyczące profilu klienta i tokenów mogą mieć maksymalnie 256 znaków, przy czym w każdej z nich można przechowywać maksymalnie 20 tokenów lub profili osób gracza na mecz.

W danym momencie każdy gracz może przechowywać tylko 1 token. Próbujemy przechowywać inny token o tym samym profilu, zastąpi pierwotny token.

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 konta są dostępne 3 sposoby uzyskania tokena do Twoich potrzeb. Dostępne opcje poproś 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.
  • Biorąc pod uwagę listę gier należących do konta dewelopera, wszystkie tokeny wycofywania powiązane z każdą grą.
.

Tokeny wycofywania w zakresie gry

Aby odzyskać tokeny wycofywania z bieżącej gry, pobierz recallSessionId z 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ć najnowszy token zapisany we wszystkich grach należących do dewelopera w Konsoli Google Play, musisz pobrać recallSessionId z klienta i przekazać go do interfejsu lastTokenFromAllDeveloperGames API zgodnie z w poniższym fragmencie kodu. W odpowiedzi możesz sprawdzić, identyfikator aplikacji powiązany za pomocą tego tokena.

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 swojego konta dewelopera w Konsoli Google Play, pobierz recallSessionId z klienta i przekazać 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:

  1. Włącz wycofywanie bez profilu w projekcie gry w usługach gier Play na stronie Dewelopera w Google Play Konsola. Wybierz opcję „Włącz”.
pamięci masowej”.
  2. Zapoznaj się z dodatkowymi warunkami opisanymi w dalszej części tej sekcji.
  3. Dodaj do aplikacji następujący tag metadanych: plik manifestu:
<meta-data
  android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
  android:value="true" />

Warunki dodatkowe

Obowiązują Warunki korzystania z usług gier Play usługi, użytkownik akceptuje fakt, że jeśli używasz interfejsu Recall API w przypadku użytkowników bez profilu usług gier Play, co umożliwia udostępnianie danych użytkownika w Google, jeśli użytkownik nie ma profilu usług gier Play, Użytkownik musi, przed udostępnieniem takich danych Google, udostępnić użytkownikowi odpowiednie powiadomienie z opisem: 1) udostępnienie Google danych w celu umożliwienia Gry Play funkcji łączenia kont, 2) dostępności ustawień do zarządzania np. udostępniania, np. w ustawieniach Gier Play; oraz 3) przetwarzaniu tych danych zgodnie z Polityką prywatności Google i uzyskać odpowiednich użytkowników zgody na udostępnianie takich danych, która spełnia wszystkie obowiązujące wymagania prawne.