ผสานรวม PGS Recall API ภายในเกม

หน้านี้อธิบายวิธีใช้ Recall API ในเกม โดยครอบคลุมเป็นอันดับแรก ตั้งค่าเซิร์ฟเวอร์เกมและไคลเอ็นต์ให้รองรับ API จากนั้นจึงดำเนินการ วิธีจัดเก็บและเรียกโทเค็น

การตั้งค่าเซิร์ฟเวอร์เกม

ตั้งค่าเซิร์ฟเวอร์เกมของคุณให้เรียก Recall API ไปยังเซิร์ฟเวอร์ของ Google

ตั้งค่าโปรเจ็กต์บริการเกมของ Play

(หากยังไม่ได้ทำ) ทำตามคำแนะนำในการตั้งค่า Google Play บริการเกม

ตั้งค่าบัญชีบริการสำหรับเกม

ทำตามคำแนะนำในการสร้างบริการ บัญชี และส่วนท้ายควรมีไฟล์ JSON ที่มีข้อมูลเข้าสู่ระบบของบัญชีบริการ

ดาวน์โหลดไลบรารี Java ฝั่งเซิร์ฟเวอร์สำหรับบริการเกมของ 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

Java SDK

ตั้งค่า Java 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 ของไคลเอ็นต์ซึ่งคุณส่งไปยังเซิร์ฟเวอร์ของเกม

Kotlin

PlayGames.getRecallClient(getActivity())
  .requestRecallAccess()
  .addOnSuccessListener { recallAccess -> val recallSessionId: String = recallAccess.getSessionId() }
  // Send the recallSessionId to your game server

Java

PlayGames.getRecallClient(getActivity())
  .requestRecallAccess()
  .addOnSuccessListener(
    recallAccess -> {
      String recallSessionId = recallAccess.getSessionId();
      // Send the recallSessionId to your game server
  });

ใช้ Recall API ภายในเซิร์ฟเวอร์เกม

หลังจากกำหนดค่าเซิร์ฟเวอร์และไคลเอ็นต์แล้ว คุณจะส่ง recallSessionID ได้ จากไคลเอ็นต์เกมไปยังเซิร์ฟเวอร์เกม และทำตามคำแนะนำด้านล่างเพื่อเริ่มต้น ใช้ Java API เพื่อจัดเก็บ เรียก หรือลบโทเค็น Recall ฝั่งเซิร์ฟเวอร์

โทเค็นสำหรับจัดเก็บ

จัดเก็บโทเค็นตัวตนและโทเค็นเกมของผู้ใช้โดยใช้ออบเจ็กต์ LinkPersonaRequest ใช้ GoogleCredential เพื่อโทรหา Google API เพื่อให้เป็นไปตามหลักเกณฑ์ 1:1 Cardinality คุณสามารถ โดยลิงก์ลักษณะตัวตนกับโปรไฟล์ PGS ครั้งละ 1 โปรไฟล์เท่านั้น และในทางกลับกันด้วย ตั้งค่า นโยบายการแก้ปัญหาในกรณีที่โปรไฟล์ PGS ลิงก์กับโปรไฟล์อื่นอยู่แล้ว ลักษณะตัวตน

นอกจากนี้ คุณยังเลือกตั้งค่า TTL บนโทเค็นได้ ซึ่งจะประกาศระยะเวลา โทเค็นนี้ถูกต้องโดยใช้ Durations ออบเจ็กต์ คุณอาจเลือกตั้งค่านี้โดยใช้ SetTtl() (ดังที่แสดงด้านล่าง) ซึ่ง วันหมดอายุจากระยะเวลาที่ระบุไว้ในวิธีการ หรือ setExpireTime() ซึ่งช่วยให้คุณตั้งเวลาที่โทเค็นจะหมดอายุได้

คุณต้องเข้ารหัสลักษณะตัวตนและโทเค็นเกม โดยโทเค็นจะต้องไม่เป็นส่วนตัว ข้อมูลที่ระบุตัวตนได้ สตริงลักษณะตัวตนและโทเค็นมีได้สูงสุด 256 สตริง สามารถมีอักขระได้ไม่เกิน 20 ตัว และสามารถจัดเก็บโทเค็นหรือลักษณะตัวตนได้สูงสุด 20 ตัวต่อ ผู้เล่นต่อเกม

สามารถจัดเก็บโทเค็นได้เพียง 1 รายการต่อบุคคลต่อผู้เล่นในช่วงเวลาที่กำหนด หากคุณลอง เพื่อจัดเก็บโทเค็นอื่นที่มีลักษณะตัวตนเดียวกัน ระบบจะเขียนทับโทเค็นต้นฉบับ โทเค็น

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
}

เรียกข้อมูลโทเค็น

หากต้องการเรียกโทเค็น Recall ให้ขอ 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();

เปิดใช้โหมดไม่มีโปรไฟล์

คุณเปิดใช้ฟังก์ชันการทำงานแบบจำกัดของ Recall API ได้ สำหรับผู้ใช้ที่ไม่มีโปรไฟล์ PGS โดยทำตามขั้นตอนต่อไปนี้

  1. เปิดใช้การเรียกคืนแบบไร้โปรไฟล์สำหรับโปรเจ็กต์เกม PGS ในนักพัฒนาแอป Play คอนโซล เลือกตัวเลือกที่ติดป้ายกำกับ
  2. โปรดอ่านข้อกำหนดเพิ่มเติมที่อธิบายภายหลังในส่วนนี้
  3. เพิ่มแท็กข้อมูลเมตาต่อไปนี้ลงในแอปของคุณ ไฟล์ Manifest
<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 Games ฟีเจอร์การลิงก์บัญชี 2) ความพร้อมใช้งานของการตั้งค่าที่ต้องจัดการ เช่น การแชร์ผ่านการตั้งค่า Play Games และ 3) การประมวลผลของ ข้อมูลดังกล่าวภายใต้นโยบายความเป็นส่วนตัวของ Google นโยบาย และรับผู้ใช้ปลายทางที่เหมาะสม ความยินยอมสำหรับการแชร์ดังกล่าวที่เป็นไปตามข้อกำหนดทางกฎหมายที่เกี่ยวข้องทั้งหมด