Інтеграція 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, stereo projection та QR-сканування профілю пристрою.

Поточний статус: Cardboard SDK проти 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" в manifest + обробка 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, stereo проекції.

Gaze interaction та Cardboard button.

Тестування на реальних пристроях різних виробників.

Оцінка часу

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