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 را از مشتری دریافت کنید و آن را به API retrieveTokens ارسال کنید:

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

حالت بدون پروفایل را فعال کنید

با دنبال کردن این مراحل می‌توانید عملکرد محدود Recall API را برای کاربرانی که نمایه‌های PGS ندارند فعال کنید:

  1. فراخوانی بدون پروفایل را برای پروژه بازی PGS خود در Play Developer Console فعال کنید. گزینه با برچسب را انتخاب کنید
  2. شرایط اضافی توضیح داده شده در ادامه این بخش را مرور کنید.
  3. تگ فراداده زیر را به مانیفست برنامه خود اضافه کنید:
<meta-data
  android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
  android:value="true" />

شرایط اضافی

علاوه بر اینکه مشمول شرایط خدمات سرویس‌های بازی‌های Play هستید، موافقت می‌کنید که اگر از Recall API برای کاربران بدون نمایه PGS استفاده می‌کنید، که امکان اشتراک‌گذاری داده‌های کاربر نهایی با Google را بدون داشتن نمایه خدمات بازی‌های Play فراهم می‌کند، باید: قبل از اشتراک‌گذاری چنین داده‌هایی با Google، اخطار مناسب را در اختیار کاربر نهایی قرار دهید که 1) اشتراک‌گذاری داده‌ها با Google را برای فعال کردن ویژگی پیوند حساب بازی‌های Play، 2) در دسترس بودن تنظیمات برای مدیریت چنین اشتراک‌گذاری‌هایی مانند مواردی که از طریق بازی‌های Play انجام می‌شود، شرح دهد. تنظیمات، و 3) پردازش چنین داده‌هایی تحت خط‌مشی رازداری Google ، و کسب رضایت کاربر نهایی مناسب برای چنین اشتراک‌گذاری که همه الزامات قانونی قابل اجرا را برآورده می‌کند.