Мобильное приложение для 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 или Soft AP) с Espressif SDK — от 2 недель. Кастомный протокол, мультивендорная поддержка, полный flow с регистрацией — 5-8 недель. 5+ лет опыта в IoT, 100+ проектов. Свяжитесь с нами для оценки вашего проекта — мы поможем выбрать оптимальный метод и спроектируем решение под ваши задачи. Получите консультацию по вашему кейсу бесплатно.