Интеграция Matter-протокола для IoT-устройств в мобильное приложение
Matter 1.x — это не замена Bluetooth или Wi-Fi, а унифицированный протокол прикладного уровня поверх IP. Устройство может быть подключено по Thread, Wi-Fi или Ethernet — Matter работает одинаково. Смысл для разработчика мобильного приложения прост: один SDK, и устройства от разных производителей управляются через единый API. Но путь от «один SDK» до рабочего продакшн-кода длиннее, чем кажется на старте. Мы помогаем пройти этот путь — от прототипа до готовой интеграции, используя многолетний опыт в IoT и мобильной разработке.
Зоопарк экосистем и единый стандарт
До Matter каждый производитель делал собственный протокол. IKEA TRÅDFRI говорил CoAP/DTLS, Philips Hue — Zigbee + REST, Tuya — облачный MQTT с проприетарным шифрованием. Интеграция каждого требовала отдельного адаптера. Matter решает это на уровне стандарта: Device Type Dictionary определяет кластеры (Clusters) — атомарные единицы функциональности. Лампочка — OnOff Cluster + Level Control Cluster + Color Control Cluster. Термостат — Thermostat Cluster. Замок — Door Lock Cluster. Именно кластеризация позволяет нам строить гибкие сценарии управления, не зависящие от вендора.
Мобильное приложение читает и пишет атрибуты кластеров, подписывается на события — и не знает ничего о железе за ними. Это и есть главное преимущество Matter: унификация на уровне API, а не физического соединения.
Как работает комиссионирование устройств в Matter?
Комиссионирование — процесс добавления нового устройства в сеть Matter. Оно включает поиск по BLE, обмен сертификатами (DAC — Device Attestation Certificate) и установку защищённого канала. Рассмотрим реализацию на двух основных платформах.
iOS: Matter через HomeKit API
Apple реализует Matter через расширение HomeKit. Комиссионирование нового устройства выглядит так:
import HomeKit import MatterSupport // Запуск комиссионирования через MatterAddDeviceRequest let topology = MatterAddDeviceRequest.Topology( ecosystemName: "MyApp", homes: [MatterAddDeviceRequest.Topology.Home(displayName: "Мой дом")] ) let request = MatterAddDeviceRequest(topology: topology) do { try await request.perform() } catch { // MatterAddDeviceError.userCancelled, .alreadyOnNetwork и т.д. } После комиссионирования устройство доступно через HMHomeManager. Управление конкретным кластером — через HMCharacteristic. Но HomeKit абстрагирует Matter Clusters до своей модели характеристик, что создаёт ограничения: нестандартные кластеры (Vendor-specific) через HomeKit недоступны. Для полного доступа к Matter API на iOS нужен entitlement com.apple.developer.matter.allow-setup-payload — запрашивается через Developer Portal.
Android: Matter через Google Home SDK
Google распространяет Matter поддержку через Play Services и Home SDK:
// build.gradle.kts implementation("com.google.android.gms:play-services-home:16.0.0") Комиссионирование:
val commissioningClient = HomeManager.getCommissioningClient(context) val request = CommissioningRequest.builder() .setCommissioningService(ComponentName(context, MyCommissioningService::class.java)) .build() commissioningClient.commissionDevice(request) .addOnSuccessListener { result -> val deviceId = result.commissionedDeviceId } .addOnFailureListener { exception -> // CommissioningException с кодом ошибки } MyCommissioningService расширяет CommissioningService и получает колбэк onCommissioningRequested() — здесь добавляем устройство в собственный бэкенд.
Прямое управление через Matter SDK
Для случаев, когда нужен прямой доступ к кластерам без экосистемной надстройки, используется Matter Open Source SDK через JNI или Kotlin-обёртки:
// Чтение атрибута из OnOff Cluster val devicePtr = ChipDeviceController.openPairingWindowWithPin(deviceId, 300, 0, pinCode) chipClient.getDeviceController().readAttributePath( object : ReportCallback { override fun onReport(nodeState: NodeState) { val onOffState = nodeState .getEndpoint(1) ?.getCluster(OnOffCluster.CLUSTER_ID) ?.getAttribute(OnOffCluster.ATTRIBUTE_ID_ON_OFF) } }, devicePtr, listOf(AttributePath(endpointId = 1, clusterId = OnOffCluster.CLUSTER_ID, attributeId = OnOffCluster.ATTRIBUTE_ID_ON_OFF)) ) Прямой SDK сложнее, требует понимания Interaction Model (Read/Write/Subscribe/Invoke), но даёт доступ к vendor-specific кластерам и работает без зависимости от Google Play Services. Мы рекомендуем этот подход для приложений, ориентированных на нестандартное оборудование.
Сравнение iOS и Android подходов
| Критерий | iOS (HomeKit) | Android (Home SDK) | Прямой SDK (обе платформы) |
|---|---|---|---|
| Простота интеграции | Высокая | Средняя | Низкая |
| Доступ к vendor-кластерам | Нет | Нет | Да |
| Зависимость от экосистемы | Apple | Google Play | Отсутствует |
| Поддержка Multi-admin | Да (через Home) | Да (через Home) | Требуется реализация |
| Рекомендуемый сценарий | Бытовые устройства | Бытовые устройства | Промышленные/custom IoT |
Fabric и Multi-admin
Важная архитектурная деталь Matter: устройство может одновременно принадлежать нескольким Fabric. Fabric — это криптографический домен с парой ключей. Приложение Google Home, Apple Home и ваше приложение могут управлять одним устройством независимо. Это называется Multi-admin.
Для реализации нужно передать Open Commissioning Window (OCW) устройству, чтобы второй контроллер мог провести comissioning в свой Fabric:
// iOS: открыть окно комиссионирования для дополнительного контроллера let accessory = homeManager.primaryHome?.accessories.first { $0.name == "Smart Lock" } // Через HMAccessoryControl или прямой Matter API Это критично для продуктов, которые хотят работать в экосистемах одновременно. Без Multi-admin пользователь вынужден выбирать — управлять из одного приложения или сбрасывать устройство.
Почему стоит использовать Multi-admin?
Multi-admin даёт конечному пользователю свободу: он может одновременно использовать голосового ассистента, приложение производителя и ваше приложение. Для разработчика это снижает риск блокировки в одной экосистеме. Реализация Multi-admin требует поддержки OCW и корректной обработки конфликтов Fabric — на практике мы используем проверку статуса устройства перед каждым комиссионированием.
Типичные ошибки при интеграции
На практике чаще всего теряется время на следующем:
- Версионирование Matter SDK — Matter 1.0 и 1.3 несовместимы на уровне некоторых кластеров. Фиксируйте версию SDK в зависимостях и тестируйте на конкретных прошивках устройств.
- BLE Commissioning на Android — если телефон не имеет BLE-соединения с устройством в момент комиссионирования, Google Play Services запрашивает разрешения заново и сбрасывает процесс.
- Fabric conflicts — если устройство уже в другом Fabric, повторное комиссионирование требует фабричного сброса. Добавьте проверку в UX.
Что входит в работу
При заказе интеграции Matter в мобильное приложение мы предоставляем:
- Архитектурную документацию по интеграции (выбор SDK, схема кластеров, сценарии управления)
- Реализацию комиссионирования (iOS/Android/Flutter)
- Настройку Push-уведомлений (APNs/FCM) для событий устройств
- Интеграцию с вашим бэкендом (синхронизация состояний, мультиадминистрирование)
- Тестирование на реальных Matter-устройствах (подбор тестового парка)
- Поддержку при публикации в App Store / Google Play (проверка соответствия гайдлайнам)
Сроки и стоимость
Сроки интеграции Matter в существующее приложение при наличии тестовых устройств: iOS — 3-4 недели, Android — 3-5 недель, Flutter с нативными каналами — 5-7 недель. Разработка с нуля, включая архитектуру управления устройствами и синхронизацию состояния — от 2 месяцев. Стоимость рассчитывается индивидуально после анализа требований и парка устройств. Свяжитесь с нами для оценки вашего проекта.
Мы работаем с Matter с 2022 года, выполнили более 15 IoT-интеграций для различных отраслей. Наш опыт включает сертификацию устройств CSA и оптимизацию взаимодействия с экосистемами Apple и Google. Закажите консультацию, чтобы обсудить детали.







