hz-store-submit

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Store Submission Skill

商店提交技能

Guide the end-to-end process of submitting a Meta Quest application to the Meta Horizon Store. This skill covers build validation, store-readiness checks, store asset preparation, upload, and submission tracking.
指导将Meta Quest应用提交至Meta Horizon Store的全流程。本技能涵盖构建验证、商店就绪检查、商店资产准备、上传以及提交跟踪。

When to Use This Skill

何时使用本技能

Use this skill when you need to:
  • Prepare a Quest app build for store submission
  • Validate that an APK meets the Horizon Store's publishing requirements before uploading
  • Prepare and validate store listing assets (icons, screenshots, videos, descriptions)
  • Walk through the submission workflow on the developer dashboard
  • Track a submission through the review process
  • Troubleshoot submission rejections
Run the VRC (Virtual Reality Check) validation inline (see the VRC checklist below) for thorough compliance testing before proceeding to submission.
当你需要以下操作时使用本技能:
  • 为商店提交准备Quest应用构建包
  • 上传前验证APK是否符合Horizon Store的发布要求
  • 准备并验证商店列表资产(图标、截图、视频、描述)
  • 逐步完成开发者控制台的提交流程
  • 在审核过程中跟踪提交状态
  • 排查提交被拒问题
在提交前运行VRC(Virtual Reality Check,虚拟现实检查)内联验证(见下方VRC检查清单),以完成全面合规测试。

Submission Workflow Overview

提交流程概览

The full submission process follows this order:
1. Build Validation     → Verify APK is correctly signed, targets ARM64, meets packaging requirements
2. Store Readiness      → Run through the readiness checks, fix any violations
3. Asset Preparation    → Prepare store listing images, videos, descriptions, metadata
4. Dashboard Setup      → Create app on developer.meta.com, configure pricing, age rating
5. Upload               → Upload the build to the platform
6. Submission           → Submit for review
7. Tracking             → Monitor review status, respond to feedback
完整的提交流程按以下顺序进行:
1. Build Validation     → Verify APK is correctly signed, targets ARM64, meets packaging requirements
2. Store Readiness      → Run through the readiness checks, fix any violations
3. Asset Preparation    → Prepare store listing images, videos, descriptions, metadata
4. Dashboard Setup      → Create app on developer.meta.com, configure pricing, age rating
5. Upload               → Upload the build to the platform
6. Submission           → Submit for review
7. Tracking             → Monitor review status, respond to feedback

Step 1: Build Validation

步骤1:构建验证

Before uploading, validate the APK meets basic packaging requirements.
上传前,验证APK是否满足基本打包要求。

APK Signing

APK签名

The release APK must be signed with an Android keystore. Debug-signed APKs will be rejected.
bash
undefined
发布版APK必须使用Android密钥库签名。调试签名的APK将被拒绝。
bash
undefined

Verify the APK is signed (not debug-signed)

Verify the APK is signed (not debug-signed)

metavr adb shell "pm dump <package> | grep -i signature"

The signing key must remain consistent across updates. Changing the signing key requires a new app entry.
metavr adb shell "pm dump <package> | grep -i signature"

签名密钥在所有更新中必须保持一致。更换签名密钥需要创建新的应用条目。

Manifest Checks

清单检查

bash
undefined
bash
undefined

Install the APK on a connected device to test

Install the APK on a connected device to test

metavr app install path/to/release.apk
metavr app install path/to/release.apk

Verify it launches correctly

Verify it launches correctly

metavr app launch <package>
metavr app launch <package>

Check the manifest for required fields

Check the manifest for required fields

metavr adb shell "dumpsys package <package> | head -50"

Required manifest elements:

- `android:targetSdkVersion` >= 32
- `android:minSdkVersion` >= 29
- Target architecture: ARM64 only (no x86 or ARM32)
- Application must declare the `com.oculus.intent.category.VR` intent category
- Version code must be higher than any previously uploaded build
metavr adb shell "dumpsys package <package> | head -50"

必填清单元素:

- `android:targetSdkVersion` >= 32
- `android:minSdkVersion` >= 29
- 目标架构:仅支持ARM64(不支持x86或ARM32)
- 应用必须声明`com.oculus.intent.category.VR`意图类别
- 版本号必须高于之前上传的任何构建包

Performance Baseline

性能基准

Run the app on a Quest device and verify:
  • Maintains 72 Hz minimum frame rate (90 Hz recommended for Quest 3)
  • No thermal throttling warnings within the first 5 minutes of normal use
  • Load time under 15 seconds from launch to interactive content
bash
undefined
在Quest设备上运行应用并验证:
  • 维持最低72 Hz帧率(Quest 3建议90 Hz)
  • 正常使用前5分钟内无热节流警告
  • 从启动到可交互内容的加载时间不超过15秒
