PGS Recall API in dein Spiel integrieren

Auf dieser Seite wird erläutert, wie Sie die Recall API in Ihrem Spiel implementieren. Zuerst wird beschrieben, wie Sie den Spieleserver und den Client zur Unterstützung der API einrichten. Anschließend erfahren Sie, wie Tokens gespeichert und abgerufen werden.

Gameserver einrichten

Richte deinen Gameserver so ein, dass Recall API-Aufrufe an Google-Server gesendet werden.

1. Play-Spieldienste-Projekt einrichten

Falls noch nicht geschehen: Folgen Sie der Anleitung unter Google Play-Spieldienste einrichten.

2. Dienstkonto für das Spiel einrichten

Folgen Sie der Anleitung zum Erstellen eines Dienstkontos. Am Ende sollten Sie eine JSON-Datei mit Dienstkonto-Anmeldedaten haben.

3. Serverseitige Java-Bibliothek für PlayGamesServices herunterladen

Laden Sie die neueste Bibliothek google-api-services-games herunter und auf Ihren Server hoch.

4. Anmeldedaten für Recall API-Aufrufe vorbereiten

Weitere Informationen finden Sie unter Vorbereiten eines autorisierten API-Aufrufs.

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();

Spielclient einrichten

Richte deinen Spieleclient so ein, dass er die Recall-Sitzungs-IDs abruft, die von deinem Server für die Kommunikation mit Google-Servern verwendet werden.

Java-SDK

Richten Sie das Java SDK in Ihrem Client ein und achten Sie darauf, dass com.google.android.gms:play-services-games-v2:19.0.0 und com.google.android.gms:play-services-tasks:18.0.2 oder höher in der Gradle-Datei enthalten sind.

Damit du mit den Servern von Google mit den richtigen Informationen kommunizieren kannst, musst du eine Recall-Sitzungs-ID vom Client SDK anfordern, die du an den Server deines Spiels sendest.

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
    });

Unity SDK

Richten Sie das Unity SDK in Ihrem Client ein, falls noch nicht geschehen.

Um mit den Servern von Google mit den richtigen Informationen zu kommunizieren, musst du eine Recall-Sitzungs-ID vom Client SDK anfordern und an den Server deines Spiels senden.

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

Recall API auf deinem Spieleserver verwenden

Nachdem du den Server und den Client konfiguriert hast, kannst du das recallSessionID von deinem Spieleclient an deinen Spieleserver senden und der Anleitung unten folgen, um mit der Java API zum serverseitigen Speichern, Abrufen oder Löschen der Recall-Tokens zu beginnen.

Store-Tokens

Die Persona und das Spiel-Token des Nutzers können mithilfe des LinkPersonaRequest-Objekts gespeichert werden. Sie müssen GoogleCredential verwenden, um Google APIs aufzurufen. Weitere Informationen finden Sie unter Google APIs aufrufen. Gemäß der 1:1-Kardinalitätsbeschränkung kannst du jeweils nur eine Persona mit einem Play-Spieldienste-Profil verknüpfen (und umgekehrt).Du solltest die Lösungsrichtlinie für den Fall festlegen, dass dieses Play-Spieldienste-Profil bereits mit einer anderen Persona verknüpft wurde.

Optional können Sie eine TTL für das Token festlegen. Damit wird mithilfe eines Durations-Objekts angegeben, wie lange das Token gültig ist. Sie können dies mit SetTtl() festlegen (siehe unten), wodurch das Ablaufdatum auf den in der Methode angegebenen Zeitraum festgelegt wird. Mit setExpireTime() können Sie eine genaue Zeit festlegen, zu der die Tokens ablaufen.

Sie müssen die Persona und das Spiel-Token verschlüsseln. Diese dürfen keine personenidentifizierbaren Informationen enthalten. Persona- und Token-Strings dürfen maximal 256 Zeichen lang sein und es können maximal 20 Tokens oder Personas pro Spieler und Spiel gespeichert werden.

Pro Persona und Spieler kann jeweils nur ein Token gespeichert werden. Wenn Sie versuchen, ein anderes Token mit derselben Persona zu speichern, wird das ursprüngliche Token überschrieben.

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
}

Tokens abrufen

Du musst recallSessionId abrufen, um das Recall-Token abzurufen

aus dem Client und übergeben Sie sie an die retrieveTokens API:

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
}

Recall-Token löschen

Bei Bedarf können Sie das Recall-Token auch mit dem folgenden Aufruf löschen:

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();

Profillosen Modus aktivieren

Du kannst die eingeschränkten Recall API-Funktionen für Nutzer ohne Play-Spieldienste-Profile aktivieren. Das geht so:

  1. Aktiviere in der Play Console den profillosen Rückruf für dein PGS-Spielprojekt. Wählen Sie die Option
  2. Lesen Sie die zusätzlichen Nutzungsbedingungen, die weiter unten in diesem Abschnitt beschrieben werden.
  3. Fügen Sie Ihrem App-Manifest das folgende Metadaten-Tag hinzu:
<meta-data
  android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
  android:value="true" />

Zusätzliche Bedingungen

Sie unterliegen nicht nur den Nutzungsbedingungen der Play-Spieldienste, Sie erklären sich auch damit einverstanden, dass Sie bei der Verwendung der Recall API für Nutzer ohne Play-Spieldienste-Profil, die die Weitergabe von Endnutzerdaten an Google ermöglicht, ohne dass sie ein Play-Spieldienste-Profil haben, den Endnutzer über eine entsprechende Mitteilung informieren müssen, die folgende Anforderungen erfüllt: 1) Ihre Freigabe der Daten an Google und die entsprechende Freigabe der Daten an Google im Rahmen der entsprechenden Datenverarbeitung im Rahmen der entsprechenden Datenverarbeitung.