PGS Recall API را در بازی خود ادغام کنید

این صفحه نحوه پیاده سازی Recall API را در بازی خود توضیح می دهد. ابتدا راه اندازی سرور و کلاینت بازی شما برای پشتیبانی از API را پوشش می دهد و سپس نحوه ذخیره و بازیابی توکن ها را بررسی می کند.

راه اندازی سرور بازی

سرور بازی خود را برای برقراری تماس های Recall API با سرورهای Google تنظیم کنید.

پروژه خدمات بازی‌های Play خود را راه‌اندازی کنید

(اگر قبلاً تکمیل نشده باشد) دستورالعمل‌های موجود در راه‌اندازی خدمات بازی‌های Google Play را دنبال کنید.

یک حساب سرویس برای بازی راه اندازی کنید

دستورالعمل های ایجاد یک حساب خدمات را دنبال کنید. در پایان باید یک فایل JSON با اعتبار حساب سرویس داشته باشید.

دانلود کتابخانه جاوا سمت سرور برای خدمات بازی های Play

آخرین کتابخانه 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 استفاده می کند، تنظیم کنید.

جاوا SDK

جاوا SDK را در کلاینت خود تنظیم کنید و مطمئن شوید که com.google.android.gms:play-services-games-v2:19.0.0 و com.google.android.gms:play-services-tasks:18.0.2 یا بالاتر در فایل Gradle شما.

برای برقراری ارتباط با سرورهای 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 را از کلاینت بازی خود به سرور بازی خود ارسال کنید و دستورالعمل های زیر را دنبال کنید تا شروع به استفاده از Java API برای ذخیره، بازیابی یا حذف Recall tokens سمت سرور کنید.

توکن ها را ذخیره کنید

پرسونا و توکن بازی کاربر را با استفاده از شی LinkPersonaRequest ذخیره کنید. از GoogleCredential برای تماس با Google API استفاده کنید. برای پیروی از محدودیت کاردینالیته 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();