Z tego artykułu dowiesz się, jak zaimplementować w swojej grze interfejs Recall API. Najpierw opisuje, jak skonfigurować serwer i klienta gry, aby obsługiwały interfejs 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 jeszcze wykonane) Postępuj zgodnie z instrukcjami w artykule Konfigurowanie usług gier Play.
.2. Konfigurowanie konta usługi na potrzeby gry
Postępuj zgodnie z instrukcjami tworzenia konta usługi. Na koniec powinien pojawić się plik 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 serwer do komunikacji z serwerami Google.
Java SDK
Skonfiguruj pakiet Java SDK w kliencie i upewnij się, że w pliku Gradle masz wersję com.google.android.gms:play-services-games-v2:19.0.0
lub com.google.android.gms:play-services-tasks:18.0.2
albo nowszą.
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 klienckiej.
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ć 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 Recall po stronie serwera.
Przechowywanie tokenów
Osobowość użytkownika i token gry można przechowywać za pomocą obiektu LinkPersonaRequest
. Aby wywoływać interfejsy API Google, musisz użyć GoogleCredential
(więcej informacji znajdziesz w sekcji Wywoływanie interfejsów API Google). Pamiętaj, że zgodnie z ograniczeniem liczności 1:1 możesz połączyć tylko 1 profil z 1 profilem w usługach gier Play (i odwrotnie).Ustaw zasady rozwiązywania konfliktów na wypadek, gdyby ten profil w usługach gier Play był już połączony z innym profilem.
Opcjonalnie możesz ustawić czas życia tokena, który określa, jak długo token jest ważny, za pomocą obiektu Durations. Możesz to zrobić za pomocą funkcji SetTtl()
(jak pokazano poniżej), która ustawia datę ważności na podstawie czasu określonego w metodzie, lub setExpireTime()
, która pozwala ustawić dokładny czas wygaśnięcia tokenów.
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. Każdy gracz może mieć maksymalnie 20 tokenów lub person w każdej grze.
W danym momencie w przypadku każdego gracza można przechowywać tylko 1 token na profil. Próba zapisania kolejnego tokena z tą samą personą 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 pobrać token na 3 sposoby. Możesz poprosić o:
- tokeny powiązane z bieżącą grą, w tym tokeny wycofania o zasięgu 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 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 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
z 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
Aby włączyć ograniczoną funkcjonalność interfejsu Recall API w przypadku użytkowników, którzy nie mają profili PGS, wykonaj te czynności:
- Włącz wycofywanie bez profilu w projekcie gry w usługach gier Play w Konsoli Play.
- Zapoznaj się z dodatkowymi warunkami opisanymi w dalszej części tej sekcji.
- 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 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 w usługach gier Play, co umożliwia udostępnianie firmie Google danych użytkowników bez profilu w usługach gier Play, przed udostępnieniem takich danych firmie Google musisz przekazać użytkownikowi odpowiednie powiadomienie opisujące:
- udostępnianie danych firmie Google w celu włączenia funkcji łączenia konta w Gry Play;
- Dostępność ustawień zarządzania takim udostępnianiem, np. ustawień Gier Play.
- przetwarzanie takich danych zgodnie z Polityką prywatności Google oraz uzyskanie odpowiedniej zgody użytkownika końcowego na takie udostępnianie danych, która spełnia wszystkie obowiązujące wymagania prawne.