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 सेट अप करें और पक्का करें कि आपने com.google.android.gms:play-services-games-v2:19.0.0 को शामिल किया हो

और आपकी gradle फ़ाइल में 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
    });

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

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

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

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

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

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

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