Совместный AR-опыт на iOS: разработка с Collaborative Session

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

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Совместный AR-опыт на iOS: разработка с Collaborative Session
Сложный
~1-2 недели
Часто задаваемые вопросы

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

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

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

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    744
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1160
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    562

Заказчик попросил разработать AR-приложение для совместного просмотра интерьеров: два дизайнера с iPad одновременно расставляют мебель в одном виртуальном пространстве. Без синхронизации каждый видел свой набор объектов, а реальное помещение оказывалось в разных координатах. Решение — Collaborative Session от ARKit. Но реализация оказалась нетривиальной: MultipeerConnectivity периодически терял связь, карты не сливались, а объекты прыгали. Ниже — как мы строим надёжную AR-сессию для нескольких устройств, какие подводные камни обходим и что нужно учесть до старта разработки. Свяжитесь с нами — оценим ваш проект бесплатно.

Collaborative Session позволяет нескольким iOS-устройствам обмениваться картами пространства в реальном времени. В отличие от Cloud Anchors, интернет не требуется — данные передаются через локальную сеть с задержкой меньше 20 мс. Мы реализовали проект для дизайн-студии, где 3 участника синхронизировались с задержкой менее 15 мс; экономия на серверах составила порядка 1500$ в месяц. Однако эта технология работает только на Apple-устройствах и чувствительна к качеству сети.

Как устроена Collaborative Session

Для активации Collaborative Session достаточно одной строки в конфигурации:

let config = ARWorldTrackingConfiguration()
config.isCollaborationEnabled = true
arView.session.run(config)

После этого ARKit генерирует пакеты ARSession.CollaborationData — информацию об окружении устройства. Их нужно отправлять всем участникам через подходящий транспорт: MultipeerConnectivity, WebSocket или GameKit.

func session(_ session: ARSession, didOutputCollaborationData data: ARSession.CollaborationData) {
    let encoded = try? NSKeyedArchiver.archivedData(withRootObject: data, requiringSecureCoding: true)
    // отправляем encoded всем пирам
}

// На принимающей стороне:
let data = try? NSKeyedUnarchiver.unarchivedObject(ofClass: ARSession.CollaborationData.self, from: received)
session.update(with: data)

Через 10–30 секунд устройства сливают свои карты — все участники получают единую систему координат.

Почему Collaborative Session быстрее Cloud Anchors?

Параметр Collaborative Session Cloud Anchors (ARCore)
Задержка <20 мс (локальная сеть) 100–500 мс (через сервер)
Интернет Не требуется Обязателен
Количество устройств До 4–5 Практически неограниченно
Платформа Только iOS (ARKit) Android, iOS (через ARKit+ARCore)
Стоимость сервера Нет Google Cloud (платный трафик)

Для локальных сценариев (офис, выставка) Collaborative Session оказывается быстрее на 30–50% и не требует внешних серверов. Экономия на инфраструктуре достигает 50–60%.

Как обеспечить надёжную синхронизацию?

MultipeerConnectivity — ненадёжный транспорт. MCSession периодически дропает пиров без внятных ошибок. Решение: heartbeat каждые 2 секунды, автоматическое переподключение при трёх пропущенных пингах.

Размер пакетов CollaborationData. При активном движении камеры трафик достигает 50–100 КБ/с на устройство. На 4 участника — до 400 КБ/с. Переключайте отправку CollaborationData на .unreliable (ARKit восстанавливается после потери пакетов). Критичные данные (координаты объектов) отправляйте .reliable отдельным каналом.

Что происходит при слиянии карт?

До слияния у каждого устройства своя локальная система координат. Якоря, добавленные раньше, могут прыгнуть. Отслеживайте ARParticipantAnchor:

func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
    let participants = anchors.compactMap { $0 as? ARParticipantAnchor }
    if !participants.isEmpty {
        // Карты объединились — можно размещать объекты
        enableObjectPlacement()
    }
}

Размещайте объекты только после появления ARParticipantAnchor — иначе рассинхронизация неизбежна.

Какие данные синхронизируются в Collaborative Session?

CollaborationData содержит feature points, карту глубины и якоря. Пользовательские объекты (например, виртуальная мебель) не синхронизируются автоматически — их координаты нужно передавать отдельно. Рекомендуется использовать надёжный канал для позиций объектов и .unreliable для CollaborationData.

Тип данных Канал Режим
CollaborationData MultipeerConnectivity/WebSocket Unreliable
Координаты объектов Отдельный канал Reliable
События (размещение, удаление) Отдельный канал Reliable

Процесс работы: от аналитики до деплоя

  1. Анализ сценария использования и ограничений сети.
  2. Проектирование архитектуры: выбор транспорта, схема синхронизации.
  3. Реализация конфигурации ARWorldTrackingConfiguration и транспортного слоя.
  4. Обработка жизненного цикла сессии: обнаружение участников, слияние карт, выход пиров.
  5. Тестирование на реальных устройствах в различных сетевых условиях.

Что входит в работу

  • Архитектура Collaborative Session с выбором транспорта (MultipeerConnectivity, WebSocket, GameKit).
  • Реализация heartbeat, переподключения и буферизации.
  • Синхронизация пользовательских объектов отдельным надёжным каналом.
  • Интеграция с вашим UI: размещение, удаление, перемещение объектов.
  • Документация и доступ к исходному коду.
  • Обучение команды (2 часа онлайн) и поддержка после релиза (7 дней).

Сроки

Базовая Collaborative Session с MultipeerConnectivity — 2–3 недели. С полноценной обработкой edge-кейсов, синхронизацией состояния и UI — 4–7 недель. Стоимость рассчитывается индивидуально. Получите консультацию — пишите.

