คลาวด์เซฟ
จัดเก็บเอกสาร JSON รายผู้เล่นตามคีย์ พร้อมรีวิชัน เพื่อไม่ให้สองอุปกรณ์เขียนทับกันโดยไม่รู้ตัว
คอมเมนต์ในโค้ดและชื่อ API ยังคงเป็นภาษาอังกฤษเพื่อให้ตรงกับ SDK
บันทึก#
บันทึกออบเจกต์ใดก็ได้ที่ซีเรียลไลซ์ได้ (Unity) หรือค่า JSON ไว้ภายใต้คีย์ การบันทึกแต่ละครั้งจะได้หมายเลขรีวิชันถัดไป
[System.Serializable]
public class Progress { public int level; public int coins; }
var saved = await Majacloud.CloudSave.SaveAsync("progress", new Progress { level = 3, coins = 120 });
if (saved.Ok) Debug.Log("Saved revision " + saved.Value.Revision);var saved := await Majacloud.cloud_save.save("progress", {"level": 3, "coins": 120})
if saved.ok:
print("Saved revision ", saved.value.revision)const saved = await mc.cloudSave.save('progress', { level: 3, coins: 120 });
if (saved.ok) console.log('Saved revision ' + saved.value.revision);curl -X PUT https://majacloud.majanite.com/v1/cloud/progress -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" -d '{"data": {"level": 3, "coins": 120}}'โหลด#
การโหลดคีย์ที่ไม่เคยบันทึกจะได้ not_found ให้ถือว่าเป็นการเปิดเกมครั้งแรก
var loaded = await Majacloud.CloudSave.LoadAsync<Progress>("progress");
if (loaded.Ok) progress = loaded.Value.Data;
else if (loaded.IsNotFound) progress = new Progress(); // first launchvar loaded := await Majacloud.cloud_save.load_save("progress")
if loaded.ok:
progress = loaded.value.data
elif loaded.is_not_found():
progress = {} # first launchconst loaded = await mc.cloudSave.load('progress');
if (loaded.ok) progress = loaded.value.data;
else if (loaded.error.code === 'not_found') progress = {}; // first launchcurl https://majacloud.majanite.com/v1/cloud/progress -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY" \
-H "Authorization: Bearer $TOKEN"รีวิชันและข้อขัดแย้ง#
ส่งรีวิชันที่โหลดมาเป็นรีวิชันที่คาดหวัง หากอุปกรณ์อื่นบันทึกไปก่อนแล้ว การบันทึกจะล้มเหลวด้วย revision_mismatch และ details.current_revision ให้โหลดใหม่ รวมข้อมูล แล้วลองอีกครั้ง รีวิชันที่คาดหวังเป็น 0 หมายถึง สร้างใหม่เท่านั้น
// Only overwrite the revision we loaded; another device may have saved since
var safe = await Majacloud.CloudSave.SaveAsync("progress", progress, expectedRevision: loaded.Value.Revision);
if (!safe.Ok && safe.Error.Code == MajacloudErrorCode.RevisionMismatch)
{
// Load again, merge, and save with the new revision
}# Only overwrite the revision we loaded; another device may have saved since
var safe := await Majacloud.cloud_save.save("progress", progress, loaded.value.revision)
if safe.error == "revision_mismatch":
pass # load again (details.current_revision), merge, save// Only overwrite the revision we loaded; another device may have saved since
const safe = await mc.cloudSave.save('progress', progress, { expectedRevision: loaded.value.revision });
if (!safe.ok && safe.error.code === 'revision_mismatch') {
// load again (safe.error.details.current_revision), merge, save
}curl -X PUT https://majacloud.majanite.com/v1/cloud/progress -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" -d '{"data": {"level": 4}, "revision": 3}'
# 409 revision_mismatch → details.current_revisionแสดงรายการและลบ#
แสดงรายการคีย์ของผู้เล่นพร้อมรีวิชันและขนาด และลบคีย์ที่ไม่ต้องการแล้ว:
var keys = await Majacloud.CloudSave.ListAsync();
foreach (var entry in keys.Value) Debug.Log(entry.Key + " r" + entry.Revision + " " + entry.SizeBytes + " B");
await Majacloud.CloudSave.DeleteAsync("old_slot");var keys := await Majacloud.cloud_save.list_saves()
for entry in keys.value.keys:
print(entry.key, " r", entry.revision, " ", entry.size_bytes, " B")
await Majacloud.cloud_save.delete_save("old_slot")const keys = await mc.cloudSave.list();
for (const entry of keys.value.keys) console.log(entry.key, entry.revision, entry.size_bytes);
await mc.cloudSave.delete('old_slot');curl https://majacloud.majanite.com/v1/cloud -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY" \
-H "Authorization: Bearer $TOKEN"
curl -X DELETE https://majacloud.majanite.com/v1/cloud/old_slot -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY" \
-H "Authorization: Bearer $TOKEN"ขีดจำกัด#
- สูงสุด 256 KB ต่อเอกสาร และ 100 คีย์ต่อผู้เล่น
- คีย์ประกอบด้วยตัวอักษร ตัวเลข จุด ขีดกลาง และขีดล่างได้ (สูงสุด 80 ตัวอักษร)
- พื้นที่จัดเก็บรวมต่อบัญชีขึ้นอยู่กับแพ็กเกจ (ดู ขีดจำกัด) หากเกิน การบันทึกจะล้มเหลวด้วย
plan_limitและไม่มีข้อมูลใดถูกลบ