PGS Recall API को अपने गेम में इंटिग्रेट करें

इस पेज पर, आपके गेम में Recall API को लागू करने का तरीका बताया गया है. इसमें सबसे पहले, एपीआई के साथ काम करने के लिए गेम सर्वर और क्लाइंट को सेट अप करने का तरीका बताया गया है. इसके बाद, टोकन को सेव करने और वापस पाने का तरीका बताया गया है.

गेम सर्वर का सेटअप

Google के सर्वर को Recall API कॉल करने के लिए, अपना गेम सर्वर सेट अप करें.

1. Play Games की सेवाओं वाला प्रोजेक्ट सेट अप करना

अगर आपने पहले से ऐसा नहीं किया है, तो Google Play गेम सेवाएं सेट अप करें में दिए गए निर्देशों का पालन करें.

2. गेम के लिए सेवा खाता सेट अप करना

सेवा खाता बनाने के लिए दिए गए निर्देशों का पालन करें. आखिर में, आपके पास सेवा खाते के क्रेडेंशियल वाली JSON फ़ाइल होनी चाहिए.

3. PlayGamesServices के लिए, सर्वर साइड Java लाइब्रेरी डाउनलोड करें

google-api-services-games लाइब्रेरी डाउनलोड करें और इसे अपने सर्वर पर अपलोड करें.

4. Recall 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();

गेम क्लाइंट सेटअप करना

अपने गेम क्लाइंट को सेट अप करें, ताकि वह recall सेशन आईडी को वापस पा सके. इनका इस्तेमाल हमारा सर्वर, Google के सर्वर से कम्यूनिकेट करने के लिए करता है.

Java SDK

अपने क्लाइंट में Java SDK टूल सेट अप करें. साथ ही, पक्का करें कि आपने अपनी Gradle फ़ाइल में com.google.android.gms:play-services-games-v2:19.0.0 और com.google.android.gms:play-services-tasks:18.0.2 या इसके बाद का वर्शन शामिल किया हो.

Google के सर्वर के साथ सही जानकारी शेयर करने के लिए, आपको क्लाइंट SDK से रीकॉल सेशन आईडी का अनुरोध करना होगा. इसके बाद, इसे अपने गेम के सर्वर पर भेजना होगा.

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

अगर आपने अब तक ऐसा नहीं किया है, तो अपने क्लाइंट में Unity SDK सेट अप करें.

Google के सर्वर से सही जानकारी शेयर करने के लिए, आपको क्लाइंट SDK से रीकॉल सेशन आईडी का अनुरोध करना होगा. इसके बाद, इसे अपने गेम के सर्वर पर भेजना होगा.

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

v2 Native SDK (बीटा वर्शन)

अगर आपने अभी तक ऐसा नहीं किया है, तो C और C++ के लिए Play की गेम सेवाओं का इस्तेमाल शुरू करें.

// Include the following headers

#include "play_games.h"
#include "recall_client.h"
#include "pgs_status_code.h"
// Request Recall Access
// Initializes the Play Games Services v2 Native SDK (beta).
Pgs_initialize(javaVM, activity);

//Creating Recall Client
PgsRecallClient* pgs_recall_client =
      PgsRecallClient_create(activity);

// RequestRecallAccess Function
PgsRecallClient_requestRecallAccess(
    pgs_recall_client,

    // This is your callback function defined as an inline lambda
    [](PgsStatusCode status_code, char* session_id, user_data) {

        if (status_code == PGS_STATUS_SUCCESS) {
            // Recall Session Id Fetched Successfully
        } else {
            // Fetching Recall Session Id Failed
            // Handle error based on status_code.
            // Examples:
            // PGS_STATUS_NETWORK_ERROR: Check internet connection.
            // PGS_STATUS_INTERNAL_ERROR: An unexpected error occurred.
        }

        // Clean up the client instance passed as user_data
        PgsRecallClient* client = static_cast<PgsRecallClient*>(user_data);
        if (client != nullptr) {
            PgsRecallClient_destroy(client);
        }
    },

    user_data // Data to pass to the callback
);

// Shuts down the Play Games Services v2 Native SDK (beta).
Pgs_destroy()

अपने गेम सर्वर में Recall API का इस्तेमाल करना

सर्वर और क्लाइंट को कॉन्फ़िगर करने के बाद, recallSessionID को अपने गेम क्लाइंट से गेम सर्वर पर भेजा जा सकता है. साथ ही, सर्वर-साइड पर रीकॉल टोकन को सेव करने, वापस पाने या मिटाने के लिए, Java API का इस्तेमाल शुरू करने के लिए यहां दिए गए दिशा-निर्देशों का पालन किया जा सकता है.

स्टोर किए गए टोकन

Google Play Games Recall API में, किसी खिलाड़ी के खाते में दो तरह की जानकारी होती है:

  • Persona, जो गेम में मौजूद खाते के लिए एक स्टेबल आइडेंटिफ़ायर के तौर पर काम करता है
  • एक टोकन, जो किसी खिलाड़ी को खाते में सुरक्षित तरीके से साइन इन करने की अनुमति देता है

