Lưu đám mây cho game PlayDrop
Lưu và tải tiến trình người chơi bằng sdk.me.appData và updateAppData, cho khách và người chơi đã đăng nhập, kèm quy tắc ghi, xem trước và chơi ngoại tuyến.
Lưu đám mây giữ tiến trình của từng người chơi trong game của bạn trên PlayDrop, để tiến trình đi theo họ từ trang web đến các ứng dụng. Mỗi người chơi và mỗi game được lưu một đối tượng JSON; không cần máy chủ hay phòng nhiều người chơi.
Đọc và ghi
Sau init(), sdk.me.appData là ảnh chụp trạng thái đã lưu: { data, seq, ts_event, ts_arrival }, hoặc null trước lần lưu đầu tiên. Đọc đối tượng của bạn từ data. Ghi toàn bộ đối tượng bằng updateAppData, phương thức này trả về ảnh chụp trạng thái đã lưu và cập nhật 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
}- Mỗi lần ghi thay thế toàn bộ đối tượng đã lưu: hãy giữ lại mọi trường bạn vẫn cần.
- Thực hiện các lần ghi tuần tự như trên, để một lần lưu cũ không bao giờ ghi đè lên lần lưu mới hơn, và giữ hàng đợi tiếp tục chạy sau khi có lỗi.
- Chỉ hiển thị “Đã lưu” sau khi promise hoàn tất. Thay đổi
appData.datatrong bộ nhớ không lưu gì cả. appDatakhông có các phương thứcget,sethaysave.
Khi nào nên lưu
Hãy lưu ở các điểm kiểm tra, cuối màn và khi mua hàng thay vì ở mỗi khung hình. Không bao giờ lưu trong bản xem trước hay khi ghi hình: chỉ ghi khi sdk.host.phase là play. Giữ dữ liệu lưu nhỏ gọn và có phiên bản bằng trường của riêng bạn, chẳng hạn saveVersion: 2, để phiên bản game sau này có thể chuyển đổi nó.
Khách và người chơi đã đăng nhập
Bạn không cần kiểm tra sdk.me.isLoggedIn trước khi lưu: khách trên PlayDrop cũng giữ được dữ liệu lưu. Một người chơi hoàn toàn không có phiên sẽ giữ dữ liệu lưu trong bộ nhớ cho lượt truy cập đó, nên một lần ghi hoàn tất không chứng minh dữ liệu đã lên đám mây. Chỉ dùng isLoggedIn cho các tính năng cần tài khoản thật, như mua hàng và chơi nhiều người trên máy chủ được lưu trữ.
Ngoại tuyến
Trong trình duyệt, việc lưu cần kết nối mạng và không có hàng đợi ngoại tuyến: hãy tiếp tục cho chơi khi lưu thất bại và thử lại ở điểm kiểm tra tiếp theo. Các host có hỗ trợ dữ liệu trên thiết bị, như các ứng dụng PlayDrop chơi được ngoại tuyến, giữ dữ liệu lưu trên thiết bị và đồng bộ khi có mạng.
Dữ liệu lưu không dùng cho việc gì
Dữ liệu lưu là riêng tư với một người chơi và một game. Nó tách biệt với bảng xếp hạng và thành tích, vốn có API riêng và hiển thị trên PlayDrop. Trạng thái dùng chung giữa nhiều người chơi, như một trận đấu hay một thế giới, thuộc về máy chủ game, trong các collection MongoDB của game bạn.
Thử nghiệm
Dữ liệu lưu thuộc về một game đã tải lên. Hãy tải lên một phiên bản riêng tư ít nhất một lần, rồi thử từ url của biên nhận hoặc từ khung Dev cục bộ được mô tả trong xuất bản từ ứng dụng AI của bạn.