关于 hz-store-submit
hz-store-submit 是指导 Meta VR 应用提交至 Meta Horizon Store 的技能,适用于准备发布的开发者。它覆盖 APK 与商店素材检查、上传、审核跟踪,并区分 CLI 上传和必须在开发者后台完成的提审步骤。
主要功能
- 01检查 APK 签名与打包要求
- 02执行商店就绪与 VRC 检查
- 03准备并校验商店素材
- 04通过 metavr CLI 上传构建
- 05跟踪审核状态并处理拒绝原因
适用场景
- 01提交前检查 VR 应用构建
- 02整理并验证商店图像与元数据
- 03上传版本并跟进审核反馈
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ meta-quest/ agentic-tools --skill hz-store-submit安装后在 Claude Code 中输入/hz-store-submit确认已加载。
附带文件references/rejection-troubleshooting.mdreferences/submission-checklist.md
详细介绍
商店提交技能
指导将 Meta VR 应用提交到 Meta Horizon Store 的完整流程。本技能涵盖构建验证、商店就绪情况检查、商店素材准备、上传和提交跟踪。
何时使用本技能
在以下情况下使用本技能:
- 准备要提交到商店的 Meta VR 应用构建版本
- 上传前验证 APK 是否符合 Horizon Store 的发布要求
- 准备并验证商店列表素材(图标、屏幕截图、视频、描述)
- 引导完成开发者控制面板中的提交工作流
- 跟踪提交内容的审核进度
- 排查提交遭拒的问题
提交前,请内联运行 VRC(Virtual Reality Check)验证(参见下方的 VRC 检查清单),以进行全面的合规性测试。
提交工作流概览
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:构建验证
上传前,请验证 APK 是否符合基本打包要求。
APK 签名
发布版 APK 必须使用 Android 密钥库签名。调试签名的 APK 将被拒绝。
# Verify the APK is signed (not debug-signed)
metavr adb shell "pm dump <package> | grep -i signature"
更新时必须保持签名密钥一致。更改签名密钥需要创建新的应用条目。
清单检查
# Install the APK on a connected device to test
metavr app install path/to/release.apk
# Verify it launches correctly
metavr app launch <package>
# Check the manifest for required fields
metavr adb shell "dumpsys package <package> | head -50"
必需的清单元素:
android:targetSdkVersion>= 32android:minSdkVersion>= 29- 目标架构:仅限 ARM64(不支持 x86 或 ARM32)
- 应用必须声明
com.oculus.intent.category.VRintent 类别 - 版本代码必须高于之前上传的所有构建版本
性能基线
在 Meta VR 设备上运行应用并验证:
- 保持至少 72 Hz 的帧率(Quest 3 建议使用 90 Hz)
- 正常使用的前 5 分钟内没有热降频警告
- 从启动到内容可交互的加载时间少于 15 秒
# Monitor frame rate
metavr adb logcat --tag VrApi | grep FPS
# Check thermal state
metavr device battery
# Watch for thermal warnings
metavr adb logcat --tag ThermalService --level W
步骤 2:商店就绪检查
请按照以下 VRC 检查清单逐项检查,了解详细流程。VRC 的主要类别:
- 打包 — 使用发布签名的 APK(APK Signature Scheme v2;仅 v1 会被拒绝),
targetSdkVersion >= 32(2D 面板应用:34+)、minSdkVersion >= 29、仅支持 ARM64、版本代码必须严格高于此前上传的任何版本,并且在启动 Activity 中声明com.oculus.intent.category.VRintent 类别。 - 功能 — 任何核心流程(首次运行设置、权限对话框、快速场景切换、低电量/高温)都不得发生崩溃或 ANR。将耗时的网络、IO 和资源处理工作移出主线程。
- 性能 — 在 Quest 2 上持续保持 72 Hz,在 Quest 3 和 Meta VR Glasses 上持续保持 90 Hz;5 分钟内不得发生热降频;启动后 15 秒内可交互;长时间运行期间不得出现内存泄漏。
- 安全 / 权限 — 只声明应用实际使用的权限;不允许的权限会在人工审核前导致自动拒绝。移除电话/SMS/联系人权限(
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 秒内验证权益(无需联网)。 |
步骤 3:资源准备
Meta Horizon Store 对商店商品页所需的资源有具体要求。
必需图片
| 资源 | 尺寸 | 格式 | 备注 |
|---|---|---|---|
| 应用图标 | 1024 x 1024 px | PNG 或 JPEG | 正方形,不要使用圆角(系统会自动添加) |
| 英雄图(横向) | 2560 x 1440 px | PNG 或 JPEG | 商店商品页主图。文字应位于中央 80% 的安全区域内。 |
| 截图 | 2560 x 1440 px | PNG 或 JPEG | 至少 3 张。必须从应用中捕获,不得使用模型图。 |
| 小尺寸横向图(可选) | 1280 x 720 px | PNG 或 JPEG | 用于部分商店展示位 |
必需的元数据
- 应用名称:最多 30 个字符
- 简短描述:最多 150 个字符。显示在商店浏览页面中。
- 详细描述:最多 4000 个字符。支持基本格式。
- 类别:从商店提供的类别中选择(游戏、娱乐、效率等)
- 内容分级:填写 IARC 问卷以确定年龄分级
- 隐私政策 URL:所有应用都必须提供
- 支持 URL 或电子邮件:必需
可选但建议提供
- 预告视频:30-60 秒,1920 x 1080 或 2560 x 1440,MP4/MOV
- 本地化描述:为每种目标语言/地区提供
第 4 步:设置控制面板
- 前往 Developer Dashboard 并登录
- 点击 Create New App(或选择现有应用)
- 填写所有必需的元数据字段
- 设置价格(免费或按 MSRP 付费)
- 填写 IARC 内容分级问卷
- 如果要分阶段发布,请配置发布渠道
第 5 步:上传
通过 Developer Dashboard 或使用 metavr CLI 上传已签名的发布 APK。CLI 会将构建分发到发布渠道;它不会创建应用、填写商店页面、回答政策问卷,也不会提交应用以供审核。
# Find the app and inspect its release channels.
metavr store dist apps --org <ORGANIZATION_ID>
metavr store dist channels --app-id <APP_ID>
# Uploads are drafts unless --publish is supplied.
metavr store dist upload \
--app-id <APP_ID> \
--channel ALPHA \
--apk path/to/release.apk \
--notes "What changed in this build"
在验证构建时使用 ALPHA、BETA 或 RC。LIVE 对应商店发布渠道,但上传到该渠道仍不会提交商店页面以供审核。仅在打算立即将已上传的构建发布到所选渠道时,才使用 --publish。
组织 ID 和应用 ID 可在 Developer Dashboard 中获取。如果任何 metavr store dist 命令以非零状态退出或报告服务器或 GraphQL 错误(包括不明确的 Invalid parameter 错误),请勿继续重试 ID。请改为通过 Dashboard 上传。上传后,请确认构建显示的版本代码、签名和架构均正确。
第 6 步:提交审核
- 在 Developer Dashboard 中,前往应用的 Submission 标签页
- 确认所有部分都显示绿色勾号
- 处理页面顶部显示的所有错误或警告
- 点击 Submit for Review
此步骤只能在 Dashboard 中完成。不要告知开发者,CLI 上传成功就意味着已完成商店提交。
审核期预计约为 1-2 周。请至少在目标发布日期前 2 周提交。
第 7 步:跟踪进度
提交后:
- 在 Developer Dashboard 中监控应用状态
- 及时回复审核人员的反馈或问题
- 如果被拒,请仔细阅读拒绝原因,修复每个问题后重新提交
获批后:
- 选择立即发布或安排发布日期
- 发布后监控崩溃报告和用户反馈
- 为早期用户发现的任何问题规划后续更新
注意事项
- 版本代码必须始终递增 —— 你不能上传版本代码等于或低于之前已上传版本的构建。请在首次上传前规划好版本管理策略。
- 签名密钥是永久的 —— 使用特定签名密钥上传构建后,所有后续构建都必须使用同一密钥。丢失密钥库意味着你无法更新应用,必须创建新的应用条目。
- 截图要求严格 —— 截图必须来自实际应用,不能使用营销效果图或引擎编辑器视图。审核人员会将截图与实际应用体验进行比较。
- 审核时间各不相同 —— 虽然通常需要 1-2 周,但节假日、重新提交和审核量大都可能延长审核时间。请预留缓冲时间,不要承诺确切的上线日期。
- 由 Meta 管理发布与自助发布 —— 如果由 Meta 管理发布,你就无法在控制面板中设置自己的发布日期。请与客户经理协调。
- 2D 应用的要求有所不同 —— 如果提交的是 2D Android 应用(非沉浸式 VR),应用商店就绪要求仅为部分要求。不要假设所有沉浸式 VR 检查都适用于 2D 应用。
- 素材安全区域 —— 主视觉图和截图中的文字设有“安全区域”。如果文字延伸到外围 20% 区域,在不同的商店版位中可能会被裁切,导致审核被拒。
- 必须提供隐私政策 —— 即使是没有用户账户的免费应用,也需要提供隐私政策 URL。未提供隐私政策将无法提交。