Lưu trữ đám mây
Lưu dữ liệu JSON riêng của từng người chơi theo khóa, kèm bản sửa đổi để hai thiết bị không bao giờ âm thầm ghi đè lên nhau.
Chú thích trong mã và tên API được giữ nguyên tiếng Anh để khớp với SDK.
Trên trang này
Lưu#
Lưu mọi đối tượng có thể tuần tự hóa (Unity) hoặc giá trị JSON dưới một khóa. Mỗi lần lưu nhận số bản sửa đổi tiếp theo.
[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}}'Tải#
Tải một khóa chưa từng được lưu sẽ trả về not_found: hãy coi đó là lần chạy đầu tiên.
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"Bản sửa đổi và xung đột#
Truyền bản sửa đổi bạn đã tải làm bản sửa đổi mong đợi. Nếu một thiết bị khác đã lưu trong lúc đó, thao tác lưu thất bại với revision_mismatch và details.current_revision; hãy tải lại, gộp dữ liệu và thử lại. Bản sửa đổi mong đợi là 0 nghĩa là chỉ tạo mới.
// 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_revisionLiệt kê và xóa#
Liệt kê các khóa của người chơi kèm bản sửa đổi và kích thước, và xóa những khóa không còn cần:
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"Giới hạn#
- Tối đa 256 KB mỗi bản lưu và 100 khóa mỗi người chơi.
- Khóa có thể chứa chữ cái, chữ số, dấu chấm, gạch ngang và gạch dưới (tối đa 80 ký tự).
- Tổng dung lượng lưu trữ mỗi tài khoản phụ thuộc vào gói (xem Giới hạn); vượt quá mức đó, thao tác lưu thất bại với
plan_limitvà không dữ liệu nào bị xóa.