আমরা সুপারিশ করি যে আপনি খেলোয়াড়দের প্রমাণীকরণ করুন এবং নিরাপদে ব্যাকএন্ড সার্ভারে প্লেয়ারের পরিচয় পাস করুন। এটি ডিভাইসের মধ্য দিয়ে যাওয়ার সময় সম্ভাব্য টেম্পারিংয়ের সংস্পর্শে না গিয়ে আপনার গেমটিকে প্লেয়ারের পরিচয় এবং অন্যান্য ডেটা নিরাপদে পুনরুদ্ধার করতে সক্ষম করে।
এই পরিস্থিতিতে, একবার প্লেয়ার সফলভাবে সাইন ইন করলে, আপনি Play Games Services v2 SDK থেকে একটি বিশেষ একক-ব্যবহারের কোড (যাকে সার্ভার প্রমাণীকরণ কোড বলা হয়) অনুরোধ করতে পারেন, যা ক্লায়েন্ট সার্ভারে পাস করে। তারপরে, সার্ভারে, একটি OAuth 2.0 টোকেনের জন্য সার্ভার প্রমাণীকরণ কোডটি বিনিময় করুন যা সার্ভার Google Play Games Services API এ কল করতে ব্যবহার করতে পারে৷
আপনার গেমগুলিতে সাইন-ইন যোগ করার বিষয়ে অতিরিক্ত নির্দেশিকা জন্য, Android গেমগুলির জন্য সাইন-ইন দেখুন।
অফলাইন অ্যাক্সেসের জন্য নিম্নলিখিত পদক্ষেপগুলি প্রয়োজন:
- Google Play Console-এ: আপনার গেম সার্ভারের জন্য একটি শংসাপত্র তৈরি করুন। শংসাপত্রের OAuth ক্লায়েন্ট প্রকার হবে "ওয়েব"।
- অ্যান্ড্রয়েড অ্যাপে: সাইন-ইন করার অংশ হিসেবে, আপনার সার্ভারের শংসাপত্রের জন্য একটি সার্ভার প্রমাণীকরণ কোডের অনুরোধ করুন এবং সেটি আপনার সার্ভারে পাঠান।
- আপনার গেম সার্ভারে: Google প্রমাণীকরণ পরিষেবাগুলি ব্যবহার করে একটি OAuth অ্যাক্সেস টোকেনের জন্য সার্ভার প্রমাণীকরণ কোডটি বিনিময় করুন এবং তারপরে Play গেম পরিষেবা REST API গুলি কল করতে এটি ব্যবহার করুন৷
আপনি শুরু করার আগে
আপনাকে প্রথমে Google Play Console- এ আপনার গেম যোগ করতে হবে, যেমনটি Google Play Games পরিষেবা সেট আপ করুন এবং আপনার গেমের সাথে Play Games পরিষেবাগুলিকে একীভূত করতে হবে।
একটি সার্ভার-সাইড ওয়েব অ্যাপ তৈরি করুন
Google Play গেম পরিষেবাগুলি ওয়েব গেমগুলির জন্য ব্যাকএন্ড সমর্থন প্রদান করে না৷ যাইহোক, এটি আপনার অ্যান্ড্রয়েড গেমের সার্ভারের জন্য ব্যাকএন্ড সার্ভার সমর্থন প্রদান করে।
আপনি যদি আপনার সার্ভার-সাইড অ্যাপে Google Play গেম পরিষেবাগুলির জন্য REST API ব্যবহার করতে চান, তাহলে এই পদক্ষেপগুলি অনুসরণ করুন:
- Google Play Console- এ, একটি গেম নির্বাচন করুন।
- প্লে গেমস পরিষেবা > সেটআপ এবং ব্যবস্থাপনা > কনফিগারেশন- এ যান।
- শংসাপত্র যোগ করুন পৃষ্ঠায় আনার জন্য শংসাপত্র যোগ করুন নির্বাচন করুন। শংসাপত্রের ধরন হিসাবে গেম সার্ভার নির্বাচন করুন এবং অনুমোদন বিভাগে চালিয়ে যান।
- যদি আপনার গেম সার্ভারে ইতিমধ্যে একটি OAuth ক্লায়েন্ট আইডি থাকে তাহলে ড্রপ ডাউন মেনু থেকে এটি নির্বাচন করুন। আপনার পরিবর্তনগুলি সংরক্ষণ করার পরে, পরবর্তী বিভাগে যান৷
- যদি আপনার গেম সার্ভারের জন্য কোনো বিদ্যমান OAuth ক্লায়েন্ট আইডি না থাকে, তাহলে আপনি একটি তৈরি করতে পারেন।
- OAuth ক্লায়েন্ট তৈরি করুন ক্লিক করুন এবং OAuth ক্লায়েন্ট আইডি তৈরি করুন লিঙ্কটি অনুসরণ করুন।
- এটি আপনাকে Google ক্লাউড প্ল্যাটফর্মের তৈরি OAuth ক্লায়েন্ট আইডি পৃষ্ঠাতে নিয়ে আসবে আপনার গেমের সাথে যুক্ত আপনার প্রকল্পের জন্য।
- পৃষ্ঠার ফর্মটি পূরণ করুন এবং তৈরি করুন ক্লিক করুন। ওয়েব অ্যাপ্লিকেশনে অ্যাপ্লিকেশনের ধরন সেট করতে ভুলবেন না।
- শংসাপত্র যোগ করুন পৃষ্ঠার অনুমোদন বিভাগে ফিরে যান, নতুন তৈরি OAuth ক্লায়েন্ট নির্বাচন করুন এবং আপনার পরিবর্তনগুলি সংরক্ষণ করুন৷
সার্ভার প্রমাণীকরণ কোড পান
আপনার ব্যাকএন্ড সার্ভারে অ্যাক্সেস টোকেনগুলির জন্য আপনার গেম ব্যবহার করতে পারে এমন একটি সার্ভার প্রমাণীকরণ কোড পুনরুদ্ধার করতে:
ক্লায়েন্ট থেকে
requestServerSideAccess
কল করুন।- নিশ্চিত করুন যে আপনি আপনার গেম সার্ভারের জন্য নিবন্ধিত OAuth ক্লায়েন্ট আইডি ব্যবহার করেছেন এবং আপনার Android অ্যাপ্লিকেশনের OAuth ক্লায়েন্ট আইডি ব্যবহার করবেন না।
- (ঐচ্ছিক) যদি আপনার গেম সার্ভারের প্লে গেম পরিষেবাগুলিতে অফলাইন অ্যাক্সেস (রিফ্রেশ টোকেন ব্যবহার করে দীর্ঘস্থায়ী অ্যাক্সেস) প্রয়োজন হয়, আপনি forceRefreshToken প্যারামিটারটিকে সত্য হিসাবে সেট করতে পারেন।
GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this); gamesSignInClient .requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID, /* forceRefreshToken= */ false) .addOnCompleteListener( task -> { if (task.isSuccessful()) { String serverAuthToken = task.getResult(); // Send authentication code to the backend game server to be // exchanged for an access token and used to verify the player // via the Play Games Services REST APIs. } else { // Failed to retrieve authentication code. } });
আপনার ব্যাকএন্ড সার্ভারে OAuth প্রমাণীকরণ কোড টোকেন পাঠান যাতে এটি বিনিময় করা যায়, প্লেয়ার আইডি প্লে গেম পরিষেবা REST API-এর বিরুদ্ধে যাচাই করা হয় এবং তারপর আপনার গেমের সাথে প্রমাণীকৃত হয়।
সার্ভার প্রমাণীকরণ কোড পাঠান
অ্যাক্সেসের বিনিময় এবং টোকেন রিফ্রেশ করতে আপনার ব্যাকএন্ড সার্ভারে সার্ভার প্রমাণীকরণ কোড পাঠান। প্লেয়ারের তরফে প্লে গেম পরিষেবা API-কে কল করতে অ্যাক্সেস টোকেন ব্যবহার করুন এবং বিকল্পভাবে, অ্যাক্সেস টোকেনের মেয়াদ শেষ হয়ে গেলে একটি নতুন অ্যাক্সেস টোকেন অর্জন করতে রিফ্রেশ টোকেন সংরক্ষণ করুন৷
নিম্নলিখিত কোড স্নিপেট দেখায় যে আপনি কীভাবে সার্ভার-সাইড কোডটি জাভা প্রোগ্রামিং ভাষায় প্রয়োগ করতে পারেন অ্যাক্সেস টোকেনের জন্য সার্ভার প্রমাণীকরণ কোড বিনিময় করতে। এটি ক্লায়েন্ট সার্ভার কঙ্কাল নমুনা অ্যাপ ব্যবহার করে।
/**
* Exchanges the authcode for an access token credential. The credential
* is the associated with the given player.
*
* @param authCode - the non-null authcode passed from the client.
* @param player - the player object which the given authcode is
* associated with.
* @return the HTTP response code indicating the outcome of the exchange.
*/
private int exchangeAuthCode(String authCode, Player player) {
try {
// The client_secret.json file is downloaded from the Google API
// console. This is used to identify your web application. The
// contents of this file shouldn't be shared.
//
File secretFile = new File("client_secret.json");
// If we don't have the file, we can't access any APIs, so return
// an error.
if (!secretFile.exists()) {
log("Secret file : " + secretFile
.getAbsolutePath() + " does not exist!");
return HttpServletResponse.SC_FORBIDDEN;
}
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(
JacksonFactory.getDefaultInstance(), new
FileReader(secretFile));
// Extract the application id of the game from the client id.
String applicationId = extractApplicationId(clientSecrets
.getDetails().getClientId());
GoogleTokenResponse tokenResponse =
new GoogleAuthorizationCodeTokenRequest(
HTTPTransport,
JacksonFactory.getDefaultInstance(),
"https://oauth2.googleapis.com/token",
clientSecrets.getDetails().getClientId(),
clientSecrets.getDetails().getClientSecret(),
authCode,
"")
.execute();
log("hasRefresh == " + (tokenResponse.getRefreshToken() != null));
log("Exchanging authCode: " + authCode + " for token");
Credential credential = new Credential
.Builder(BearerToken.authorizationHeaderAccessMethod())
.setJsonFactory(JacksonFactory.getDefaultInstance())
.setTransport(HTTPTransport)
.setTokenServerEncodedUrl("https://www.googleapis.com/oauth2/v4/token")
.setClientAuthentication(new HttpExecuteInterceptor() {
@Override
public void intercept(HttpRequest request)
throws IOException {
}
})
.build()
.setFromTokenResponse(tokenResponse);
player.setCredential(credential);
// Now that we have a credential, we can access the Games API.
PlayGamesAPI api = new PlayGamesAPI(player, applicationId,
HTTPTransport, JacksonFactory.getDefaultInstance());
// Call the verify method, which checks that the access token has
// access to the Games API, and that the Player ID used by the
// client matches the playerId associated with the accessToken.
boolean ok = api.verifyPlayer();
// Call a Games API on the server.
if (ok) {
ok = api.updatePlayerInfo();
if (ok) {
// persist the player.
savePlayer(api.getPlayer());
}
}
return ok ? HttpServletResponse.SC_OK :
HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
} catch (IOException e) {
e.printStackTrace();
}
return HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
}
সার্ভার থেকে REST API কল করুন
উপলব্ধ API কলগুলির সম্পূর্ণ বিবরণের জন্য Google Play গেম পরিষেবাগুলির জন্য REST API দেখুন৷
REST API কলগুলির উদাহরণ যা আপনি দরকারী বলে মনে করতে পারেন সেগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:
প্লেয়ার
সাইন ইন করা খেলোয়াড়ের আইডি এবং প্রোফাইল ডেটা পেতে চান? ID হিসেবে 'me'
দিয়ে Players.get কে কল করুন।
বন্ধুরা
বিস্তারিত জানার জন্য বন্ধুদের নির্দেশিকা দেখুন।
প্লেয়ারের বন্ধুদের তালিকা পুনরুদ্ধার করতে,
collection
হিসাবেfriends_all
সাথে Players.list-এ কল করুন।আপনার বন্ধুদের তালিকায় অ্যাক্সেস আছে কিনা তা যাচাই করতে, Players.get
me
সাথেplayerID
হিসাবে কল করুন এবং প্রতিক্রিয়াতেprofileSettings.friendsListVisibility
ক্ষেত্রটি দেখুন৷
অর্জন
বিস্তারিত জানার জন্য অর্জন নির্দেশিকা দেখুন।
বর্তমান অর্জনের একটি তালিকা পেতে, AchievementDefinitions.list এ কল করুন।
প্লেয়ার কোনটি আনলক করেছে তা খুঁজে বের করতে Achievements.list- এ একটি কলের সাথে এটি একত্রিত করুন।
একজন খেলোয়াড়ের কৃতিত্ব আনলক করতে Achievements.unlock কল করুন।
একটি অর্জনের অগ্রগতি রিপোর্ট করতে Achievements.increment কল করুন এবং প্লেয়ার এটি আনলক করেছে কিনা তা খুঁজে বের করুন।
আপনি যদি এমন একটি গেম ডিবাগ করছেন যা উৎপাদনে পৌঁছায়নি, আপনি কৃতিত্বগুলিকে তাদের আসল অবস্থায় পুনরায় সেট করতে ম্যানেজমেন্ট API থেকে Achievements.reset বা Achievements.resetAll কল করতে পারেন৷
লিডারবোর্ড
বিস্তারিত জানার জন্য লিডারবোর্ড গাইড দেখুন।
গেমের সমস্ত স্কোরবোর্ডের একটি তালিকা পেতে চান? Leaderboards.list এ একটি কল করুন।
যদি একজন খেলোয়াড় একটি খেলা সম্পন্ন করে, আপনি Scores.submit- এ তাদের স্কোর জমা দিতে পারেন এবং এটি একটি নতুন উচ্চ স্কোর কিনা তা খুঁজে বের করতে পারেন।
লিডারবোর্ড প্রদর্শন করতে, Scores.list থেকে ডেটা পান এবং ব্যবহারকারীকে দেখান।
ব্যবহারকারীর উচ্চ স্কোরের কাছাকাছি স্কোরগুলির একটি ভাণ্ডার খুঁজে পেতে Scores.listWindow ব্যবহার করুন।
একটি নির্দিষ্ট লিডারবোর্ডে প্লেয়ারের স্কোর সম্পর্কে আরও তথ্য পেতে (উদাহরণস্বরূপ, যদি প্লেয়ারটি সমস্ত খেলোয়াড়ের শীর্ষ 12%-এ থাকে), Scores.get এ কল করুন।
আপনি যদি একটি গেম ডিবাগ করেন, আপনি একটি নির্দিষ্ট লিডারবোর্ড থেকে সেই প্লেয়ারের জন্য সমস্ত স্কোর রিসেট করতে ম্যানেজমেন্ট API থেকে Scores.reset কল করতে পারেন।