আপনার গেমের মধ্যে PGS Recall API একত্রিত করুন

এই পৃষ্ঠাটি ব্যাখ্যা করে কিভাবে আপনার গেমের মধ্যে Recall API প্রয়োগ করতে হয়। এটি প্রথমে API সমর্থন করার জন্য আপনার গেম সার্ভার এবং ক্লায়েন্ট সেট আপ করে এবং তারপরে টোকেনগুলি কীভাবে সঞ্চয় এবং পুনরুদ্ধার করা যায় তা দিয়ে যায়।

গেম সার্ভার সেটআপ

Google সার্ভারে Recall API কল করতে আপনার গেম সার্ভার সেট আপ করুন৷

আপনার প্লে গেম পরিষেবা প্রকল্প সেট আপ করুন৷

(যদি ইতিমধ্যে সম্পূর্ণ না হয়ে থাকে) Google Play Games পরিষেবা সেট আপ করার নির্দেশাবলী অনুসরণ করুন।

গেমের জন্য একটি পরিষেবা অ্যাকাউন্ট সেট আপ করুন

একটি পরিষেবা অ্যাকাউন্ট তৈরি করার নির্দেশাবলী অনুসরণ করুন। শেষে আপনার কাছে পরিষেবা অ্যাকাউন্টের শংসাপত্র সহ একটি JSON ফাইল থাকা উচিত।

প্লে গেম পরিষেবাগুলির জন্য সার্ভার-সাইড জাভা লাইব্রেরি ডাউনলোড করুন৷

সর্বশেষ 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 সেট আপ করুন এবং com.google.android.gms:play-services-games-v2:19.0.0 এবং com.google.android.gms:play-services-tasks:18.0.2 আপনার Gradle ফাইলে com.google.android.gms:play-services-tasks:18.0.2 বা উচ্চতর।

সঠিক তথ্যের সাথে Google এর সার্ভারের সাথে যোগাযোগ করতে, ক্লায়েন্ট SDK থেকে একটি রিকল সেশন আইডির অনুরোধ করুন, যা আপনি আপনার গেমের সার্ভারে পাঠান:

কোটলিন

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

আপনার গেম সার্ভারের মধ্যে Recall API ব্যবহার করুন

আপনার সার্ভার এবং ক্লায়েন্ট কনফিগার করার পরে, আপনি আপনার গেম ক্লায়েন্ট থেকে আপনার গেম সার্ভারে recallSessionID পাঠাতে পারেন এবং Recall টোকেন সার্ভার-সাইড সংরক্ষণ, পুনরুদ্ধার বা মুছে ফেলার জন্য 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 API-এ পাস করুন:

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