Реалізація UWB-ключів для відкриття дверей/авто через мобільний додаток

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

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація UWB-ключів для відкриття дверей/авто через мобільний додаток
Складний
від 2 тижнів до 3 місяців
Часті запитання

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

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Реалізація UWB-ключів для відкриття дверей/авто через мобільний додаток

UWB (Ultra-Wideband) — не Bluetooth з точним позиціонуванням. Це IEEE 802.15.4z, імпульсна радіосвязь з точністю вимірювання дистанції ±10 см та кута ±5°. iPhone 11+ та сучасні Android-флагмани з чипом Qorvo DWM3000 або NXP SR150 вміють визначати точне положення UWB-пристрою у просторі. На цьому будуються Hands-Free ключі: телефон у кармані → дверь відкривається при приближенні на 0.5–1.5 м. Без натиснення. Без NFC-додатку.

Як працює UWB Ranging

UWB використовує Two-Way Ranging (TWR): пристрій відправляє імпульс, акцесуар відповідає, за часом пролету (Time-of-Flight) обчислюється дистанція з сантиметровою точністю. На відміну від RSSI у Bluetooth — жодних перешкод від багатолучевого поширення, стін, тіла людини.

Архітектура Hands-Free unlock:

  1. Смартфон починає BLE-advertise при розблокуванні
  2. UWB-модуль у замку виявляє телефон за BLE
  3. Ініціюється UWB-сесія для точного виміру дистанції
  4. При дистанції < 1.5 м + кут у секторі «перед дверею» → замок відкривається
  5. При видаленні > 5 м → замок закривається

iOS: NearbyInteraction framework

Apple відкрила UWB-доступ через NearbyInteraction (iOS 14+). Працює тільки на iPhone 11+ з чипом U1. Акцесуар повинен підтримувати MFi UWB протокол.

import NearbyInteraction

class UWBKeyManager: NSObject, NISessionDelegate {
    private var session: NISession?

    func startRanging(accessoryToken: Data) {
        session = NISession()
        session?.delegate = self
        session?.delegateQueue = DispatchQueue.main

        guard let config = NINearbyAccessoryConfiguration(accessoryData: accessoryToken, bluetoothPeerIdentifier: peerBLEId) else {
            return
        }
        session?.run(config)
    }

    func session(_ session: NISession, didUpdate nearbyObjects: [NINearbyObject]) {
        guard let object = nearbyObjects.first else { return }

        if let distance = object.distance {
            // distance у метрах, точність ±10 см
            if distance < 1.5 {
                triggerUnlock()
            }
        }

        if let direction = object.direction {
            // SIMD3<Float> — вектор напрямку на об'єкт
            let isInFront = direction.z < 0 // об'єкт перед телефоном
        }
    }

    func session(_ session: NISession, didInvalidateWith error: Error) {
        // NIErrorCode.invalidConfiguration — неверний токен
        // NIErrorCode.userDidNotAllow — користувач відмовив у Nearby Interaction
        restartWithDelay()
    }
}

accessoryToken — криптографічно підписаний токен, який акцесуар передає по BLE при першому виявленні. Apple не розкриває формат токена публічно — він частина MFi UWB Accessory Protocol. Без ліцензії MFi на стороні виробника замку ця схема недоступна.

Entitlement для NearbyInteraction з акцесуарами: com.apple.developer.nearby-interaction.allow — стандартний, доступний без MFi. Але NINearbyAccessoryConfiguration вимагає токен від сертифікованого MFi UWB-акцесуара.

Android: UWB API (Android 12+)

Google відкрив UWB через androidx.core.uwb:uwb (Jetpack). Вимагає пристрій з UWB-чипом: Pixel 6 Pro+, Samsung Galaxy S21 Ultra+, деякі моделі OnePlus та Xiaomi.

implementation("androidx.core.uwb:uwb:1.0.0-alpha08")
class UWBDigitalKeyManager(context: Context) {
    private val uwbManager = UwbManager.createInstance(context)

    suspend fun startRanging(partnerAddress: UwbAddress) {
        val controllerSession = uwbManager.controllerSessionScope()

        val sessionParameters = UwbRangingParameters(
            uwbConfigType = UwbRangingParameters.CONFIG_MULTICAST_DS_TWR,
            complexChannel = controllerSession.uwbComplexChannel,
            peerDevices = listOf(UwbDevice.createForAddress(partnerAddress)),
            updateRateType = UwbRangingParameters.RANGING_UPDATE_RATE_FREQUENT,
            sessionKeyInfo = generateSessionKey()
        )

        controllerSession.prepareSession(sessionParameters)
            .collect { rangingResult ->
                when (rangingResult) {
                    is RangingResult.RangingResultPosition -> {
                        val distance = rangingResult.position.distance?.value ?: return@collect
                        if (distance < 1.5f) triggerUnlock()
                    }
                    is RangingResult.RangingResultPeerDisconnected -> {
                        restartSession()
                    }
                }
            }
    }
}

CONFIG_MULTICAST_DS_TWR — двусторонній ranging з підтримкою кількох пирів. Для одного замку достатньо CONFIG_UNICAST_DS_TWR.

Безпека: захист від relay attack

Головна уязвимість ключів на основі радіо — relay attack: зловмисник ретранслює BLE/UWB-сигнал, імітуючи близість телефону до замку, коли реальний телефон далеко. UWB робить relay-атаку фізично неможливою: швидкість світла обмежує, та додаткова затримка ретрансляції (>1 мкс) детектується TWR як аномалія.

Додатково: токени ключів мають бути ephemeral (короткоживучі, оновлюватися по BLE перед кожним ranging), підписані ECDSA-256 закритим ключем, збереженим у Secure Enclave (iOS) або Android Keystore.

Замкове обладнання

Без підтримки UWB на стороні замку все вищесказане не працює. Партнери з готовими UWB-модулями для інтеграції:

  • Allegion (Schlage) — UWB-замки для комерційної нерухомості
  • dormakaba — CCC Digital Key 3.0 сумісні замки
  • NXP SR150 eval kit — для розробки власного обладнання

Строки

Мобільний додаток з UWB-ranging та Hands-Free логікою (при наявності готового UWB-акцесуара): 2–4 тижні. Розробка з нуля включаючи прошивку замку та UWB-модуль на NXP SR150: 2–4 місяці. Стоимість залежить від цільової платформи та наявності партнерських договорів з виробниками обладнання.