আপনার গেমে কীভাবে Recall API প্রয়োগ করবেন তা এই পৃষ্ঠায় ব্যাখ্যা করা হয়েছে। এটি প্রথমে API-এর জন্য আপনার গেম সার্ভার ও ক্লায়েন্ট সেট-আপ করার ব্যাপারে এবং তারপর কীভাবে টোকেন স্টোর ও ফিরিয়ে আনতে হয় সেই ব্যাপারে ব্যাখ্যা করে।
গেম সার্ভার সেট-আপ
Google সার্ভারে Recall API কল করার জন্য আপনার গেম সার্ভার সেট-আপ করুন।
১. আপনার Play Games পরিষেবা প্রোজেক্ট সেট-আপ করা
আপনি আগে থেকে এটি না করে থাকলে, Google Play Games Services সেট-আপ করুন লিঙ্কে দেওয়া নির্দেশাবলী অনুসরণ করুন।
২. গেমের জন্য একটি পরিষেবা অ্যাকাউন্ট সেট-আপ করুন
পরিষেবা অ্যাকাউন্ট তৈরি করা সংক্রান্ত নির্দেশাবলী অনুসরণ করুন। শেষে আপনার কাছে পরিষেবা অ্যাকাউন্টের ক্রেডেনশিয়াল সহ একটি JSON ফাইল থাকা উচিত।
৩. PlayGamesServices-এর জন্য সার্ভার-সাইড Java লাইব্রেরি ডাউনলোড করুন
google-api-services-games লাইব্রেরি ডাউনলোড করে আপনার সার্ভারে আপলোড করুন।
৪. Recall API কলের জন্য ক্রেডেনশিয়াল প্রস্তুত করুন
আরও জানতে অনুমোদিত 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 থেকে Recall সেশন আইডি অনুরোধ করতে হবে, যা আপনি নিজের গেমের সার্ভারে পাঠান।
Kotlin
PlayGames.getRecallClient(getActivity())
.requestRecallAccess()
.addOnSuccessListener { recallAccess -> val recallSessionId: String = recallAccess.getSessionId() }
// Send the recallSessionId to your game server
জাভা
PlayGames.getRecallClient(getActivity())
.requestRecallAccess()
.addOnSuccessListener(
recallAccess -> {
String recallSessionId = recallAccess.getSessionId();
// Send the recallSessionId to your game server
});
Unity SDK
আপনি আগে থেকে এটি না করে থাকলে, আপনার ক্লায়েন্টের মধ্যে Unity SDK সেট-আপ করুন।
সঠিক তথ্য সহ Google-এর সার্ভারের সাথে যোগাযোগ করতে, আপনাকে ক্লায়েন্ট SDK থেকে Recall সেশন আইডি অনুরোধ করতে হবে এবং আপনার গেমের সার্ভারে পাঠাতে হবে।
PlayGamesPlatform.Instance.RequestRecallAccess(
recallAccess => {
string recallSessionId = recallAccess.sessionId;
// Send the recallSessionId to your game server
});
v2 নেটিভ SDK (বিটা)
আপনি এখনও এটি না করে থাকলে, C এবং C++-এর জন্য Play Games Services ব্যবহার করা শুরু করুন।
// 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 কল করা দেখুন)। একটি পার্সোনার ১:১ কার্ডিনালিটি সীমাবদ্ধতা আছে: একটি PGS
প্রোফাইলে শুধুমাত্র একটি পার্সোনা থাকতে পারে এবং একটি পার্সোনা শুধুমাত্র একটি PGS
প্রোফাইলের অন্তর্গত হতে পারে। ১:১ কার্ডিনালিটি কনস্ট্রেইন্ট লঙ্ঘন কীভাবে সমাধান করা উচিত তা নির্ধারণ করতে
কনফ্লিক্টিং লিঙ্ক রেজোলিউশন নীতি সেট করুন।
টোকেনের মেয়াদ শেষ হওয়ার সময় সেট করুন। SetTtl()-এর সাথে
Durations অবজেক্ট ব্যবহার করে টাইম টু লাইভ সেট করুন অথবা setExpireTime()-এর সাথে সঠিক মেয়াদ শেষ হওয়ার
সময় উল্লেখ করুন।
আপনাকে অবশ্যই পারসোনা এবং গেম টোকেন এনক্রিপ্ট করতে হবে এবং সেগুলিতে ব্যক্তিগতভাবে শনাক্তকরণযোগ্য তথ্য থাকতে পারবে না। ব্যক্তিত্ব এবং টোকেন স্ট্রিং সর্বাধিক ২৫৬ অক্ষর দীর্ঘ হতে পারে।
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 API-তে পাস করুন:
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 API-তে পাস করতে হবে। উত্তরের অংশ হিসেবে, আপনি এই টোকেনের সাথে যুক্ত
অ্যাপ্লিকেশন আইডি পরীক্ষা করতে পারবেন।
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 API-তে এটি পাস করুন। অ্যাপ্লিকেশন আইডির
একটি তালিকা দিন।
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 কার্যকারিতা চালু করতে পারবেন:
- Play Developer Console-এ আপনার PGS গেম প্রোজেক্টের জন্য প্রোফাইললেস রিকল চালু করুন।

- এই বিভাগের পরে বর্ণনা করা অতিরিক্ত শর্তাবলী পর্যালোচনা করুন।
- আপনার অ্যাপ ম্যানিফেস্টে নিম্নলিখিত মেটাডেটা ট্যাগ যোগ করুন:
<meta-data
android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
android:value="true" />
অতিরিক্ত শর্তাবলী
এছাড়াও, আপনাকে Play Games পরিষেবার শর্তাবলী মেনে চলতে হবে। আপনি যদি PGS প্রোফাইল নেই এমন ব্যবহারকারীদের জন্য Recall API ব্যবহার করেন, যার মধ্যে Google-এর সাথে ব্যবহারকারীর ডেটা শেয়ার করা অন্তর্ভুক্ত, তাহলে Google-এর সাথে এই ডেটা শেয়ার করার আগে, আপনাকে ব্যবহারকারীদের একটি উপযুক্ত বিজ্ঞপ্তি প্রদান করতে হবে যা নিম্নলিখিত বিষয়গুলি বর্ণনা করে:
- Play Games অ্যাকাউন্ট লিঙ্ক করার ফিচার চালু করতে আপনি কীভাবে Google-এর সাথে ডেটা শেয়ার করেন।
- এই শেয়ারিং ম্যানেজ করার জন্য সেটিংসের উপলভ্যতা, যেমন, Play Games সেটিংসের মাধ্যমে।
- Google-এর গোপনীয়তা নীতি অনুযায়ী এই ডেটা প্রসেস করা এবং এই শেয়ারিংয়ের জন্য উপযুক্ত ব্যবহারকারীর সম্মতি পাওয়ার প্রয়োজনীয়তা যা প্রযোজ্য সব আইনি প্রয়োজনীয়তা পূরণ করে।