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

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

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

Google के सर्वर पर 'रिकॉल करें' एपीआई कॉल करने के लिए, अपना गेम सर्वर सेट अप करें.

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

(अगर सेट अप नहीं हुआ है) Google Play Games services सेट अप करें में दिए गए निर्देशों का पालन करें.

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

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

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

Java SDK

अपने क्लाइंट में Java SDK टूल सेट अप करें. साथ ही, अपनी ग्रडल फ़ाइल में 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
    });

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

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

स्टोर टोकन

LinkPersonaRequest ऑब्जेक्ट का इस्तेमाल करके, उपयोगकर्ताओं के व्यक्तित्व और गेम टोकन को सेव किया जा सकता है. Google के एपीआई को कॉल करने के लिए, आपको GoogleCredential का इस्तेमाल करना होगा. ज़्यादा जानकारी के लिए, Google के एपीआई को कॉल करना देखें. ध्यान दें कि 1:1 एलिमेंट की संख्या से जुड़ी पाबंदी के मुताबिक, एक बार में सिर्फ़ एक व्यक्ति को एक PGS प्रोफ़ाइल से लिंक किया जा सकता है. इसके अलावा, एक PGS प्रोफ़ाइल को सिर्फ़ एक व्यक्ति से लिंक किया जा सकता है. अगर यह PGS प्रोफ़ाइल पहले से ही किसी दूसरे व्यक्ति से लिंक है, तो आपको रिज़ॉल्यूशन की नीति सेट करनी चाहिए.

इसके अलावा, आपके पास टोकन पर टीटीएल सेट करने का विकल्प भी है. इससे यह पता चलता है कि Durations ऑब्जेक्ट का इस्तेमाल करके, टोकन कितने समय तक मान्य है. इसे SetTtl() (जैसा कि नीचे दिखाया गया है) का इस्तेमाल करके सेट किया जा सकता है. इससे, टोकन की समयसीमा खत्म होने की तारीख, तरीके में बताए गए समय के हिसाब से सेट हो जाती है. इसके अलावा, setExpireTime() का इस्तेमाल करके भी टोकन की समयसीमा खत्म होने की तारीख सेट की जा सकती है.

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

एक समय पर, हर प्लेयर के हर व्यक्तित्व के लिए सिर्फ़ एक टोकन सेव किया जा सकता है. अगर उसी व्यक्ति के लिए कोई दूसरा टोकन सेव करने की कोशिश की जाती है, तो ओरिजनल टोकन ओवरराइट हो जाता है.

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

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

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

  1. Play कंसोल में, अपने पीजीएस गेम प्रोजेक्ट के लिए, प्रोफ़ाइल के बिना रीकॉल करने की सुविधा चालू करें. &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 के साथ ऐसा डेटा शेयर करने से पहले, उपयोगकर्ता को इस बारे में सही सूचना देनी होगी. इस सूचना में ये चीज़ें शामिल होनी चाहिए:

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