Zintegruj interfejs PGS Recall API ze swoją grą

Z tego artykułu dowiesz się, jak zaimplementować w grze interfejs Recall API. Najpierw opisuje konfigurowanie serwera i klienta gry pod kątem obsługi interfejsu API, a potem wyjaśnia, jak przechowywać i pobierać tokeny.

Konfiguracja serwera gry

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

1. Konfigurowanie projektu usług gier Play

Jeśli nie zostało to jeszcze zrobione, wykonaj instrukcje z artykułu Konfigurowanie Usług gier Play.

.

2. Konfigurowanie konta usługi na potrzeby gry

Postępuj zgodnie z instrukcjami tworzenia konta usługi. Na końcu powinna pojawić się informacja o utworzeniu pliku JSON z danymi logowania do konta usługi.

3. Pobieranie biblioteki Java po stronie serwera dla PlayGamesServices

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

4. Przygotowywanie danych logowania do wywoływania interfejsu Recall API

Więcej informacji znajdziesz w artykule Przygotowywanie się do wykonania 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 tak, aby pobierał identyfikatory sesji wycofywania używane przez nasz serwer do komunikacji z serwerami Google.

Java SDK

Skonfiguruj pakiet SDK Java w kliencie i upewnij się, że zawiera on com.google.android.gms:play-services-games-v2:19.0.0

com.google.android.gms:play-services-tasks:18.0.2 lub nowszej w pliku Gradle.

Aby komunikować się z serwerami Google i przesyłać prawidłowe informacje, musisz poprosić pakiet SDK klienta o identyfikator sesji Recall, który następnie przesył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 nie zostało to jeszcze zrobione, skonfiguruj pakiet SDK Unity w aplikacji klienta.

Aby komunikować się z serwerami Google i przesyłać prawidłowe informacje, musisz poprosić pakiet SDK klienta o identyfikator sesji Recall i przesł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ć recallSessionIDz klienta gry na serwer gry i postępować zgodnie z tymi wskazówkami, aby zacząć używać interfejsu Java API do przechowywania, pobierania lub usuwania tokenów Recall po stronie serwera.

Przechowywanie tokenów

Konto gracza w interfejsie Recall API w Grach Google Play składa się z 2 informacji:

  • Profil, który służy jako stały identyfikator konta w grze.
  • token, który służy jako klucz do bezpiecznego logowania gracza na konto;

Możesz przechowywać profil użytkownika i token za pomocą LinkPersonaRequestobiektu. Użyj GoogleCredential, aby wywołać interfejsy API Google (więcej informacji znajdziesz w sekcji Wywoływanie interfejsów API Google). Profil ma ograniczenie liczności 1:1: pojedynczy profil PGS może zawierać tylko jeden profil, a profil może istnieć tylko w jednym profilu PGS. Ustaw zasady rozwiązywania konfliktów między linkami, aby określić, jak rozwiązywać naruszenia ograniczenia liczności 1:1.

Opcjonalnie ustaw czas ważności tokena. Użyj SetTtl() z obiektem Durations, aby ustawić czas życia lub podać dokładny czas wygaśnięcia za pomocą setExpireTime().

Musisz zaszyfrować token osoby i token gry. Nie mogą one zawierać danych umożliwiających identyfikację osób. Ciągi znaków dotyczące persony i tokena mogą mieć maksymalnie 256 znaków.

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 pobrać token na 3 sposoby. Możesz poprosić o:

  • Tokeny powiązane z bieżącą grą, w tym tokeny wycofania 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 w zakresie gry

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

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 wycofania 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ć recallSessionId od klienta i przekazać go do interfejsu lastTokenFromAllDeveloperGames API, 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 wycofania z danej listy gier należących do konta dewelopera

Aby pobrać wszystkie tokeny powiązane z listą gier, które należą do Twojego konta dewelopera w Konsoli Google Play, uzyskaj recallSessionId od klienta i przekaż go do interfejsu gamesPlayerTokens API. 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 wycofania

W razie potrzeby możesz też usunąć token wycofania 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

Możesz włączyć ograniczoną funkcjonalność interfejsu Recall API dla użytkowników, którzy nie mają profili PGS, wykonując 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 gier Play musisz spełniać te wymagania: jeśli korzystasz z interfejsu Recall API w przypadku użytkowników bez profilu w Usługach gier Play, co umożliwia udostępnianie firmie Google danych użytkownika bez profilu w Usługach gier Play, przed udostępnieniem takich danych firmie Google musisz przekazać użytkownikowi odpowiednie powiadomienie zawierające te informacje:

  1. udostępnianie danych firmie Google w celu włączenia funkcji łączenia konta w Gry Play;
  2. Dostępność ustawień zarządzania takim udostępnianiem, np. ustawień Gier Play.
  3. Przetwarzanie takich danych musi odbywać się zgodnie z Polityką prywatności Google, a na udostępnianie tych danych musisz uzyskać odpowiednią zgodę użytkowników, która spełnia wszystkie obowiązujące wymagania prawne.