Наша команда має понад 10 років досвіду в AR-розробці та сертифікацію Apple, а також 40+ виконаних проєктів. Заказник попросив розробити AR-додаток для спільного перегляду інтер'єрів: два дизайнери з iPad одночасно розставляють меблі в одному віртуальному просторі. Без синхронізації кожен бачив свій набір об'єктів, а реальне приміщення опинялося в різних координатах. Рішення — Collaborative Session від ARKit. Але реалізація виявилася нетривіальною: MultipeerConnectivity періодично втрачав зв'язок, карти не зливалися, а об'єкти стрибали. Нижче — як ми будуємо надійну AR-сесію для кількох пристроїв, які підводні камені оминаємо і що потрібно врахувати до старту розробки. Зв'яжіться з нами — оцінимо ваш проєкт безплатно.
Collaborative Session є альтернативою Cloud Anchors: вона дозволяє кільком пристроям 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 (платний трафік) |
Джерело: Apple ARKit Documentation
Collaborative Session швидша за Cloud Anchors у 5–25 разів за затримкою, що особливо важливо для локальних сценаріїв (офіс, виставка). Економія на інфраструктурі досягає 50–60%.
Як забезпечити надійну синхронізацію?
MultipeerConnectivity — ненадійний транспорт. MCSession періодично дропає пірів без зрозумілих помилок. Рішення: heartbeat MultipeerConnectivity кожні 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 та транспортного шару.
- Обробка життєвого циклу сесії: виявлення учасників, злиття карт, вихід пірів.
- Тестування на реальних пристроях у різних мережевих умовах.
- Підтримка після релізу (гарантія стабільної роботи 7 днів).
Що входить в роботу
- Архітектура Collaborative Session з вибором транспорту (MultipeerConnectivity, WebSocket, GameKit).
- Реалізація heartbeat, перепідключення та буферизації.
- Синхронізація користувацьких об'єктів окремим надійним каналом.
- Інтеграція з вашим UI: розміщення, видалення, переміщення об'єктів.
- Документація та доступ до вихідного коду.
- Навчання команди (2 години онлайн) та підтримка після релізу (7 днів).
Строки
Базова Collaborative Session з MultipeerConnectivity — 2–3 тижні, орієнтовна вартість від $3000. З повноцінною обробкою edge-кейсів, синхронізацією стану та UI — 4–7 тижнів. Вартість розраховується індивідуально. Отримайте консультацію — пишіть.
Типові помилки при реалізації
- Втрата пакетів при unreliable-доставці не критична для CollaborationData, ARKit перебудовує карту.
- Надійна доставка CollaborationData спричиняє чергу та лаги — використовуйте
.unreliable. - Розміщення об'єктів до злиття карт призводить до стрибків якорів — чекайте
ARParticipantAnchor. - Вихід учасника без очищення буфера накопичує пакети — скидайте буфер при дисконекті.
Замовте розробку спільного AR-досвіду вже сьогодні. Зв'яжіться з нами, щоб обговорити деталі.







