इस पेज पर, आपके गेम में Recall API को लागू करने का तरीका बताया गया है. इसमें सबसे पहले, एपीआई के साथ काम करने के लिए गेम सर्वर और क्लाइंट को सेट अप करने का तरीका बताया गया है. इसके बाद, टोकन सेव करने और उन्हें वापस पाने का तरीका बताया गया है.
गेम सर्वर का सेटअप
Google के सर्वर को Recall API कॉल करने के लिए, अपना गेम सर्वर सेट अप करें.
1. Play Games की सेवाओं वाला प्रोजेक्ट सेट अप करना
(अगर आपने अब तक ऐसा नहीं किया है) Google Play की गेम सेवाओं को सेट अप करें में दिए गए निर्देशों का पालन करें.
2. गेम के लिए सेवा खाता सेट अप करना
सेवा खाता बनाने के लिए दिए गए निर्देशों का पालन करें. आखिर में, आपके पास सेवा खाते के क्रेडेंशियल वाली JSON फ़ाइल होनी चाहिए.
3. PlayGamesServices के लिए, सर्वर साइड Java लाइब्रेरी डाउनलोड करें
google-api-services-games library का नया वर्शन डाउनलोड करें और इसे अपने सर्वर पर अपलोड करें.
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 टूल सेट अप करें. साथ ही, पक्का करें कि आपने अपनी 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
});
अपने गेम सर्वर में Recall API का इस्तेमाल करना
सर्वर और क्लाइंट को कॉन्फ़िगर करने के बाद, अपने गेम क्लाइंट से गेम सर्वर पर recallSessionID
भेजा जा सकता है. साथ ही, सर्वर-साइड पर रीकॉल टोकन को सेव करने, वापस पाने या मिटाने के लिए, Java API का इस्तेमाल शुरू करने के लिए यहां दिए गए निर्देशों का पालन करें.
स्टोर किए गए टोकन
उपयोगकर्ताओं के पर्सोना और गेम टोकन को LinkPersonaRequest
ऑब्जेक्ट का इस्तेमाल करके सेव किया जा सकता है. Google API को कॉल करने के लिए, आपको GoogleCredential
का इस्तेमाल करना होगा. ज़्यादा जानकारी के लिए, Google API को कॉल करना लेख पढ़ें. ध्यान दें कि 1:1 कार्डिनैलिटी की पाबंदी के मुताबिक, एक समय में सिर्फ़ एक पर्सोना को एक 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 की सीमित सुविधाओं को चालू किया जा सकता है. इसके लिए, यह तरीका अपनाएं:
- Play कंसोल में, PGS गेम प्रोजेक्ट के लिए प्रोफ़ाइल के बिना रीकॉल करने की सुविधा चालू करें.
- इस सेक्शन में बाद में बताए गए अतिरिक्त नियम देखें.
- अपने ऐप्लिकेशन मेनिफ़ेस्ट में यह मेटाडेटा टैग जोड़ें:
<meta-data
android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
android:value="true" />
अन्य शर्तें
Play की गेम सेवाओं की सेवा की शर्तों के अलावा, आप इस बात से सहमत हैं कि अगर आपने PGS प्रोफ़ाइल के बिना उपयोगकर्ताओं के लिए Recall API का इस्तेमाल किया है, तो आपको Google के साथ उपयोगकर्ता का डेटा शेयर करने की अनुमति होगी. हालांकि, इसके लिए ज़रूरी है कि उपयोगकर्ता के पास Play की गेम सेवाओं की प्रोफ़ाइल न हो. Google के साथ ऐसा डेटा शेयर करने से पहले, आपको उपयोगकर्ता को इसकी सूचना देनी होगी. इसमें यह जानकारी शामिल होनी चाहिए:
- Play Games खाते को लिंक करने की सुविधा चालू करने के लिए, Google के साथ डेटा शेयर करना.
- शेयर करने की सुविधा को मैनेज करने के लिए सेटिंग उपलब्ध होना. जैसे, Play Games की सेटिंग के ज़रिए.
- Google की निजता नीति के तहत, इस डेटा को प्रोसेस किया जाता है. साथ ही, इस डेटा को शेयर करने के लिए, कानूनी तौर पर लागू होने वाली सभी शर्तों को पूरा करने वाली, असली उपयोगकर्ता की सहमति ली जाती है.