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

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

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

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

Play Games Services का प्रोजेक्ट सेट अप करें

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

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

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

Play की गेम सेवाओं के लिए सर्वर-साइड की Java लाइब्रेरी डाउनलोड करें

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

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 सेट अप करें और अपनी 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
  });

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

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

टोकन स्टोर करें

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

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

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

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

import com.google.api.services.games.Games.Recall.LinkPersona;
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.Recall.RetrieveTokens;

// ...

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
}

रीकॉल टोकन मिटाएं

ज़रूरत पड़ने पर, यहां दिए गए कॉल के साथ भी रीकॉल टोकन को मिटाया जा सकता है:

import com.google.api.services.games.Games.Recall.UnlinkPersona;

// ...

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

// Confirm that the unlinking process completed successfully.
boolean unlinked = unlinkPersonaResponse.isUnlinked();