Інтеграція MQTT-протоколу для IoT-комунікації у мобільному додатку

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

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Інтеграція MQTT-протоколу для IoT-комунікації у мобільному додатку
Середній
~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

Інтеграція MQTT-протоколу для IoT-комунікації в мобільному додатку

MQTT — не просто «легкий» протокол для IoT. Це publish/subscribe поверх TCP з гарантіями доставки (QoS 0/1/2), персистентними сесіями та повідомленнями «останньої волі» (Last Will). Для мобільних додатків, які керують пристроями або моніторять сенсори в реальному часі, MQTT — правильний вибір. Але мобільна специфіка (фон, батарея, нестабільна мережа) вимагає ретельного налаштування.

QoS та його реальна вартість

QoS 0 — fire and forget. Повідомлення відправлено, підтвердження немає, дублікатів немає. Для відображення телеметрії (температура, GPS) — нормально, втрата одного пакета не критична.

QoS 1 — at least once. Broker підтверджує отримання PUBACK. Клієнт зберігає повідомлення до отримання PUBACK і повторює при необхідності. Можливі дублікати. Для команд пристрою (включити/вимкнути) — найчастіше достатньо.

QoS 2 — exactly once. Чотирифазне рукостискання: PUBLISH → PUBREC → PUBREL → PUBCOMP. Гарантує рівно одну доставку. Для фінансово значущих команд або критичних операцій. Вартість — подвійний трафік, подвійна затримка.

На мобілі QoS 2 у фоні — проблема. Чотирифазний обмін вимагає стабільного з'єднання протягом кількох RTT. При втраті мережі серед handshake сесія «застряє» до переподключення. На iOS з обмеженнями фону — майже гарантований збій. Рекомендуємо QoS 1 + idempotent команди на стороні пристрою.

Клієнтські бібліотеки та їх підводні каміння

Android: Eclipse Paho Android Service — de facto стандарт, але офіційно не підтримується з 2021 року. Альтернатива — HiveMQ MQTT Client (com.hivemq:hivemq-mqtt-client), активно підтримується, працює з Kotlin Coroutines через kotlinx.coroutines. Для MQTT 5 — лише HiveMQ.

iOS: CocoaMQTT (Swift) або MQTTNio (SwiftNIO-based). CocoaMQTT простіше в налаштуванні, MQTTNio краще масштабується для високочастотних потоків.

Flutter: mqtt_client — популярна бібліотека, підтримує MQTT 3.1.1. Підтримка MQTT 5 поки що немає. Для WebSocket-транспорту (MQTT поверх WSS, не TCP) — MqttServerClient vs MqttBrowserClient — використовуйте правильний.

React Native: немає нативного MQTT. Варіанти: react_native_mqtt (обгортка над нативними Paho для Android/iOS) або WebSocket-транспорт з mqtt.js (працює в RN без polyfills при WSS).

Управління з'єднанням на мобілі

Keep-alive interval (CONNECT пакет, поле keepAlive) — broker закриває з'єднання, якщо не отримає PINGREQ протягом keepAlive * 1.5 секунд. Типові значення для мобіля: 30–60 секунд. Менше — більше трафіку й розходу батареї. Більше — ризик не помітити розрив вчасно.

Last Will Message: при реєстрації з'єднання вкажіть willTopic та willMessage (наприклад {"status":"offline"}). Якщо з'єднання розірветься аварійно (без DISCONNECT), broker автоматично опублікує це повідомлення. UI інших клієнтів бачить статус пристрою як offline без додаткової логіки.

Persistent Session (cleanSession: false в MQTT 3.x, sessionExpiryInterval > 0 в MQTT 5): broker зберігає очередь QoS 1/2 повідомлень для клієнта, поки він офлайн. При переподключенні клієнт отримує накопичені повідомлення. Критично для IoT-команд, які повинні дійти до пристрою навіть при тимчасовому відключенні. Зберігайте clientId постійним — обов'язковою умовою для роботи персистентної сесії.

TLS та аутентифікація

Для production: MQTT over TLS (mqtts://, порт 8883). Взаємна TLS-аутентифікація (mTLS) — стандарт для IoT-пристроїв, але для мобільного клієнта зазвичай достатньо: username/password + серверний TLS-сертифікат.

На Android: зберігайте credentials в EncryptedSharedPreferences. На iOS: Keychain. Не hardkodьте URL broker'а та credentials у коді — використовуйте remote config або sealed secrets у CI.

Орієнтири за часом для інтеграції MQTT в існуючий мобільний додаток — 1–3 тижні залежно від складності topic-схеми та вимог до offline-режиму.