Інтеграція Google Cardboard SDK у мобільний застосунок
Користувач надягає Cardboard-гарнітуру, запускає застосунок — і бачить роздвоєну картинку без стереоефекту. Знайома ситуація? Інтеграція Google VR SDK (тепер Cardboard) потребує точного налаштування трекінгу голови, корекції дисторсії та роботи з QR-кодами. Неправильний трекінг призводить до заколисування, а некалібровані лінзи роблять зображення розмитим.
Ми допомогли десяткам проєктів реалізувати VR-функціонал — від простого перегляду 360° відео до повноцінних інтерактивних симуляторів. Інженери сертифіковані Apple та Google, досвід роботи з VR перевищує 5 років. За останні роки виконано понад 50 інтеграцій: середня економія часу замовника склала 30%, а окупність інвестицій у VR досягає 6 місяців. Google Cardboard SDK documentation рекомендує починати з демо-проєкту.
Чому Cardboard SDK кращий за застарілий Google VR SDK?
Оригінальний Google VR SDK (gvr-android-sdk) замінено на відкритий Google Cardboard SDK. Якщо у проєкті використовується старий com.google.vr.sdk — рекомендується міграція. Новий Cardboard SDK активно підтримується: він у 2 рази швидше обробляє трекінг та забезпечує кращу корекцію дисторсії. На відміну від старого SDK, Cardboard підтримує iOS та має відкритий вихідний код.
Порівняння старого та нового SDK:
| Параметр | Google VR SDK (старий) | Cardboard SDK (новий) |
|---|---|---|
| Статус | Deprecated | Активно підтримується |
| Платформи | Android, Unity | Android, iOS, Unity |
| Стереорендеринг | Вбудований | Вбудований + оптимізація |
| Корекція дисторсії | Є | Покращена |
| QR-сканування | Тільки Android | iOS та Android |
| Open Source | Ні | Так |
Як інтегрувати Cardboard SDK у Unity?
Найпоширеніший шлях — через Unity Package Manager. Виконайте кроки:
- Відкрийте Window > Package Manager.
- Додайте пакет з git URL:
https://github.com/googlevr/cardboard.git#upm. - У сцені додайте компонент
CardboardCameraна Main Camera. - Налаштуйте параметри пристроїв (QR або вручну).
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);
distortionRenderer.renderEyeToDisplay(
/* display */ 0, /* x */ 0, /* y */ 0,
/* width */ displayWidth, /* height */ displayHeight,
/* leftEyeParams */ leftEyeParams,
/* rightEyeParams */ rightEyeParams
);
}
Нативна інтеграція iOS (Swift)
// Podfile або SPM
pod 'GoogleCardboard', '~> 1.21'
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-код не сканується?
QR-сканер відкривається при першому запуску або за явним запитом користувача. Потенційні проблеми:
- Користувач відмовився сканувати → SDK використовує дефолтні параметри Cardboard v1. Lens distortion буде некоректною для нестандартних корпусів.
- QR-код не читається (погане освітлення, пошкоджений код) → кнопка «ввести вручну» або «використовувати стандартний Cardboard».
- Після зміни корпусу → в налаштуваннях застосунку кнопка «змінити гарнітуру», викликає
CardboardQrCode.scanQrCodeAndSaveDeviceParams().
Режим split-screen та fullscreen
Cardboard SDK очікує ландшафтну орієнтацію. На iOS це означає блокування UIInterfaceOrientationMask на .landscapeRight. На Android — android:screenOrientation="landscape" в маніфесті + обробка 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 або нативний, залежності, цільові версії ОС
- Інтеграція Cardboard SDK, налаштування QR-сканування
- Адаптація рендерингу: split-screen, lens distortion, стереопроєкції
- Реалізація gaze interaction та Cardboard button
- Тестування на реальних пристроях різних виробників (мінімум 5 моделей)
- Документація з інтеграції та підтримка протягом 30 днів
Чому обирають нас?
Ми реалізували VR-функціонал у понад 50 проєктах. Інженери сертифіковані Apple та Google, інтеграція виконується під ключ з гарантією якості. Середня економія часу клієнтів — 30%, а середня економія бюджету на тестуванні — 40%. Зв'яжіться з нами для отримання консультації — оцінимо ваш проєкт безкоштовно.
Орієнтири за термінами
| Тип інтеграції | Термін |
|---|---|
| Базова інтеграція Cardboard SDK в Unity | від 2 днів |
| Нативна інтеграція з кастомним рендерером (Android/iOS) | від 3 до 5 днів |
| Комплексна інтеграція з gaze-інтерфейсом та аналітикою | від 7 днів |
Отримайте точну оцінку вашого проєкту: зв'яжіться з нами, і ми допоможемо впровадити VR швидко та без головного болю.