LinkPersonaRequest ऑब्जेक्ट का इस्तेमाल करके, किसी उपयोगकर्ता की पर्सोना और टोकन को सेव किया जा सकता है. Google API को कॉल करने के लिए, GoogleCredential का इस्तेमाल करें. संदर्भ के लिए, Google API को कॉल करना लेख पढ़ें. किसी पर्सोना में 1:1 कार्डिनैलिटी की पाबंदी होती है: किसी PGS प्रोफ़ाइल में सिर्फ़ एक पर्सोना हो सकता है और कोई पर्सोना सिर्फ़ एक PGS प्रोफ़ाइल से जुड़ा हो सकता है. लिंक करने से जुड़ी समस्या हल करने की नीति सेट करें. इससे यह तय किया जा सकेगा कि 1:1 कार्डिनैलिटी की पाबंदी के उल्लंघन को कैसे ठीक किया जाए.

टोकन के खत्म होने का समय सेट करें. यह ज़रूरी नहीं है. SetTtl() का इस्तेमाल, Durations ऑब्जेक्ट के साथ करें. इससे टाइम टू लिव सेट किया जा सकता है. इसके अलावा, setExpireTime() के साथ, खत्म होने का सटीक समय दिया जा सकता है.

आपको पर्सोना और गेम टोकन को एन्क्रिप्ट (सुरक्षित) करना होगा. साथ ही, इनमें व्यक्तिगत पहचान से जुड़ी जानकारी शामिल नहीं होनी चाहिए. पर्सोना और टोकन स्ट्रिंग में ज़्यादा से ज़्यादा 256 वर्ण हो सकते हैं.

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
}

टोकन वापस पाना

आपके गेम की ज़रूरतों के हिसाब से, टोकन वापस पाने के तीन विकल्प हैं. इनके लिए अनुरोध किया जा सकता है:

  • मौजूदा गेम से जुड़े टोकन. इनमें गेम के स्कोप वाले रीकॉल टोकन शामिल हैं.
  • डेवलपर खाते के मालिकाना हक वाले सभी गेम में सेव किया गया आखिरी टोकन.
  • डेवलपर खाते के मालिकाना हक वाले गेम की सूची और हर गेम से जुड़े सभी रीकॉल टोकन.

गेम के स्कोप वाले रीकॉल टोकन

मौजूदा गेम से रीकॉल टोकन पाने के लिए, क्लाइंट से recallSessionId पाएं और इसे 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
}

डेवलपर खाते के मालिकाना हक वाले सभी गेम के लिए, वापस बुलाए जाने का सबसे नया टोकन

Google Play Console में डेवलपर खाते के मालिकाना हक वाले सभी गेम में सेव किए गए सबसे नए टोकन को वापस पाने के लिए, आपको क्लाइंट से recallSessionId पाना होगा. इसके बाद, इसे lastTokenFromAllDeveloperGames एपीआई में पास करना होगा. ऐसा नीचे दिए गए कोड स्निपेट में दिखाया गया है. जवाब के तौर पर, इस टोकन से जुड़े ऐप्लिकेशन आईडी की जांच की जा सकती है.

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

डेवलपर खाते के मालिकाना हक वाले गेम की दी गई सूची के लिए, सभी रीकॉल टोकन

Google Play Console में मौजूद आपके डेवलपर खाते के मालिकाना हक वाले गेम की सूची से जुड़े सभी टोकन वापस पाने के लिए, क्लाइंट से recallSessionId पाएं और इसे gamesPlayerTokens एपीआई में पास करें. ऐप्लिकेशन आईडी की सूची दें.

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

जानकारी वापस पाने का टोकन मिटाना

अगर ज़रूरी हो, तो इस कॉल का इस्तेमाल करके, रीकॉल टोकन को भी मिटाया जा सकता है:

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

बिना प्रोफ़ाइल वाला मोड चालू करना

जिन उपयोगकर्ताओं के पास PGS प्रोफ़ाइलें नहीं हैं उनके लिए, Recall API की सीमित सुविधाएं चालू की जा सकती हैं. इसके लिए, यह तरीका अपनाएं:

  1. Play कंसोल में, PGS गेम प्रोजेक्ट के लिए प्रोफ़ाइल के बिना रीकॉल करने की सुविधा चालू करें. &quot;स्टोरेज चालू करें&quot; लेबल वाला विकल्प चुनें.
  2. इस सेक्शन में बाद में बताए गए अतिरिक्त नियम देखें.
  3. नीचे दिए गए मेटाडेटा टैग को अपने ऐप्लिकेशन मेनिफ़ेस्ट में जोड़ें:
<meta-data
  android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
  android:value="true" />

अन्य शर्तें

आपको Play Games Services की सेवा की शर्तों का भी पालन करना होगा. अगर आपको पीजीएस प्रोफ़ाइल के बिना उपयोगकर्ताओं के लिए Recall API का इस्तेमाल करना है, तो आपको Google के साथ एंड-यूज़र का डेटा शेयर करना होगा. इसलिए, Google के साथ यह डेटा शेयर करने से पहले, आपको एंड-यूज़र को एक सूचना देनी होगी. इसमें यह जानकारी शामिल होनी चाहिए:

  • Play Games खाते को लिंक करने की सुविधा चालू करने के लिए, Google के साथ डेटा शेयर करने का तरीका.
  • इस शेयरिंग को मैनेज करने के लिए सेटिंग उपलब्ध हैं या नहीं. उदाहरण के लिए, Play Games की सेटिंग के ज़रिए.
  • इस डेटा को Google की निजता नीति के तहत प्रोसेस किया जाएगा. साथ ही, इस डेटा को शेयर करने के लिए, एंड-यूज़र की सहमति लेना ज़रूरी है. यह सहमति, लागू होने वाली सभी कानूनी शर्तों के मुताबिक होनी चाहिए.