bash
undefined

Monitor frame rate

Monitor frame rate

metavr adb logcat --tag VrApi | grep FPS
metavr adb logcat --tag VrApi | grep FPS

Check thermal state

Check thermal state

metavr device battery
metavr device battery

Watch for thermal warnings

Watch for thermal warnings

metavr adb logcat --tag ThermalService --level W
undefined
metavr adb logcat --tag ThermalService --level W
undefined

Step 2: Store Readiness Checks

步骤2:商店就绪检查

Run through the VRC checklist below for a detailed walkthrough. Key VRC categories:
  • Packaging — Release-signed APK (APK Signature Scheme v2; v1-only is rejected),
    targetSdkVersion >= 32
    (2D panel apps: 34+),
    minSdkVersion >= 29
    , ARM64-only, a version code strictly higher than any previously uploaded build, and the
    com.oculus.intent.category.VR
    intent category declared in the launch activity.
  • Functional — No crashes or ANRs in any core flow (first-run setup, permission dialogs, rapid scene transitions, low-battery/thermal). Keep long network, IO, and asset work off the main thread.
  • Performance — Sustained 72 Hz on Quest 2 / 90 Hz on Quest 3, no thermal throttling within 5 minutes, interactive within 15 seconds of launch, and no memory leaks over an extended session.
  • Security / Permissions — Declare only permissions the app actually uses; disallowed permissions cause automatic rejection before manual review. Remove telephony/SMS/contacts (
    CALL_PHONE
    ,
    SEND_SMS
    ,
    READ_CONTACTS
    ), precise location (
    ACCESS_FINE_LOCATION
    ), and unjustified
    READ_EXTERNAL_STORAGE
    ; guard optional hardware with
    hasSystemFeature()
    and drop the matching
    <uses-permission>
    when unused. Audit the merged manifest (including third-party libraries) with
    aapt dump permissions <app>.apk
    . Paid apps must verify entitlement within 10 seconds of launch (no internet required) or they are auto-rejected. See the prohibited and review-required permission lists at
    developers.meta.com/horizon/resources/permissions-prohibited/
    and
    .../permissions-review-required/
    .
  • Asset — Store images meet the dimension and content specs in Step 3, screenshots are real on-device captures (not editor views or mockups), text stays inside the inner 80% safe area of hero art, and the comfort rating matches the actual locomotion (Comfortable = stationary/teleport, Moderate = slow smooth locomotion with comfort options, Intense = fast movement).
Common store rejection reasons:
Rejection ReasonFix
Crash during reviewFix the crash. Run
metavr adb logcat --buffer crash
to investigate.
Frame rate below thresholdOptimize rendering. Profile with Perfetto or OVR Metrics Tool.
Missing store assetsEnsure all required images are uploaded at correct dimensions.
Disallowed permissionsRemove permissions not needed by the app (e.g.,
CALL_PHONE
,
SEND_SMS
).
Text in unsafe zone of hero artKeep text within the inner 80% safe area of hero images.
App Not Responding (ANR)Move long network, IO, or asset work off the main thread. Reproduce with
metavr adb logcat --buffer crash
.
Comfort rating mismatchSet the comfort rating to match actual locomotion (Comfortable / Moderate / Intense).
Paid app entitlement check missingVerify entitlement within 10 seconds of launch (no internet required) before unlocking content.
运行下方的VRC检查清单以获取详细指南。VRC核心类别:
  • 打包 — 发布签名APK(需采用APK Signature Scheme v2;仅v1签名会被拒绝),
    targetSdkVersion >= 32
    (2D面板应用需≥34),
    minSdkVersion >= 29
    ,仅支持ARM64,版本号严格高于之前上传的任何构建包,启动活动中声明
    com.oculus.intent.category.VR
    意图类别。
  • 功能 — 核心流程(首次运行设置、权限弹窗、快速场景切换、低电量/过热场景)无崩溃或ANR(应用无响应)问题。将长时间的网络、IO和资产处理操作移出主线程。
  • 性能 — Quest 2维持72 Hz帧率/Quest 3维持90 Hz帧率,5分钟内无热节流,启动后15秒内可交互,长时间会话无内存泄漏。
  • 安全/权限 — 仅声明应用实际使用的权限;禁用权限会导致自动拒绝,无需人工审核。移除电话/短信/联系人权限(
    CALL_PHONE
    、
    SEND_SMS
    、
    READ_CONTACTS
    )、精确定位权限(
    ACCESS_FINE_LOCATION
    )以及无正当理由的
    READ_EXTERNAL_STORAGE
    权限;使用
    hasSystemFeature()
    判断可选硬件是否存在,未使用时移除对应的
    <uses-permission>
    标签。使用
    aapt dump permissions <app>.apk
    审核合并后的清单(包括第三方库)。付费应用必须在启动后10秒内验证授权(无需联网),否则会被自动拒绝。请查看
    developers.meta.com/horizon/resources/permissions-prohibited/
    和
    .../permissions-review-required/
    中的禁用权限和需审核权限列表。
  • 资产 — 商店图片符合步骤3中的尺寸和内容规范,截图为实际设备拍摄(非编辑器视图或模型图),文本位于宣传图内部80%安全区域内,舒适度评级与实际移动方式匹配(舒适=静止/传送,中等=带舒适选项的慢速平滑移动,强烈=快速移动)。
