Tệp p2game.json
Hợp đồng kỹ thuật giữa game của bạn và nền tảng. Mọi ràng buộc mà p2game áp lên game đều bắt nguồn từ một trường ở đây.
Tệp phải nằm ở thư mục gốc của bản build, cùng cấp với
index.html. Nếu bạn nén cả thư mục cha, nền tảng sẽ tự đi xuống tối đa ba cấp để tìm, nhưng cách chắc chắn nhất là nén từ bên trong thư mục bản dựng.Định danh
| Trường | Kiểu | Ghi chú |
|---|---|---|
schemaVersion * | 1 | Phiên bản lược đồ manifest. Hiện chỉ chấp nhận số 1. |
id * | slug | Phải trùng đúng slug đã đăng ký ở Developer Portal. Sai là bản build bị từ chối ngay (MF-004). |
name * | chuỗi 2–80 | Tên hiển thị trên kho game. |
version * | semver | Phải cao hơn phiên bản đang xuất bản (MF-005). |
Nội dung
| Trường | Kiểu | Ghi chú |
|---|---|---|
description * | chuỗi 30–2000 | Mô tả đầy đủ, hiển thị ở trang chi tiết. |
shortDescription | chuỗi 10–160 | Dòng mô tả trên thẻ game. Thiếu sẽ bị cảnh báo. |
category * | liệt kê | action, puzzle, arcade, racing, strategy, casual, sports, simulation. |
tags | mảng ≤10 | Thẻ kebab-case, dùng cho tìm kiếm và gợi ý game tương tự. |
ageRating * | E | E10 | T | M | Khai có quảng cáo hoặc mua trong ứng dụng thì tối thiểu phải là E10 (CP-003). |
languages * | mảng BCP-47 | Ví dụ ["vi", "en"]. |
controls * | đối tượng | Ít nhất một trong keyboard / mouse / touch / gamepad. |
Kỹ thuật
| Trường | Kiểu | Ghi chú |
|---|---|---|
entry | đường dẫn | Mặc định index.html. Luôn là đường dẫn tương đối. |
engine * | webgl | webgpu | canvas2d | dom | Được kiểm chứng lại khi chạy thử: khai webgl mà không lấy được ngữ cảnh là lỗi (RT-003). |
engineInfo | chuỗi | Chỉ để hiển thị, ví dụ "Unity 6" hay "Godot 4.3". |
orientation | any | landscape | portrait | Nền tảng gợi ý người chơi xoay màn hình khi cần. |
minViewport | { width, height } | Khung nhìn nhỏ nhất mà game vẫn chơi được. Dùng luôn cho bước chạy thử. |
Quyền và mạng
| Trường | Kiểu | Ghi chú |
|---|---|---|
permissions | mảng | Chỉ những quyền khai ở đây mới được mở trong iframe và trong CSP. |
networkAllowlist | mảng hostname | Chỉ có hiệu lực khi đã xin quyền external-network. Mỗi miền đi thẳng vào connect-src của CSP. |
SDK và bảng xếp hạng
| Trường | Kiểu | Ghi chú |
|---|---|---|
sdk.version | "1.0" | Bắt buộc nếu có khai leaderboards. |
sdk.requiresAuth | boolean | Người chơi phải đăng nhập mới mở được game. |
sdk.cloudSave | boolean | Cần kèm quyền persistent-storage. |
leaderboards[].id | slug | Id dùng trong p2.leaderboard.submit(). Gửi điểm tới bảng chưa khai là lỗi (SD-003). |
leaderboards[].maxScore * | số | Trần điểm. Máy chủ từ chối mọi điểm vượt ngưỡng — hàng rào chống gian lận đầu tiên. |
leaderboards[].minSessionSeconds | số | Thời lượng ván tối thiểu để điểm được coi là hợp lệ. |
Ảnh cửa hàng và cam kết
| Trường | Kiểu | Ghi chú |
|---|---|---|
assets.icon * | đường dẫn | PNG hoặc WebP, đúng 512×512. |
assets.cover * | đường dẫn | Tối thiểu 1280×720, đúng tỉ lệ 16:9. |
assets.screenshots * | mảng 1–8 | Tối thiểu 960×540, chụp từ chính game. |
attestation.ownsRights * | true | Bắt buộc là true. Xác nhận bạn có quyền phát hành toàn bộ nội dung. |
attestation.containsAds | boolean | Khai sai là căn cứ để gỡ game. |
attestation.containsIap | boolean | Khai sai là căn cứ để gỡ game. |