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 Ihren Gameserver und Client für die API einrichten. Anschließend wird erläutert, wie Sie Tokens speichern und abrufen.

Gameserver-Einrichtung

Richten Sie Ihren Gameserver so ein, dass er Recall API-Aufrufe an Google-Server sendet.

1. Play-Spieldienste-Projekt einrichten

Folgen Sie der Anleitung unter Google Play-Spieldienste einrichten, falls Sie das noch nicht getan haben.

2. Dienstkonto für das Spiel einrichten

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

3. Serverseitige Java-Bibliothek für PlayGamesServices herunterladen

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

4. Anmeldedaten für Recall API-Aufrufe vorbereiten

Weitere Informationen finden Sie unter Autorisierten API-Aufruf vorbereiten.

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

Einrichtung des Game-Clients

Richten Sie Ihren Game-Client so ein, dass er die Recall-Sitzungs-IDs abrufen kann, die Ihr Server zur Kommunikation mit Google-Servern verwendet.

Java SDK

Richte das Java SDK in deinem Client ein und füge deiner Gradle-Datei 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 hinzu.

Damit Sie mit den richtigen Informationen mit den Google-Servern kommunizieren können, müssen Sie vom Client-SDK eine Sitzungs-ID für die Rückruffunktion anfordern, die Sie an den Server Ihres Spiels senden.

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

Richte das Unity SDK in deinem Client ein, falls noch nicht geschehen.

Damit Sie mit den richtigen Informationen mit den Google-Servern kommunizieren können, müssen Sie eine Recall-Sitzungs-ID vom Client-SDK anfordern und an den Server Ihres Spiels senden.

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

Recall API auf Ihrem Gameserver verwenden

Nachdem Sie Ihren Server und Client konfiguriert haben, können Sie die recallSessionID von Ihrem Spieleclient an Ihren Spieleserver senden. Folgen Sie dann der Anleitung unten, um die Java API zu verwenden, um die Recall-Tokens serverseitig zu speichern, abzurufen oder zu löschen.

Store-Tokens

Die Persona und das Spiel-Token des Nutzers können mit dem LinkPersonaRequest-Objekt gespeichert werden. Sie müssen GoogleCredential verwenden, um Google APIs aufzurufen. Weitere Informationen finden Sie unter Google APIs aufrufen. Gemäß der 1:1-Kardinaltätsbeschränkung können Sie jeweils nur eine Persona mit einem Play-Spieldienste-Profil verknüpfen (und umgekehrt).Legen Sie die Auflösungsrichtlinie fest, falls dieses Play-Spieldienste-Profil bereits mit einer anderen Persona verknüpft wurde.

Optional kannst du eine TTL für das Token festlegen, die angibt, wie lange das Token gültig ist. Verwende dazu ein Durations-Objekt. Sie können dies mit SetTtl() festlegen (wie unten dargestellt), wodurch das Ablaufdatum anhand der in der Methode angegebenen Zeit festgelegt wird, oder mit setExpireTime(), wodurch Sie ein genaues Ablaufdatum für die Tokens festlegen können.

Sie müssen das Persona- und das Spieltoken verschlüsseln. Außerdem dürfen sie keine personenidentifizierbaren Informationen enthalten. Persona- und Token-Strings dürfen maximal 256 Zeichen lang sein. Pro Spieler und Spiel können maximal 20 Token oder Personas gespeichert werden.

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

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
}

Tokens abrufen

Je nach den Anforderungen Ihres Spiels haben Sie drei Möglichkeiten, ein Token abzurufen. Sie können Folgendes anfordern:

  • Die mit dem aktuellen Spiel verknüpften Tokens, einschließlich Rückruftokens auf Spielebene.
  • Das letzte Token, das in allen Spielen gespeichert ist, die dem Entwicklerkonto gehören.
  • Eine Liste der Spiele, deren Inhaber das Entwicklerkonto ist, und alle mit jedem Spiel verknüpften Rückruf-Tokens.

Rückruftokens auf Spielebene

Wenn du die Rückruf-Tokens aus dem aktuellen Spiel abrufen möchtest, musst du recallSessionId vom Client abrufen und an die retrieveTokens API übergeben:

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
}

Neuestes Widerrufstoken für alle Spiele, die dem Entwicklerkonto gehören

Wenn Sie das neueste Token abrufen möchten, das für alle Spiele gespeichert ist, die dem Entwicklerkonto in der Google Play Console gehören, müssen Sie das recallSessionId vom Client abrufen und an die lastTokenFromAllDeveloperGames API übergeben, wie im folgenden Code-Snippet gezeigt. In der Antwort kannst du die Anwendungs-ID prüfen, die mit diesem Token verknüpft ist.

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.
}

Alle Widerrufstokens für eine bestimmte Liste von Spielen, die dem Entwicklerkonto gehören

Wenn Sie alle Tokens abrufen möchten, die mit einer Liste von Spielen verknüpft sind, die zu Ihrem Entwicklerkonto in der Google Play Console gehören, rufen Sie die recallSessionId vom Client ab und übergeben Sie sie an die gamesPlayerTokens API. Geben Sie eine Liste von Anwendungs-IDs an.

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.
}

Widerrufstoken löschen

Bei Bedarf können Sie das Widerrufstoken auch mit dem folgenden Aufruf löschen:

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

Modus ohne Profil aktivieren

So aktivieren Sie die eingeschränkte Recall API-Funktion für Nutzer ohne Play-Spieldienste-Profil:

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

Zusätzliche Bedingungen

Sie unterliegen nicht nur den Nutzungsbedingungen für Google Play-Spieldienste, sondern stimmen auch zu, dass Sie, wenn Sie die Recall API für Nutzer ohne PGS-Profil verwenden, die Daten des Endnutzers mit Google teilen können, ohne dass dieser ein Play-Spieldienste-Profil hat, dem Endnutzer vor der Weitergabe solcher Daten an Google eine entsprechende Mitteilung mit folgenden Angaben zukommen lassen müssen:

  1. Sie geben die Daten für Google frei, um die Play Spiele-Kontoverknüpfung zu aktivieren.
  2. Verfügbarkeit von Einstellungen zur Verwaltung solcher Freigaben, z. B. über die Play Spiele-Einstellungen
  3. die Verarbeitung solcher Daten gemäß der Datenschutzerklärung von Google und die Einholung der erforderlichen Einwilligung der Endnutzer für eine solche Weitergabe, die allen anwendbaren gesetzlichen Anforderungen entspricht.