Vòng đời và chẩn đoán
Vòng đời trang
Với mỗi trang:
- nhận screen contract hoặc presenter qua injection;
- gọi
Observe(hoặcSubscribeAsync) một lần khi trang mở; - vẽ (render) ở mỗi lần được gọi.
rendercủa screen contract luôn chạy trên Unity main thread; listener của presenter thì không chắc, nên hãy chuyển về main thread trước khi đụng vào Unity object; - khi trang đóng, dispose (giải phóng) đúng
IDisposableđó và huỷ token của trang.
Chỉ dùng async void cho các entry point của Unity (OnEnable, handler của
nút), và bắt OperationCanceledException ở đó.
Scene
SDK root tồn tại qua các lần load scene, và rời một scene không làm người chơi
bị đăng xuất. Scene Login kế thừa từ ProjectVLoginSceneScope; mọi scene khác
kế thừa từ ProjectVAuthenticatedSceneScope, class này đưa người chơi về Login
khi chưa có ai đăng nhập. Không bao giờ đặt SDK root vào scene khác, và không
bao giờ giữ screen hay presenter trong field static.
Realtime
SDK tự kết nối, kết nối lại và định tuyến message realtime. Code game không bao
giờ mở socket; dữ liệu mới chỉ đơn giản là đến qua Observe và
SubscribeAsync.
Đăng xuất
Gọi IProjectVAccountPresenter.LogoutAsync (hoặc xoá tài khoản). Khi snapshot
báo RequiresLoginNavigation, load scene Login. SDK đã xoá session và dữ liệu
của tài khoản trước; đừng tự xoá PlayerPrefs hay token.
Đọc Console
Console của Editor hiện một entry cho mỗi thao tác của SDK:
[ProjectV · Lobby] Refresh OK · 474 ms · app resume · from server
RPC player/sync 450 ms req cd761e71
Cache hit profile, stamina
trace 5903a6a1 (open in SDK Debugger)
- Dòng đầu: màn, thao tác và kết quả của nó (
OK;BLOCKEDdưới dạng Warning;FAILEDhoặcUNKNOWNdưới dạng Error), mất bao lâu, cái gì kích hoạt nó (scene enter,player action,app resume,startup, hoặcafter <Screen> · <Action>), và cái gì đã thay đổi, ví dụstamina 120->119. - Các dòng bên dưới: mỗi lần gọi server kèm ID
req, những gì lấy từ cache, và với lỗi thì có mã lỗi kèm giải thích ngắn, ví dụError SHOP_LIMIT_REACHED (conflict, not retryable): The purchase limit for this offer is reached. trace: bấm vào để mở Tools › SilverTiger › CrossSDK › SDK Debugger tại đúng thao tác đó.
Khi báo lỗi, hãy kèm giá trị req và trace của thao tác thất bại (xem
Cần gửi gì cho team SDK).