Заказчик попросил разработать 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 |
Процесс работы: от аналитики до деплоя
- Анализ сценария использования и ограничений сети.
- Проектирование архитектуры: выбор транспорта, схема синхронизации.
- Реализация конфигурации ARWorldTrackingConfiguration и транспортного слоя.
- Обработка жизненного цикла сессии: обнаружение участников, слияние карт, выход пиров.
- Тестирование на реальных устройствах в различных сетевых условиях.
Что входит в работу
- Архитектура 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-опыта уже сегодня. Свяжитесь с нами, чтобы обсудить детали.







