Впровадження UWB через Nearby Interaction у iOS-додатки
UWB (Ultra Wideband) — не Bluetooth, не iBeacon і не GPS. Це технологія з сантиметровою точністю: додаток отримує distance у метрах із точністю ±10–15 см та direction — 3D-вектор до пристрою в просторі (на iPhone 14 Pro і новіших через двонаправлені антени). UWB незамінний для точкового наведення в шерінгу файлів і платежах, пошуку загублених предметів (як AirTag), керування розумним домом та AR-додатків із просторовою прив'язкою. Ми маємо багаторічний досвід у розробці iOS-додатків з UWB та гарантуємо дотримання App Store Review Guidelines і конфіденційність даних.
UWB-сесія вимагає дозволу користувача (NSNearbyInteractionAllowOnceUsageDescription), і Apple строго контролює використання даних про місцезнаходження. Тестування UWB можливе лише на фізичних пристроях — симулятор не підтримує чип U1/U2. Тому ми проводимо тестування на реальних iPhone, що гарантує коректну роботу.
На одному з наших проєктів для мережі розумних будинків ми інтегрували UWB для точного відкриття дверей при наближенні. Час реакції становив менше 1 секунди, а точність — до 10 см.
Порівняння з Bluetooth
Bluetooth дає точність близько 1 метра і не визначає напрямок. UWB точніший у 100 разів — ±10 см проти метра, що критично для навігації всередині приміщень та AR. Однак UWB працює лише на відстані до 9 м, не підтримує фоновий режим і вимагає прямої видимості. Вибір технології залежить від сценарію: для широкого охоплення — Bluetooth, для точкових операцій — UWB.
| Технологія | Точність | Дальність | Споживання | Фоновий режим |
|---|---|---|---|---|
| UWB | ±10 см | до 9 м | ~100 мВт | Ні |
| Bluetooth | ~1 м | до 100 м | ~10 мВт | Так |
| GPS | ~5 м | необмежено | ~50 мВт | Так |
Як налаштувати сесію Nearby Interaction
Основна компонента — NISession. Створіть сесію, встановіть делегат і запустіть з конфігурацією NINearbyPeerConfiguration. Код нижче демонструє базову реалізацію:
import NearbyInteraction import MultipeerConnectivity class UWBSessionManager: NSObject, NISessionDelegate { private var niSession = NISession() private var peerToken: NIDiscoveryToken? override init() { super.init() niSession.delegate = self } func startSession(with peerToken: NIDiscoveryToken) { let config = NINearbyPeerConfiguration(peerToken: peerToken) config.isCameraAssistanceEnabled = true niSession.run(config) } func session(_ session: NISession, didUpdate nearbyObjects: [NINearbyObject]) { guard let peer = nearbyObjects.first else { return } if let distance = peer.distance { print("Distance: \(distance) m") } if let direction = peer.direction { print("Direction: \(direction)") } } func session(_ session: NISession, didInvalidateWith error: Error) { // Обробка помилок } } Обмін токенами через MultipeerConnectivity
Найпоширеніший підхід для P2P: використовуємо MCSession для передачі токена, потім запускаємо NISession. Важно: NIDiscoveryToken не можна передати як рядок — кодуємо через NSKeyedArchiver:
let tokenData = try NSKeyedArchiver.archivedData( withRootObject: niSession.discoveryToken!, requiringSecureCoding: true ) mcSession.send(tokenData, toPeers: peers, with: .reliable) На приймальній стороні:
let token = try NSKeyedUnarchiver.unarchivedObject( ofClass: NIDiscoveryToken.self, from: data ) Спроба передати токен через JSON не працює — NIDiscoveryToken не Encodable.
Які помилки можуть виникнути при інтеграції?
Обробка помилок сесії — критична частина. Ось типові помилки та їх вирішення:
| Код помилки | Опис | Дія |
|---|---|---|
userDidNotAllow |
Користувач відхилив дозвіл | Запросити дозвіл знову |
resourceUsageLimitReached |
Перевищено ліміт ресурсів (багато сесій) | Перезапустити сесію |
sessionFailed |
Критичний збій | Переініціалізувати сесію |
Чому Camera Assistance така важлива?
На iPhone 14 Pro та 15 серії доступний режим isCameraAssistanceEnabled = true. Система показує нативний AR overlay із вказівником напрямку. Активується лише за наявності дозволу на камеру. Додає затримку ~200 мс до отримання перших direction-даних, але значно покращує користувацький досвід.
Що входить у роботу
- Аналіз сценарію та перевірка сумісності пристроїв (
NIDeviceCapability) - Проєктування архітектури: вибір способу обміну токенами
- Реалізація
NISessionз конфігурацією P2P або для аксесуарів - Обробка оновлень відстані/напрямку в реальному часі
- Тестування на двох фізичних пристроях (симулятор не підтримує UWB)
- Деплой з дотриманням App Store Review Guidelines
- Документування та передача вихідного коду
Процес роботи
- Аналітика — розбираємо сценарій, перевіряємо сумісність.
- Проєктування — вибираємо спосіб передачі токена (MultipeerConnectivity, Bluetooth, REST).
- Реалізація — пишемо
NISessionз конфігурацією та делегатом. - Тест — запускаємо на двох реальних пристроях (симулятор не підтримує UWB).
- Деплой — публікуємо з дотриманням правил App Store.
Строки та вартість
Орієнтовно 5 днів на типовий P2P-проєкт з MultipeerConnectivity: 1 день аналітика та вибір архітектури, 2 дні реалізація сесії та обмін токенами, 1 день тестування на двох фізичних iPhone, 1 день оформлення документації та передача. Для проєктів з аксесуарами (UWB-чип третьої сторони) або Camera Assistance AR overlay термін збільшується до 7–8 днів. Вартість розраховується індивідуально після аналізу сценарію. Зв'яжіться з нами — ми оцінимо ваш проєкт і запропонуємо оптимальне рішення.
Список пристроїв з підтримкою UWB
- iPhone 11, 12, 13, 14, 15 всіх моделей (крім SE)
- Apple Watch Series 6 і новіші
- HomePod mini та HomePod (2-го покоління)
- Аксесуари з чипом U1/U2
Отримайте консультацію з інтеграції UWB — допоможемо вирішити задачу з сантиметровою точністю. Якщо вам потрібна інтеграція UWB, зв'яжіться з нами для оцінки проєкту.
Nearby Interaction Documentation — офіційна документація Apple.







