Интеграция Google VR SDK в мобильное приложение

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Интеграция Google VR SDK в мобильное приложение
Средний
~3-5 дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Интеграция Google VR SDK в мобильное приложение

Google VR SDK (он же Cardboard SDK после ребрендинга 2021 года) — официальная библиотека для добавления Cardboard VR в мобильные приложения на iOS и Android. SDK берёт на себя lens distortion, head tracking, стереопроекцию и QR-сканирование профиля устройства.

Текущий статус: Cardboard SDK vs deprecated Google VR SDK

Важный момент: оригинальный Google VR SDK (gvr-android-sdk) объявлен deprecated с 2019 года. Актуальная версия — открытый Google Cardboard SDK, который активно поддерживается. Если в проекте используется старый com.google.vr.sdk — рекомендуется миграция.

Новый Cardboard SDK поддерживает:

  • Unity через UPM пакет com.google.cardboard
  • Нативный Android (C++ через JNI + Java wrapper)
  • Нативный iOS (Objective-C/Swift)

Интеграция в Unity

Самый распространённый путь. Через Package Manager добавляем com.google.cardboard из git URL:

https://github.com/googlevr/cardboard.git#upm

После установки в сцену добавляем CardboardCamera компонент на Main Camera. SDK автоматически:

  • Разбивает экран пополам для стереорендеринга
  • Применяет lens distortion correction
  • Читает head tracking из IMU
  • Обрабатывает trigger button
// Первый запуск: показываем UI для сканирования QR
void Start() {
    if (!CardboardQrCode.IsDeviceParamsSet()) {
        Cardboard.SDK.ScanDeviceParams();
    }
}

// Recenter по нажатию кнопки
void Update() {
    if (CardboardInput.GetButtonDown()) {
        Cardboard.SDK.Recenter();
    }
}

Нативная интеграция Android (Java/Kotlin)

Для нативных приложений без Unity:

// build.gradle
implementation 'com.google.cardboard:sdk:1.21.0'

Ключевые компоненты SDK:

// Инициализация в Activity
private CardboardHeadTracker headTracker;
private CardboardLensDistortion lensDistortion;
private CardboardDistortionRenderer distortionRenderer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    CardboardSdk.initializeOnce(this, "your-app-name");
    headTracker = CardboardHeadTracker.create();
    // ...
}

// В render loop (вызывается из GLSurfaceView)
@Override
public void onDrawFrame(GL10 gl) {
    // Получаем матрицы для каждого глаза
    long monotonic_time_ns = System.nanoTime();
    float[] leftEyeViewMatrix  = new float[16];
    float[] rightEyeViewMatrix = new float[16];

    headTracker.getPose(monotonic_time_ns, leftEyeViewMatrix, rightEyeViewMatrix);

    // Рендеринг каждого глаза...

    // Применяем lens distortion через SDK
    distortionRenderer.renderEyeToDisplay(
        /* display */ 0, /* x */ 0, /* y */ 0,
        /* width */ displayWidth, /* height */ displayHeight,
        /* leftEyeParams */ leftEyeParams,
        /* rightEyeParams */ rightEyeParams
    );
}

Нативная интеграция iOS (Swift)

// Podfile или SPM
pod 'GoogleCardboard', '~> 1.21'

// CardboardV1API — основной entry point
import CardboardSDK

class VRViewController: UIViewController {
    private var renderer: CardboardRenderer!

    override func viewDidLoad() {
        super.viewDidLoad()
        CardboardQrCode.getSavedDeviceParams { [weak self] params in
            if params == nil {
                CardboardQrCode.scanQrCodeAndSaveDeviceParams(from: self)
            }
            self?.initRenderer()
        }
    }
}

QR-сканирование: обработка edge cases

QR-сканер открывается при первом запуске или по явному запросу пользователя. Потенциальные проблемы:

  • Пользователь отказался сканировать → SDK использует дефолтные параметры Cardboard v1. Lens distortion будет некорректной для нестандартных корпусов.
  • QR-код не читается (плохое освещение, повреждённый код) → кнопка «ввести вручную» или «использовать стандартный Cardboard».
  • После смены корпуса → в настройках приложения кнопка «изменить гарнитуру», вызывает CardboardQrCode.scanQrCodeAndSaveDeviceParams().

Режим split-screen и fullscreen

Cardboard SDK ожидает ландшафтную ориентацию. На iOS это означает блокировку UIInterfaceOrientationMask на .landscapeRight. На Android — android:screenOrientation="landscape" в манifest + обработка onConfigurationChanged чтобы не пересоздавать activity.

Экранные вырезы (notch, Dynamic Island) в ландшафтном режиме могут перекрывать часть VR-картинки. Используем WindowInsets.displayCutout (Android) и safeAreaInsets (iOS) для правильного позиционирования рендер-области.

Типичные проблемы при интеграции

IllegalStateException: Surface is not valid при старте на Android — GLSurfaceView не готов к моменту инициализации Cardboard. Решается инициализацией в surfaceCreated() callback, а не в onCreate().

SDK не компилируется с новым NDK — Cardboard SDK имеет нативную C++ часть, иногда требует явного abiFilters "armeabi-v7a", "arm64-v8a" в gradle.

На iOS 17+ CMMotionManager требует NSMotionUsageDescription в Info.plist — без него краш при старте VR-режима.

Процесс работы

Аудит существующего проекта: Unity или нативный, текущие зависимости, целевые iOS/Android версии.

Интеграция Cardboard SDK, настройка QR-сканирования.

Адаптация рендеринга: split-screen, lens distortion, стерео проекции.

Gaze interaction и Cardboard button.

Тестирование на реальных устройствах разных производителей.

Ориентиры по срокам

Базовая интеграция Cardboard SDK в Unity-проект — 2–3 дня. Нативная интеграция с кастомным рендерером для iOS или Android — 3–5 дней.