Внедрение 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, что гарантирует корректную работу.
Сравнение с 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 — интеграция uwb с
Самый распространённый подход для 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.