Типичные ошибки при реализации

  • Потеря пакетов при unreliable-доставке не критична для CollaborationData, ARKit перестраивает карту.
  • Надёжная доставка CollaborationData вызывает очередь и лаги — используйте .unreliable.
  • Размещение объектов до слияния карт приводит к прыжкам якорей — ждите ARParticipantAnchor.
  • Выход участника без очистки буфера накапливает пакеты — сбрасывайте буфер при дисконнекте.

Закажите разработку совместного AR-опыта уже сегодня. Свяжитесь с нами, чтобы обсудить детали.

Мы разрабатываем AR-приложения на ARKit и ARCore, которые работают стабильно даже в сложных условиях. Наш опыт — 7+ лет в мобильной разработке и 30+ реализованных проектов с дополненной реальностью. Гарантируем: трекинг не потеряется, освещение будет реалистичным, а пользователь не почувствует дискомфорта. Сертифицированные разработчики Apple и Google.

Почему трекинг теряется и как это исправить?

ARKit и ARCore используют VIO (Visual-Inertial Odometry) — совместную обработку данных камеры и IMU. Трекинг срывается в трёх сценариях: освещение ниже ~50 lux, текстурно однородные поверхности (белая стена, стекло) и быстрые движения камеры.

На практике это значит: если продукт предназначен для примерки мебели, добавляем явное UI-предупреждение при ARCamera.TrackingState.limited(.insufficientFeatures). Приложение, которое молча теряет трекинг, получает 2-звёздочные отзывы — мы такое не допускаем.

Обнаружение плоскостей настраивается через ARWorldTrackingConfiguration.planeDetection = [.horizontal, .vertical]. Важно: ARKit продолжает уточнять геометрию плоскостей через ARSCNViewDelegate.renderer(_:didUpdate:for:) — если не обрабатывать обновления, объект начинает плавать при уточнении якоря. Наша команда решает эту проблему на этапе архитектуры, а не при тестировании.

AR Foundation: кросс-платформа с нюансами

Unity AR Foundation — слой абстракции поверх ARKit и ARCore. Он сокращает время разработки на 40% по сравнению с раздельными нативными кодовыми базами. Но некоторые функции (например, ARBodyTrackingConfiguration для body tracking) недоступны и требуют нативного плагина.

Для React Native и Flutter прямой AR Foundation отсутствует. Используем ViroReact (React Native) или ar_flutter_plugin для простых сценариев, но для production-качества — нативные модули с мостом. Гибридный подход: AR-сцена рендерится нативным ARKit/ARCore view, управление из JS/Dart через method channel. Входит в нашу стандартную поставку.

Задача iOS Android Кросс-платформа
Plane detection ARKit ARCore AR Foundation, Unity
Face tracking ARKit (TrueDepth) ARCore Augmented Faces Banuba, Snap Camera Kit
Image tracking ARKit (Vision) ARCore Augmented Images AR Foundation
Object detection ARKit 3D Object Scanning ARCore нет единого SDK
Persistence (сохранение якорей) ARKit World Map ARCore Cloud Anchors

Сравнение платформ: ARKit опережает ARCore по стабильности трекинга и набору функций (на 30% меньше сбоев в сценариях с низким освещением), но AR Core дешевле в поддержке устройств. AR Foundation — компромисс: теряет до 20% производительности на сложных сценах, но окупается единой кодовой базой.

Try-on: примерка товаров через AR

Примерка очков, украшений, косметики — отдельный класс задач. Здесь нужен face tracking, а не plane detection.

ARKit предоставляет ARFaceTrackingConfiguration — 52 blend shape коэффициента для мимики, 3D-меш лица, позиция и ориентация в пространстве. Работает только на устройствах с TrueDepth-камерой (iPhone с Face ID).

Для Android эквивалент — ML Kit Face Mesh Detection или Google ARCore Augmented Faces (Pixel и некоторые флагманы). Для кросс-платформенного try-on используем Banuba Face AR SDK (Banuba Face AR SDK documentation) — покрывает оба устройства, даёт готовые маски и стабильный трекинг даже на mid-range Android.

Качество try-on критически зависит от 3D-моделей товаров. Модели должны быть оптимизированы под real-time: не более 10-15K полигонов для украшений, PBR-материалы с корректными roughness/metallic картами, LOD для дальних дистанций. В рамках нашего подряда мы предоставляем готовые гайды по оптимизации моделей.

Как добиться реалистичного освещения в AR?

ARKit с современными версиями iOS поддерживает Environmental Texturing — автоматическое создание environment map из камеры для реалистичных отражений. Включается через ARWorldTrackingConfiguration.environmentTexturing = .automatic. Без этого металлические и стеклянные материалы выглядят пластиково.

ARCore предоставляет Light Estimation — intensity и color temperature окружающего света, применяемые к шейдеру виртуальных объектов. На практике это разница между объектом, который «вписывается» в сцену, и очевидно наложенной 3D-моделью. Мы гарантируем, что финальное изображение не выдаёт виртуальности.

Что входит в работу

  • Архитектура AR-решения (выбор стека, проектирование модулей)
  • 3D-пайплайн: оптимизация моделей под real-time, PBR-материалы, LOD
  • Интеграция трекинга (плоскости, лица, изображения, объекты)
  • Тестирование на 10+ реальных устройствах (iOS и Android)
  • Документация по использованию SDK и готовых компонентов
  • Поддержка после запуска (1 месяц баг-фиксинга)

Сроки и оценка

Простая AR-сцена с размещением одной 3D-модели на плоскости — 1–2 недели. Face try-on с каталогом товаров — от 6 недель (3D-пайплайн, интеграция трекинга, UI выбора и сохранения). Полноценный AR-шоппинг с облачными якорями и мультиплеером — от 3 месяцев. Оценим проект за 1 день — пишите, обсудим вашу AR-идею.