Chuyển tới nội dung chính

Lỗi và thử lại an toàn

Command của screen​

Command (lệnh) của screen trả về một ProjectVResult. Khi IsSuccess là false, hiện Message; nội dung này đã được viết sẵn cho người chơi. View tự cập nhật qua Observe, nên không cần vẽ thêm gì khác.

var result = await shop.PurchaseAsync(offerId, quantity);
if (this != null && !result.IsSuccess)
{
ShowMessage(result.Message);
}

Command của presenter​

Command của presenter trả về một ProjectV*CommandResult có IsSuccess và Snapshot mới nhất. Vẽ (render) snapshot trước, rồi đến lỗi:

var result = await startup.StartAsync(contentReady: true, token);
Render(result.Snapshot);

if (!result.IsSuccess)
{
ShowLocalized(result.Snapshot.Error?.LocalizationKey, result.Snapshot.Error?.RequestId);
}

Exception nghĩa là lỗi lập trình (tham số sai, presenter bị dùng từ sai scene), không phải lỗi server. Đừng dùng exception cho luồng điều khiển thông thường.

Hiện gì​

Lỗi cóHiện
LocalizationKey (Startup, Authentication, Account, Lobby presenter)Tra trong localization của game; nếu không có thì dùng một thông báo chung
SafeMessage (màn có dữ liệu, Gameplay data)Hiện nguyên văn, hoặc ánh xạ Code sang văn bản của bạn

Đặt RequestId vào panel hỗ trợ hoặc chi tiết; nhờ nó team SDK tìm được request. Không bao giờ hiện hay ghi log token, mật khẩu hoặc response thô của server.

Huỷ​

Command của presenter nhận một CancellationToken; gắn nó với trang, ví dụ MonoBehaviour.destroyCancellationToken. Command của screen không nhận token: hãy kiểm tra trang còn tồn tại trước khi dùng kết quả.

Huỷ chỉ dừng việc chờ của bạn. Nó không hoàn tác thao tác mà server có thể đã áp dụng.

Khi nào thử lại​

Tình huốngLàm gì
Lần tải đầu thất bạiCho phép thử lại (Retry)
Server từ chối một thao tácHiện lý do; không tự động gửi lại
Một thao tác bị timeout hoặc không rõ kết quảKhông gửi thao tác mới; chờ màn cập nhật, rồi để người chơi quyết định
Quyết toán nhiệm vụ thất bạiGiữ màn kết quả mở và thử lại đúng lần hoàn thành đó
ContractMismatch lúc khởi độngChặn lại; bản build và backend không khớp nhau
Session hết hạnQuay lại qua Login

Không bao giờ gửi lại một lượt mua, nâng cấp hay nhận thưởng chỉ vì lần gọi đầu bị timeout, và không bao giờ viết vòng lặp thử lại vô tận trong view.

Xem Xử lý sự cố cho các vấn đề về thiết lập và runtime.