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

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

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

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

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

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

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

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

3. PlayGamesServices এর জন্য সার্ভার-সাইড জাভা লাইব্রেরি ডাউনলোড করুন

সর্বশেষ google-api-services-games লাইব্রেরি ডাউনলোড করুন এবং এটি আপনার সার্ভারে আপলোড করুন।

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

ঐক্য SDK

ইতিমধ্যে সম্পন্ন না হলে, আপনার ক্লায়েন্টের মধ্যে ইউনিটি SDK সেট আপ করুন

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

PlayGamesPlatform.Instance.RequestRecallAccess(
    recallAccess => {
        string recallSessionId = recallAccess.sessionId;
        // Send the recallSessionId to your game server
    });

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

আপনার সার্ভার এবং ক্লায়েন্ট কনফিগার করার পরে, আপনি আপনার গেম ক্লায়েন্ট থেকে আপনার গেম সার্ভারে recallSessionID পাঠাতে পারেন এবং Recall টোকেন সার্ভার-সাইড সংরক্ষণ, পুনরুদ্ধার বা মুছে ফেলার জন্য Java API ব্যবহার শুরু করতে নীচের নির্দেশিকা অনুসরণ করতে পারেন।

টোকেন সংরক্ষণ করুন

ব্যবহারকারীদের ব্যক্তিত্ব এবং গেম টোকেন LinkPersonaRequest অবজেক্ট ব্যবহার করে সংরক্ষণ করা যেতে পারে। Google APIs কল করার জন্য আপনাকে GoogleCredential ব্যবহার করতে হবে (প্রসঙ্গের জন্য Google API কল করা দেখুন)। নোট করুন যে, 1:1 কার্ডিনালিটি সীমাবদ্ধতা অনুসারে, আপনি একবারে একটি PGS প্রোফাইলের সাথে শুধুমাত্র একটি ব্যক্তিত্ব লিঙ্ক করতে পারেন (এবং এর বিপরীতে)। এই PGS প্রোফাইলটি ইতিমধ্যেই অন্য ব্যক্তিত্বের সাথে লিঙ্ক করা থাকলে আপনার রেজোলিউশন নীতি সেট করা উচিত।

ঐচ্ছিকভাবে, আপনি টোকেনে একটি TTL সেট করতে বেছে নিতে পারেন, যা ঘোষণা করে যে টোকেনটি কতক্ষণ মেয়াদী অবজেক্ট ব্যবহার করে বৈধ। আপনি 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 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 কার্যকারিতা সক্ষম করতে পারেন:

  1. Play ডেভেলপার কনসোলে আপনার PGS গেম প্রজেক্টের জন্য প্রোফাইললেস রিকল সক্ষম করুন। "সঞ্চয়স্থান চালু করুন" লেবেলযুক্ত বিকল্পটি নির্বাচন করুন।
  2. এই বিভাগে পরে বর্ণিত অতিরিক্ত শর্তাবলী পর্যালোচনা করুন।
  3. আপনার অ্যাপ ম্যানিফেস্টে নিম্নলিখিত মেটাডেটা ট্যাগ যোগ করুন:
<meta-data
  android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
  android:value="true" />

অতিরিক্ত শর্তাবলী

Play Games পরিষেবার পরিষেবার শর্তাবলীর অধীন হওয়ার পাশাপাশি, আপনি সম্মত হন যে আপনি যদি PGS প্রোফাইল ছাড়া ব্যবহারকারীদের জন্য Recall API ব্যবহার করেন, যা তাদের Play Games পরিষেবা প্রোফাইল ছাড়াই Google-এর সাথে শেষ ব্যবহারকারীর ডেটা শেয়ার করতে সক্ষম করে, তাহলে আপনাকে অবশ্যই, Google-এর সাথে এই ধরনের ডেটা শেয়ার করার আগে, শেষ ব্যবহারকারীকে উপযুক্ত নোটিশ প্রদান করুন যাতে বর্ণনা করা হয় 1) Play Games এর অ্যাকাউন্ট লিঙ্কিং বৈশিষ্ট্য সক্ষম করতে Google এর সাথে আপনার ডেটা শেয়ার করা, 2) Play Games এর মাধ্যমে শেয়ারিং পরিচালনা করার জন্য সেটিংসের উপলব্ধতা সেটিংস, এবং 3) Google গোপনীয়তা নীতির অধীনে এই ধরনের ডেটা প্রক্রিয়াকরণ, এবং সমস্ত প্রযোজ্য আইনি প্রয়োজনীয়তা পূরণ করে এমন ভাগ করার জন্য উপযুক্ত শেষ ব্যবহারকারীর সম্মতি প্রাপ্ত করা।