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