Сборка и подписание билдов для Meta Quest Store
Мы интегрируем и настраиваем релизные сборки для Meta Quest Store — от генерации keystore до финальной подписи APK/AAB. Никаких сюрпризов при сабмите: все entitlement, манифест и настройки пакета проверяются до отправки. Если вы уже сталкивались с ошибкой INVALID_CREDENTIALS после перехода на релизный keystore — вероятно, fingerprint не совпадает. Опишем типовые проблемы и процесс их решения.
Где конкретно ломается цепочка подписания
Самая частая проблема — несоответствие keystore между debug и release сборками. Разработчик тестировал приложение месяцами с debug keystore, всё работало. При переходе на release keystore с другим SHA-1 перестают работать entitlements, привязанные к приложению в Horizon Developer Dashboard. Пользователь устанавливает приложение, открывает — получает ошибку авторизации в Platform SDK, потому что OVRPlatform.Initialize() возвращает INVALID_CREDENTIALS.
Второй класс проблем — AndroidManifest.xml. Meta требует набор специфичных permissions и intent-filter: com.oculus.permission.HAND_TRACKING, com.oculus.permission.EYE_TRACKING, com.oculus.intent.category.VR. Если приложение использует passthrough, нужно явно прописать com.oculus.permission.USE_SCENE и horizonos.permission.USE_ANCHOR_API для пространственных якорей. Пропустил один — функция молча не работает, без ошибок в логах, только если включить verbose в adb logcat.
Отдельно стоит quest_categories в manifest.json пакета Horizon Store. Неправильная категория или отсутствующий supported_input_devices — и приложение не пройдёт автоматическую проверку. Meta проверяет соответствие манифеста заявленным функциям приложения.
Процесс сборки релизного билда
Работаем через Oculus Developer Hub или напрямую через командную строку с adb и apksigner из Android SDK Build Tools. Для Unity-проектов — Gradle wrapper, настройки в launcherTemplate.gradle и mainTemplate.gradle.
Ключевые шаги для корректного release-билда:
Keystore генерируется через keytool с параметрами -keyalg RSA -keysize 2048 -validity 10000. Хранится отдельно от репозитория, SHA-1 и SHA-256 сохраняются в защищённом хранилище проекта. В Unity — Player Settings → Publishing Settings → Use Custom Keystore.
target-api-level должен быть 32 или выше для новых сабмитов (актуальное значение уточняется в документации Horizon OS — Meta периодически повышает минимальный порог).
Для проверки подписи перед сабмитом: apksigner verify --verbose --print-certs app-release.apk. Убеждаемся, что цепочка сертификатов корректна и fingerprint совпадает с зарегистрированным в Dashboard.
Тестирование подписанного билда на устройстве — через adb install -r app-release.apk. Перед тестом удаляем debug-версию полностью, иначе система может подхватить старые credentials.
Специфика для разных каналов дистрибуции
Meta Quest Store предполагает несколько каналов: App Lab (для ранних тестеров без полного ревью), Horizon Store (публичная публикация с полным ревью), и Side Quest / sideloading для внутреннего тестирования.
Для App Lab и Horizon Store требования к подписи идентичны — разница только в процессе ревью. Для sideloading можно использовать debug keystore, но только для внутренних тестов — это не релизный флоу.
Если в проекте используется Passthrough API или Mixed Reality Utility Kit (MRUK), в manifest.json добавляется секция required_feature с PASSTHROUGH. Без этого приложение не запустится на устройствах с отключённым passthrough.
| Тип сборки | Keystore | Target API | Проверка entitlements |
|---|---|---|---|
| Debug / Dev Mode | Debug keystore | Любой | Опционально |
| App Lab | Release keystore | ≥ 32 | Обязательно |
| Horizon Store | Release keystore | ≥ 32 | Обязательно + ревью Meta |
Как устроен процесс работы
Получаем доступ к Horizon Developer Dashboard организации или работаем через предоставленный app ID. Проводим аудит текущего манифеста и Gradle-конфигурации. Настраиваем keystore-инфраструктуру, если её нет. Затем сборка, подписание, тест на устройстве, подготовка пакета для сабмита.
Если проект уже был опубликован и требует update — проверяем совместимость версии keystore и versionCode (Meta не принимает пакет с versionCode ≤ предыдущему).
Что входит в работу
- Аудит существующего манифеста и конфигурации сборки
- Генерация и настройка release keystore (с защитой и бэкапом)
- Настройка AndroidManifest.xml и manifest.json под требования Meta
- Сборка, подписание и проверка на устройстве
- Подготовка пакета для сабмита (App Lab / Horizon Store)
- Документация по процессу и доступы
- Поддержка при отклонении ревью (одна итерация)
Почему стоит доверить сборку нам?
Более 7 лет работаем с VR- и AR-проектами на Unity и Unreal Engine. Выпустили свыше 15 приложений в Meta Quest Store. Знаем все типичные ошибки — от пропущенных entitlement до неверной категории в manifest.json. Мы гарантируем, что подписанный APK пройдёт автоматическую проверку Meta при условии корректного манифеста с вашей стороны.
Сроки: настройка с нуля — 1-2 рабочих дня. Если есть готовый проект с существующим манифестом и требуется только исправление и сабмит — несколько часов. Итерация при отклонении Meta — зависит от причины.
Оценим ваш проект бесплатно — напишите нам, и мы подготовим план работ и точную стоимость. Под ключ с гарантией прохождения ревью.






