Мобільний додаток для IoT provisioning (налаштування пристроїв)

Клієнт приходить з ESP32 і хоче, щоб користувачі налаштовували його через мобільний додаток. Через два тижні з'ясовуємо, що BLE-provisioning не працює на iOS через невідповідність App Store Review Guidelines — Section 4.2 вимагає, щоб додаток працював без зовнішнього пристрою. Таке трапляється в кож

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Мобільний додаток для IoT provisioning (налаштування пристроїв)
Середній
від 1 тижня до 3 місяців

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

Часті запитання

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    897
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1218
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    600

Клієнт приходить з ESP32 і хоче, щоб користувачі налаштовували його через мобільний додаток. Через два тижні з'ясовуємо, що BLE-provisioning не працює на iOS через невідповідність App Store Review Guidelines — Section 4.2 вимагає, щоб додаток працював без зовнішнього пристрою. Таке трапляється в кожному третьому проекті. Ми розробляємо мобільні додатки для IoT provisioning під ключ: від вибору протоколу до публікації в сторах. За 5+ років ми накопичили досвід вирішення таких задач: понад 100 проектів, включаючи складні кейси з мультивендорною підтримкою. Важливо не просто передати Wi-Fi пароль, а зробити це надійно та зручно для користувача — інакше конверсія просяде, а в сторах відхилять.

Що таке IoT Provisioning технічно

