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ườngKiểuGhi chú
schemaVersion *1Phiên bản lược đồ manifest. Hiện chỉ chấp nhận số 1.
id *slugPhả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–80Tên hiển thị trên kho game.
version *semverPhải cao hơn phiên bản đang xuất bản (MF-005).

Nội dung

TrườngKiểuGhi chú
description *chuỗi 30–2000Mô tả đầy đủ, hiển thị ở trang chi tiết.
shortDescriptionchuỗi 10–160Dò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.
tagsmảng ≤10Thẻ kebab-case, dùng cho tìm kiếm và gợi ý game tương tự.
ageRating *E | E10 | T | MKhai 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-47Ví dụ ["vi", "en"].
controls *đối tượngÍt nhất một trong keyboard / mouse / touch / gamepad.

Kỹ thuật

TrườngKiểuGhi chú
entryđường dẫnMặ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).
engineInfochuỗiChỉ để hiển thị, ví dụ "Unity 6" hay "Godot 4.3".
orientationany | landscape | portraitNề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ườngKiểuGhi chú
permissionsmảngChỉ những quyền khai ở đây mới được mở trong iframe và trong CSP.
networkAllowlistmảng hostnameChỉ 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ườngKiểuGhi chú
sdk.version"1.0"Bắt buộc nếu có khai leaderboards.
sdk.requiresAuthbooleanNgười chơi phải đăng nhập mới mở được game.
sdk.cloudSavebooleanCần kèm quyền persistent-storage.
leaderboards[].idslugId 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[].minSessionSecondssố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ườngKiểuGhi chú
assets.icon *đường dẫnPNG hoặc WebP, đúng 512×512.
assets.cover *đường dẫnTối thiểu 1280×720, đúng tỉ lệ 16:9.
assets.screenshots *mảng 1–8Tối thiểu 960×540, chụp từ chính game.
attestation.ownsRights *trueBắ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.containsAdsbooleanKhai sai là căn cứ để gỡ game.
attestation.containsIapbooleanKhai sai là căn cứ để gỡ game.