常见商店拒绝原因:
拒绝原因修复方案
审核期间崩溃修复崩溃问题。运行
metavr adb logcat --buffer crash
排查原因。
帧率低于阈值优化渲染效果。使用Perfetto或OVR Metrics Tool进行性能分析。
缺少商店资产确保上传所有必填图片且尺寸正确。
使用禁用权限移除应用不需要的权限(如
CALL_PHONE
、
SEND_SMS
)。
宣传图文本位于不安全区域将文本保持在宣传图内部80%安全区域内。
应用无响应(ANR)将长时间的网络、IO或资产处理操作移出主线程。使用
metavr adb logcat --buffer crash
复现问题。
舒适度评级不匹配根据实际移动方式设置舒适度评级(舒适/中等/强烈)。
付费应用缺少授权检查在解锁内容前,于启动后10秒内验证授权(无需联网)。

Step 3: Asset Preparation

步骤3:资产准备

The Meta Horizon Store requires specific assets for the store listing.
Meta Horizon Store对商店列表资产有特定要求。

Required Images

必填图片

AssetDimensionsFormatNotes
App icon1024 x 1024 pxPNG or JPEGSquare, no rounded corners (system applies them)
Hero art (landscape)2560 x 1440 pxPNG or JPEGMain store listing image. Keep text in inner 80% safe area.
Screenshots2560 x 1440 pxPNG or JPEGMinimum 3 screenshots. Captured from the app, not mockups.
Small landscape (optional)1280 x 720 pxPNG or JPEGUsed in some store placements
资产尺寸格式说明
应用图标1024 x 1024 pxPNG或JPEG方形,无需圆角(系统会自动添加)
宣传图(横版)2560 x 1440 pxPNG或JPEG商店列表主图。文本需位于内部80%安全区域内。
截图2560 x 1440 pxPNG或JPEG至少3张截图。需从应用内拍摄,非模型图。
小尺寸横版图(可选)1280 x 720 pxPNG或JPEG用于部分商店展示位置

Required Metadata

必填元数据

  • App name: 30 characters max
  • Short description: 150 characters max. Appears in store browse views.
  • Long description: 4000 characters max. Supports basic formatting.
  • Category: Choose from available store categories (Games, Entertainment, Productivity, etc.)
  • Content rating: Complete the IARC questionnaire for age rating
  • Privacy policy URL: Required for all apps
  • Support URL or email: Required
  • 应用名称:最多30个字符
  • 简短描述:最多150个字符。显示在商店浏览视图中。
  • 详细描述:最多4000个字符。支持基础格式。
  • 类别:从商店可用类别中选择(游戏、娱乐、生产力等)
  • 内容评级:完成IARC问卷调查获取年龄评级
  • 隐私政策URL:所有应用必填
  • 支持URL或邮箱:必填

Optional but Recommended

可选但推荐

  • Trailer video: 30-60 seconds, 1920 x 1080 or 2560 x 1440, MP4/MOV
  • Localized descriptions: For each target language/region
  • 预告片视频:30-60秒,分辨率1920 x 1080或2560 x 1440,格式为MP4/MOV
  • 本地化描述:针对每个目标语言/地区提供

Step 4: Dashboard Setup

步骤4:控制台设置

  1. Navigate to the Developer Dashboard and sign in
  2. Click Create New App (or select existing app)
  3. Fill in all required metadata fields
  4. Set pricing (free or paid with MSRP)
  5. Complete the IARC content rating questionnaire
  6. Configure release channels if using staged rollout
  1. 访问开发者控制台并登录
  2. 点击创建新应用(或选择现有应用)
  3. 填写所有必填元数据字段
  4. 设置定价(免费或带建议零售价的付费)
  5. 完成IARC内容评级问卷调查
  6. 若使用分阶段发布,配置发布渠道

Step 5: Upload

步骤5:上传

Upload the signed release APK through the developer dashboard or via CLI:
bash
undefined
通过开发者控制台或CLI上传签名后的发布版APK:
bash
undefined

The dashboard upload is preferred for first submissions.

首次提交建议使用控制台上传。

For subsequent builds, you can use the ovr-platform-util CLI:

后续构建包可使用ovr-platform-util CLI:

ovr-platform-util upload-quest-build --app-id <APP_ID>
--app-secret <APP_SECRET>
--apk path/to/release.apk
--channel STORE

After upload, verify the build appears in the dashboard with the correct version code and architecture.
ovr-platform-util upload-quest-build --app-id <APP_ID>
--app-secret <APP_SECRET>
--apk path/to/release.apk
--channel STORE

上传后,验证构建包是否显示在控制台中,且版本号和架构正确。

Step 6: Submit for Review

步骤6:提交审核

  1. In the Developer Dashboard, navigate to your app's Submission tab
  2. Verify all sections show green checkmarks
  3. Address any errors or warnings displayed at the top of the page
  4. Click Submit for Review
Plan for a review period of approximately 1-2 weeks. Submit at least 2 weeks before your target launch date.
  1. 在开发者控制台中,导航至应用的提交标签页
  2. 确认所有部分显示绿色对勾
  3. 处理页面顶部显示的任何错误或警告
  4. 点击提交审核
审核周期约为1-2周。请在目标发布日期至少2周前提交。

Step 7: Tracking

步骤7:跟踪状态

After submission:
  • Monitor the app's status in the Developer Dashboard
  • Respond promptly to any reviewer feedback or questions
  • If rejected, read the rejection reasons carefully, fix each issue, and resubmit
Post-approval:
  • Choose to release immediately or schedule a release date
  • Monitor crash reports and user feedback after launch
  • Plan a post-launch update for any issues discovered by early users
提交后:
  • 在开发者控制台中监控应用状态
  • 及时回复审核人员的反馈或问题
  • 若被拒绝,请仔细阅读拒绝原因,修复所有问题后重新提交
审核通过后:
  • 选择立即发布或安排发布日期
  • 发布后监控崩溃报告和用户反馈
  • 针对早期用户发现的问题规划发布后更新

Gotchas

注意事项

  • Version code must always increase -- You cannot upload a build with a version code equal to or lower than a previously uploaded build. Plan your versioning strategy before the first upload.
  • Signing key is permanent -- Once you upload a build with a specific signing key, all future builds must use the same key. Losing the keystore means you cannot update the app — you must create a new app entry.
  • Screenshot requirements are strict -- Screenshots must be captured from the actual app, not from marketing mockups or engine editor views. Reviewers compare screenshots to the actual app experience.
  • Review timeline varies -- While typical review takes 1-2 weeks, holidays, resubmissions, and high volume can extend this. Do not promise a launch date without buffer time.
  • Managed vs. self-service releases -- If Meta manages your release, you cannot set your own release date from the dashboard. Coordinate with your account manager.
  • 2D apps have different requirements -- If submitting a 2D Android app (not immersive VR), the store-readiness requirements are a subset. Do not assume all immersive-VR checks apply to 2D apps.
  • Asset safe zones -- Hero art and screenshots have a "safe zone" for text. Text that bleeds into the outer 20% may be cropped on different store placements, causing a rejection.
  • Privacy policy is mandatory -- Even free apps with no user accounts require a privacy policy URL. Submission will be blocked without one.
  • 版本号必须持续递增——你无法上传版本号等于或低于之前上传版本的构建包。首次上传前规划好版本策略。
  • 签名密钥永久有效——一旦使用特定签名密钥上传构建包,所有后续构建包必须使用同一密钥。丢失密钥库意味着无法更新应用,必须创建新的应用条目。
  • 截图要求严格——截图必须从实际应用中拍摄,而非营销模型图或引擎编辑器视图。审核人员会将截图与实际应用体验进行对比。
  • 审核时间可能变化——虽然典型审核时间为1-2周,但节假日、重新提交和高提交量可能延长审核时间。请勿在未预留缓冲时间的情况下承诺发布日期。
  • 托管发布 vs. 自助发布——若由Meta托管发布,你无法在控制台中设置自己的发布日期。请与客户经理协调。
  • 2D应用有不同要求——若提交的是2D Android应用(非沉浸式VR),商店就绪要求为子集。请勿假设所有沉浸式VR检查适用于2D应用。
  • 资产安全区域——宣传图和截图有文本安全区域。文本超出外部20%区域可能在不同商店展示位置被裁剪,导致拒绝。
  • 隐私政策为必填项——即使是无用户账户的免费应用也需要隐私政策URL。缺少隐私政策会阻止提交。

References

参考资料

  • VRC Compliance -- run the detailed VRC validation checklist above before submission
  • Submission Checklist -- Quick-reference pre-submission checklist
  • Rejection Troubleshooting -- Common rejection reasons and fixes
  • VRC合规性——提交前运行上方详细的VRC验证清单
  • 提交检查清单——提交前快速参考检查清单
  • 拒绝问题排查——常见拒绝原因及修复方案