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

Vòng đời và chẩn đoán

Vòng đời trang​

Với mỗi trang:

  1. nhận screen contract hoặc presenter qua injection;
  2. gọi Observe (hoặc SubscribeAsync) một lần khi trang mở;
  3. vẽ (render) ở mỗi lần được gọi. render củ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;
  4. 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; BLOCKED dưới dạng Warning; FAILED hoặc UNKNOWN dướ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ặc after <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).