การบันทึกบนคลาวด์สำหรับเกม PlayDrop
บันทึกและโหลดความคืบหน้าของผู้เล่นด้วย sdk.me.appData และ updateAppData สำหรับผู้เยี่ยมชมและผู้เล่นที่เข้าสู่ระบบ พร้อมกฎการเขียน การแสดงตัวอย่าง และการเล่นออฟไลน์
การบันทึกบนคลาวด์เก็บความคืบหน้าของผู้เล่นแต่ละคนในเกมของคุณไว้บน PlayDrop เพื่อให้ความคืบหน้าตามผู้เล่นไปจากเว็บไซต์ถึงแอป ระบบเก็บออบเจ็กต์ JSON หนึ่งชิ้นต่อผู้เล่นหนึ่งคนต่อเกมหนึ่งเกม ไม่ต้องใช้เซิร์ฟเวอร์หรือห้องผู้เล่นหลายคน
อ่านและเขียน
หลัง init() แล้ว sdk.me.appData คือสแนปช็อตที่บันทึกไว้: { data, seq, ts_event, ts_arrival } หรือ null ก่อนการบันทึกครั้งแรก อ่านออบเจ็กต์ของคุณจาก data เขียนทั้งออบเจ็กต์ด้วย updateAppData ซึ่งจะส่งคืนสแนปช็อตที่บันทึกแล้วและอัปเดต sdk.me.appData
const sdk = await playdrop.init();
let progress = { level: 1, coins: 0, ...(sdk.me.appData?.data ?? {}) };
let queue = Promise.resolve();
// Resolves with the saved snapshot; rejects when the save failed.
function save(changes) {
progress = { ...progress, ...changes };
const snapshot = { ...progress };
const attempt = queue.then(() => sdk.me.updateAppData(snapshot));
queue = attempt.catch(() => {}); // a failed save must not block the next one
return attempt;
}
try {
await save({ level: 2 });
showSaved();
} catch (error) {
showSaveError(); // progress stays in memory; the next save sends it again
}- การเขียนแต่ละครั้งจะแทนที่ออบเจ็กต์ที่บันทึกไว้ทั้งหมด: เก็บทุกฟิลด์ที่ยังต้องใช้ไว้
- เขียนตามลำดับทีละครั้งเหมือนตัวอย่างด้านบน เพื่อไม่ให้ข้อมูลบันทึกเก่าไปทับข้อมูลที่ใหม่กว่า และให้คิวทำงานต่อได้แม้การบันทึกครั้งก่อนล้มเหลว
- แสดง "บันทึกแล้ว" หลังจาก promise เสร็จสิ้นเท่านั้น การเปลี่ยน
appData.dataในหน่วยความจำไม่ได้บันทึกอะไรเลย appDataไม่มีเมธอดget,setหรือsave
ควรบันทึกเมื่อไร
บันทึกที่จุดเช็กพอยต์ ตอนจบด่าน และหลังการซื้อ แทนที่จะบันทึกทุกเฟรม ห้ามบันทึกระหว่างการแสดงตัวอย่างหรือการจับภาพเด็ดขาด: เขียนเฉพาะเมื่อ sdk.host.phase เป็น play เก็บข้อมูลบันทึกให้เล็กและใส่เวอร์ชันด้วยฟิลด์ของคุณเอง เช่น saveVersion: 2 เพื่อให้เกมเวอร์ชันหลังย้ายข้อมูลได้
ผู้เยี่ยมชมและผู้เล่นที่เข้าสู่ระบบ
ไม่ต้องตรวจสอบ sdk.me.isLoggedIn ก่อนบันทึก: ผู้เยี่ยมชมของ PlayDrop ก็เก็บข้อมูลบันทึกไว้ได้เช่นกัน ผู้เล่นที่ไม่มีเซสชันเลยจะเก็บข้อมูลบันทึกไว้ในหน่วยความจำเฉพาะการเข้าชมครั้งนั้น การเขียนที่เสร็จสิ้นจึงไม่ได้พิสูจน์ว่าข้อมูลถึงคลาวด์แล้ว ใช้ isLoggedIn เฉพาะกับฟีเจอร์ที่ต้องมีบัญชีจริง เช่น การซื้อและการเล่นหลายคนผ่านเซิร์ฟเวอร์ที่ PlayDrop โฮสต์
ออฟไลน์
ในเบราว์เซอร์ การบันทึกต้องใช้การเชื่อมต่อและไม่มีคิวออฟไลน์: เล่นต่อเมื่อบันทึกล้มเหลวและลองอีกครั้งที่จุดเช็กพอยต์ถัดไป โฮสต์ที่ประกาศว่ารองรับข้อมูลบนอุปกรณ์ เช่น แอป PlayDrop ที่เล่นออฟไลน์ได้ จะเก็บข้อมูลบันทึกไว้บนอุปกรณ์และซิงค์เมื่อออนไลน์
สิ่งที่การบันทึกไม่ใช่
ข้อมูลบันทึกเป็นของผู้เล่นหนึ่งคนในเกมหนึ่งเกมแบบส่วนตัว แยกจากลีดเดอร์บอร์ดและความสำเร็จ ซึ่งมี API ของตัวเองและแสดงบน PlayDrop สถานะที่ผู้เล่นใช้ร่วมกัน เช่น แมตช์หรือโลก ควรอยู่บนเซิร์ฟเวอร์เกมในคอลเลกชัน MongoDB ของเกมคุณ
ทดสอบ
ข้อมูลบันทึกผูกกับเกมที่อัปโหลดแล้ว อัปโหลดเวอร์ชันส่วนตัวอย่างน้อยหนึ่งครั้ง แล้วทดสอบจาก url ในใบยืนยัน หรือจากเฟรม Dev ในเครื่องที่อธิบายไว้ในการเผยแพร่จากแอป AI ของคุณ