Пристрій «з коробки» не знає Wi-Fi пароль і не прив'язаний до облікового запису. Потрібно передати:

  • Мережеві credentials (SSID + password)
  • Ідентифікатор власника (user_id або token з платформи)
  • Початкову конфігурацію (часовий пояс, ім'я пристрою, endpoint сервера)

Технічно це робиться через BLE, Wi-Fi Soft AP, комбо BLE+SoftAP або QR-код. Вибір методу залежить від заліза. Наприклад, Bluetooth Low Energy — стандарт для більшості IoT-модулів, але вимагає правильної реалізації GATT-сервера.

Метод Швидкість Складність реалізації Підтримка iOS/Android Вимоги до заліза
BLE Середня (1-3 сек) Середня Нативна BLE-чіп (nRF52, ESP32)
SoftAP Повільна (5-10 сек) Висока Android складно Wi-Fi модуль
QR Швидка (<1 сек) Низька Повна Дисплей або друк
BLE+SoftAP Середня Висока Середня ESP32

Як вибрати метод передачі credentials: BLE, Soft AP чи QR?

Якщо пристрій на ESP32 — можна будь-який. nRF52 — тільки BLE. RTL8710 — тільки Wi-Fi. Для B2C-пристроїв краще BLE або QR: користувач не перемикає мережі. SoftAP виправданий для промислового обладнання, де важлива надійність з'єднання.

З практики: в проекті з датчиками температури (nRF52) наш клієнт вибрав BLE — provisioning займає 15 секунд, конверсія 92%. Конкуренти використовували SoftAP — 30% користувачів кидали через зміну мережі на Android. Економія часу на підтримку склала близько 40%.

ESP-IDF Provisioning: практичний кейс

Espressif надає готовий esp_prov компонент на стороні прошивки та офіційні SDK. Ми використовували їх в проекті для ESP32-S3. Флоу через BLE з Android SDK:

ESPProvisionManager.getInstance(context).searchBleEspDevices("PROV_") { devices, error -> // devices — знайдені пристрої з префіксом PROV_ val device = devices?.firstOrNull() ?: return@searchBleEspDevices device.connectBLEDevice(bleScanResult) { session -> device.provision(ssid, passphrase) { status -> when (status) { ProvisioningStatus.SUCCESS -> onProvisioned() ProvisioningStatus.FAILURE -> onFailed(status.error) ProvisioningStatus.CONFIG_SENT -> updateProgress(50) } } } } 

Під капотом SDK встановлює зашифровану сесію через Session Security (протокол sec1 — Curve25519 + AES-CTR), передає Wi-Fi credentials через protocomm layer. Протокол Protobuf — бінарний, компактний. На iOS використовуємо ESPProvision через Swift Package Manager.

Типова проблема: searchBleEspDevices не знаходить пристрій — воно вже пройшло provisioning і не рекламує сервіси. Рішення — кнопка «скидання до заводських» в інструкції.

Як налаштувати Wi-Fi Provisioning через Soft AP на Android?

Пристрій піднімає точку PROV_XXXXXX. Телефон має підключитися — це нетривіально, система може вирішити, що мережа «без інтернету», і переключитися назад на стільникові дані. На Android 10+ використовуємо WifiNetworkSpecifier:

val specifier = WifiNetworkSpecifier.Builder() .setSsid("PROV_${deviceSuffix}") .setWpa2Passphrase(apPassword) .build() val request = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .setNetworkSpecifier(specifier) .build() connectivityManager.requestNetwork(request, object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { // Всі HTTP-запити до пристрою через цей network val client = OkHttpClient.Builder() .socketFactory(network.socketFactory) .build() sendProvisioningData(client) } }) 

Без network.socketFactory запити підуть через стільникову мережу — з'єднання не встановиться. На iOS SoftAP не підтримується, тому для крос-платформених проектів вибираємо BLE.

Чому користувачі не можуть підключитися: часті помилки та рішення

  • 2.4 vs 5 ГГц: пристрій підтримує тільки 2.4 ГГц, користувач вводить пароль від 5 ГГц мережі. Детектуємо через WifiManager.scanResults — перевіряємо частоту SSID. На Android 30+ потрібен ACCESS_FINE_LOCATION або NEARBY_WIFI_DEVICES.
  • BLE не знаходить пристрій: пристрій вже налаштовано або не в режимі provisioning. Додаємо в інтерфейс перевірку стану та кнопку скидання.
  • Таймаут підключення: на кожну стадію (пошук, відправка credentials, підключення до Wi-Fi) ставимо таймаут 30 секунд. При помилці — чітке повідомлення та варіанти дій.
Помилка Причина Рішення
Пристрій не знайдено по BLE Пристрій вже provisioned або не в режимі Кнопка скидання в інструкції, перевірка state
Підключення до Wi-Fi падає 2.4/5 ГГц невідповідність Детектувати частоту, підказувати користувачеві
Provisioning зависає Таймаут на етапі відправки Встановити таймаути 30 сек, показувати прогрес

Процес розробки: від аналітики до релізу

  1. Аналітика: вибір методу, заліза, протоколу. Перевірка вимог App Store (Section 4.2) та Google Play.
  2. Проектування: архітектура, дизайн UX (3-4 кроки), прототипи.
  3. Реалізація: інтеграція SDK, кастомний flow, обробка помилок.
  4. Тестування: реальні пристрої, сценарії з різними мережами, час роботи.
  5. Деплой: публікація в сторах, налаштування code signing, push-сповіщення.
Додатково: дозволи для BLE
  • Android 12+: BLUETOOTH_SCAN, BLUETOOTH_CONNECT, BLUETOOTH_ADVERTISE.
  • Android 6-11: ACCESS_FINE_LOCATION (тільки для сканування).
  • iOS: NSBluetoothAlwaysUsageDescription, NSLocalNetworkUsageDescription.

Помилки з permissions — одна з головних причин відхилення додатків у стори.

Що входить в роботу

  • Вихідний код додатку (iOS/Android) з інтеграцією provisioning.
  • Документація з налаштування та експлуатації.
  • Допомога в публікації в App Store та Google Play.
  • Навчання команди замовника (2 години онлайн).
  • Підтримка протягом 1 місяця після релізу.

Строки та як ми працюємо

Provisioning через один канал (BLE або SoftAP) з Espressif SDK — від 2 тижнів. Кастомний протокол, мультивендорна підтримка, повний flow з реєстрацією — 5-8 тижнів. 5+ років досвіду в IoT, 100+ проектів. Зв'яжіться з нами для оцінки вашого проекту — ми допоможемо вибрати оптимальний метод і спроектуємо рішення під ваші завдання. Отримайте консультацію по вашому кейсу безкоштовно.