PGS Recall API in dein Spiel integrieren

Auf dieser Seite wird erläutert, wie Sie die Recall API in für Ihr Spiel. Zunächst geht es um die Einrichtung Ihres Spieleservers und -clients zur Unterstützung des API und erklärt dann, 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 einrichten Spieldienste.

2. Dienstkonto für das Spiel einrichten

Folgen Sie der Anleitung zum Erstellen eines Dienstes Konto. Am Ende sollten Sie eine JSON-Datei mit Anmeldedaten für das Dienstkonto haben.

3. Serverseitige Java-Bibliothek für PlayGamesServices herunterladen

Aktuelle Version von google-api-services-games herunterladen Mediathek und laden Sie es auf Ihren Server hoch.

4. Anmeldedaten für Recall API-Aufrufe vorbereiten

Siehe Erstellung einer autorisierten API vorbereiten Anruf .

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 Spieleclients

Spieleclient so einrichten, dass die vom Server verwendeten Sitzungs-IDs abgerufen werden mit Google-Servern kommunizieren.

Java-SDK

Richten Sie das Java SDK in Ihrem Client ein. müssen Sie com.google.android.gms:play-services-games-v2:19.0.0 und com.google.android.gms:play-services-tasks:18.0.2 oder mehr in deinem Gradle-Datei.

Um mit den richtigen Informationen mit den Google-Servern zu kommunizieren, müssen Sie vom Client-SDK eine Recall-Sitzungs-ID anfordern, die Sie an das Server.

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 Konto ein, Kunde.

Um mit den richtigen Informationen mit den Google-Servern zu kommunizieren, müssen Sie vom Client-SDK eine Recall-Sitzungs-ID anfordern und sie an das Server.

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

Recall API auf dem Gameserver verwenden

Nachdem du Server und Client konfiguriert hast, kannst du die recallSessionID senden. vom Spieleclient an den Gameserver übertragen. Folgen Sie dann der Anleitung unten, mithilfe der Java API die Recall-Tokens serverseitig speichern, abrufen oder löschen.

Store-Tokens

Nutzer Persona und Spieltoken können mithilfe der LinkPersonaRequest gespeichert werden -Objekt enthält. Zum Aufrufen von Google APIs müssen Sie die GoogleCredential verwenden (siehe Aufrufe von Google APIs . Beachten Sie, dass gemäß der 1:1-Kardinalität Einschränkung können Sie nur eine Persona nur mit einem Play-Spieldienste-Profil verknüpft werden (und umgekehrt). für den Fall, dass dieses Play-Spieldienste-Profil bereits mit einer anderen Persona verknüpft wurde.

Optional können Sie eine TTL für das Token festlegen, die angibt, wie lange ist das Token mit einem Dauer -Objekt enthält. Sie können dies mit SetTtl() (wie unten gezeigt) festlegen. Dabei werden das Ablaufdatum in der in der Methode angegebenen Zeit oder setExpireTime(), mit dem Sie eine genaue Zeit festlegen können, zu der die Tokens ablaufen.

Sie müssen die Persona und das Spieltoken verschlüsseln und dürfen keine personenbezogenen Daten enthalten identifizierbare Informationen enthalten. Persona- und Tokenstrings dürfen höchstens 256 sein Zeichen lang und maximal 20 Tokens oder Personas pro Spieler pro Spiel.

Pro Persona und Spieler kann jeweils nur ein Token gespeichert werden. Der Versuch, Durch Speichern eines anderen Tokens mit derselben Persona 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
}

Token abrufen

Es gibt drei Möglichkeiten, um ein Token abzurufen, je nachdem, welche Anforderungen. Sie können fordern Sie Folgendes an:

  • Die mit dem aktuellen Spiel verknüpften Tokens, einschließlich Recall-Tokens auf Spielebene.
  • Das letzte für alle Spiele des Entwicklerkontos gespeicherte Token.
  • Bei einer Liste mit Spielen, die dem Entwicklerkonto gehören, werden alle Recall-Tokens die mit den einzelnen Spielen verknüpft sind.

Recall-Tokens auf Spielebene

Hol dir das Recall-Token, um die Recall-Tokens aus dem aktuellen Spiel zu erhalten: recallSessionId vom Client und übergibt ihn an die 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
}

Aktuelles Recall-Token für alle Spiele des Entwicklerkontos

Zum Abrufen des zuletzt gespeicherten Tokens für alle Spiele, die dem Entwickler gehören in der Google Play Console hast, musst du dir die recallSessionId vom Client und übergeben es wie folgt an die lastTokenFromAllDeveloperGames API: wie im folgenden Code-Snippet dargestellt. Als Teil der Antwort können Sie die zugehörige Anwendungs-ID mit diesem Token.

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 Recall-Tokens für eine bestimmte Liste von Spielen, die dem Entwicklerkonto gehören

Zum Abrufen aller Tokens, die mit einer Liste von Spielen verknüpft sind, die Eigentum von dein Entwicklerkonto in der Google Play Console, hol dir die recallSessionId vom Client und übergib ihn an die gamesPlayerTokens API. Geben Sie ein Liste der Anwendungs-IDs.

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

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

Profillosen Modus aktivieren

Sie können eingeschränkte Funktionen der Recall API aktivieren für Nutzer ohne Play-Spieldienste-Profile:

  1. Profilloses Recall für dein PGS-Spielprojekt im Play-Entwickler aktivieren Konsole. Wählen Sie die Option „Aktivieren
„Speicherplatz“.
  2. Lesen Sie die zusätzlichen Bedingungen, die weiter unten in diesem Abschnitt beschrieben werden.
  3. Fügen Sie Ihrer App das folgende Metadaten-Tag hinzu: Manifest-Datei:
<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 zustimmen, stimmen Sie zu, dass Du verwendest die Recall API für Nutzer ohne Play-Spieldienste-Profil, mit der Inhalte geteilt werden können die Daten des Endnutzers an Google senden, ohne dass er ein Play-Spieldienste-Profil hat, müssen Sie dem Endnutzer vor der Weitergabe solcher Daten an Google einen entsprechenden Hinweis, in dem beschrieben wird, 1) dass Sie die Daten für Google freigeben, um zu ermöglichen, Play Spiele Funktion zur Kontoverknüpfung, 2) Verfügbarkeit von Einstellungen, die verwaltet werden können wie das Teilen von Inhalten, z. B. über die Play Spiele-Einstellungen, und 3) die Verarbeitung von gemäß der Datenschutzerklärung von Google und die geeigneten Endnutzer*innen zu gewinnen. Einwilligung für die Weitergabe erteilt, die alle anwendbaren rechtlichen Erfordernisse erfüllt.