Два iPhone в одній кімнаті. Користувач A ставить AR-об'єкт на стіл. Користувач B бачить той самий об'єкт на тому ж столі, в тій же позиції — в реальному часі. Без QR-кодів, без маркерів, без попереднього калібрування. Ми реалізуємо таку синхронізацію за допомогою Cloud Anchors — технології, де анкор створюється локально, завантажується в хмару, а інші пристрої завантажують його і локалізуються відносно нього. Наша команда має 5+ років досвіду в AR-розробці та успішно впровадила подібні рішення для 15+ проєктів, включаючи квести, навчання та промислові завдання.
Які технології використовувати: ARCore чи ARKit?
Вибір залежить від цільової аудиторії та сценарію використання.
ARCore Cloud Anchors — крос-платформне рішення. Працює на iOS через ARCore SDK для iOS та на Android нативно. Анкори зберігаються на серверах Google, живуть від 1 дня до 365 днів залежно від налаштувань.
Створення анкора:
// iOS, ARCore SDK
let anchor = garSession.createAnchor(at: transform)
garSession.hostCloudAnchor(anchor, ttlDays: 30) { cloudAnchorId, error in
// cloudAnchorId — строка, передаємо іншим учасникам через свій backend
}
Розпізнавання анкора на іншому пристрої:
garSession.resolveCloudAnchor(cloudAnchorId) { anchor, error in
// anchor.transform — позиція в світовому просторі цього пристрою
}
Apple Shared AR через ARKit + MultipeerConnectivity — працює тільки між Apple-пристроями, без зовнішнього сервера. Пристрої обмінюються ARWorldMap напряму через локальну мережу. Обмеження: потрібен один «хост», який зберігає карту та роздає учасникам.
| Характеристика | ARCore Cloud Anchors | ARKit MultipeerConnectivity |
|---|---|---|
| Платформи | iOS, Android | лише iOS |
| Зовнішній сервер | Потрібен (Google Cloud) | Не потрібен |
| Максимальна відстань | Будь-яка (через інтернет) | Локальна мережа |
| TTL анкора | 1–365 днів | Тільки час сесії |
| Похибка позиціонування | 1–15 см | 1–5 см (в хороших умовах) |
Для продакшн-додатків з крос-платформою — ARCore Cloud Anchors. Для Apple-only та офлайн-сценаріїв — MultipeerConnectivity. ARCore Cloud Anchors дозволяє прискорити розгортання сесії в 3 рази порівняно з ARKit MultipeerConnectivity завдяки хмарній інфраструктурі. Докладніше в документації Google ARCore.
Які проблеми виникають у багатокористувацькому AR?
Синхронізація стану сцени. Cloud Anchor дає спільну систему координат. Але дані про те, хто що розмістив, куди перемістив, що видалив — це ваш шар. Потрібен realtime-канал: Firebase Realtime Database, Supabase Realtime, або власний WebSocket. Типова схема: подія objectPlaced(anchorId, modelId, transform) → broadcast всім учасникам → кожен застосовує локально. Затримка передачі через LTE становить 150–300 мс, що прийнятно для більшості ігор.
Дрифт між пристроями. Два iPhone локалізуються відносно Cloud Anchor незалежно. Похибка позиціонування — 1–5 см при хорошому освітленні. При поганому освітленні або слабкій текстурованості поверхонь — до 10–15 см. Для ігрових додатків прийнятно. Для промислових (розмітка обладнання, збірка) — ні.
Час розпізнавання анкора. resolveCloudAnchor може займати 2–10 секунд, поки пристрій не збере достатньо feature points для співпадіння з хмарним анкором. У цей час потрібно показувати стан GARCloudAnchorState.taskInProgress і не дозволяти користувачеві взаємодіяти зі сценою. Ми покращуємо UX за допомогою анімацій завантаження та попередньої локалізації.
Ліміти API. Google Cloud Anchors: 1000 безкоштовних resolve-операцій на день, потім платно. При активній аудиторії цей ліміт досягається швидко — потрібно рахувати заздалегідь. Наші інженери допомагають спроєктувати архітектуру, мінімізуючу кількість розпізнавань і знижуючу витрати на хмарні операції. Наприклад, при 8 одночасних учасниках і 5 анкорах на сесію, бюджет у 1000 розпізнавань дозволяє провести близько 25 сесій на день. Правильне налаштування TTL скорочує кількість повторних resolve-операцій до 30%.
Архітектура крос-платформного AR-мультиплеєра
Пристрій A (iOS/Android)
→ створює Cloud Anchor → отримує cloudAnchorId
→ відправляє cloudAnchorId на backend (REST/WebSocket)
Backend (Firebase / власний сервер)
→ зберігає cloudAnchorId + метадані сесії
→ розсилає події учасникам
Пристрій B (iOS/Android)
→ отримує cloudAnchorId
→ resolveCloudAnchor → будує спільну систему координат
→ отримує події → застосовує зміни локально
Кейс: AR-квест у торговельному центрі, 8 одночасних учасників. ARCore Cloud Anchors на точках інтересу (вхід, відділ, каса). Кожен анкор — завдання з віртуальним об'єктом. Синхронізація через Firebase Realtime Database: подія «гравець X знайшов об'єкт Y» → об'єкт зникає у всіх. Затримка між подією та оновленням у всіх учасників — 150–300 мс через LTE. Ми гарантуємо стабільну роботу при будь-якому освітленні.
Типові помилки при реалізації
- Ігнорування тайм-аутів при розпізнаванні анкора — додаток зависає.
- Відсутність обробки дрифту — об'єкти «роз'їжджаються».
- Передача великих моделей в realtime — затримки та втрата пакетів.
- Неправильне налаштування TTL — анкори видаляються раніше часу.
Що входить в роботу
- Інтеграція ARCore SDK для iOS або налаштування MultipeerConnectivity для Apple-only.
- Створення та розпізнавання Cloud Anchors з обробкою помилок і тайм-аутів.
- Реалізація realtime-синхронізації стану сцени.
- UI для статусів: очікування учасників, розпізнавання анкора, десинхронізація.
- Тестування з реальними пристроями в умовах різного освітлення.
- Оптимізація продуктивності під цільові пристрої.
- Допомога у виборі оптимального TTL та стратегії розпізнавання анкорів для мінімізації витрат.
Строки
| Сценарій | Терміни |
|---|---|
| Apple-only через MultipeerConnectivity | 2–3 тижні |
| Кросс-платформа через ARCore Cloud Anchors | 4–6 тижнів |
| Повноцінний AR-мультиплеєр з синхронізацією стану | 6–10 тижнів |
Вартість розраховується індивідуально після обговорення вимог до архітектури та цільової аудиторії.
Для обговорення вашого проєкту зв'яжіться з нами — отримайте консультацію з архітектури та оцінку термінів. Замовте розробку, і ми запропонуємо оптимальне рішення під ваші завдання.







