Интеграция Google Home-устройств в мобильное IoT-приложение

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Интеграция Google Home-устройств в мобильное IoT-приложение
Сложная
~5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Интеграция Google Home-устройств в мобильное IoT-приложение

Google Home SDK стал публично доступен в 2023 году после нескольких лет закрытой беты. До этого единственный путь — Google Home API через REST, что давало ограниченный контроль и требовало OAuth-авторизации каждого пользователя через аккаунт Google. Сейчас есть два пути: Google Home SDK для Android (нативная интеграция) и Device Access API (REST/gRPC, работает с Android и iOS).

Device Access API: REST-интеграция для iOS и Flutter

Device Access работает с устройствами Nest (термостаты, камеры, дверные звонки). Авторизация через OAuth 2.0, после чего приложение получает доступ к Structures, Rooms и Devices:

GET https://smartdevicemanagement.googleapis.com/v1/enterprises/{projectId}/devices
Authorization: Bearer {access_token}

Ответ содержит список устройств с трейтами. Термостат Nest Learning 3rd gen возвращает:

{
  "name": "enterprises/project-id/devices/device-id",
  "type": "sdm.devices.types.THERMOSTAT",
  "traits": {
    "sdm.devices.traits.ThermostatMode": {
      "mode": "HEAT",
      "availableModes": ["HEAT", "COOL", "HEATCOOL", "OFF"]
    },
    "sdm.devices.traits.ThermostatTemperatureSetpoint": {
      "heatCelsius": 21.5
    },
    "sdm.devices.traits.Temperature": {
      "ambientTemperatureCelsius": 19.8
    }
  }
}

Управление — через ExecuteCommand:

// iOS, Alamofire
func setThermostatMode(_ mode: String, deviceName: String) async throws {
    let url = "https://smartdevicemanagement.googleapis.com/v1/\(deviceName):executeCommand"
    let body: [String: Any] = [
        "command": "sdm.devices.commands.ThermostatMode.SetMode",
        "params": ["mode": mode]
    ]
    _ = try await AF.request(url, method: .post, parameters: body,
                              encoding: JSONEncoding.default,
                              headers: authHeaders)
        .serializingDecodable(CommandResponse.self)
        .value
}

Авторизация через Google Sign-In SDK с scope https://www.googleapis.com/auth/sdm.service. Refresh token нужно хранить в Keychain — DeviceAccess токены живут 1 час.

Android: Google Home SDK

На Android Google Home SDK предоставляет нативный доступ к экосистеме, включая Matter-устройства:

// build.gradle.kts
implementation("com.google.home:google-home-sdk:1.1.0")

Инициализация:

val homeClient = HomeManager.getHomeClient(context)

homeClient.getHomes()
    .flowOn(Dispatchers.IO)
    .collect { homes ->
        homes.forEach { home ->
            home.devices().collect { devices ->
                devices.forEach { device ->
                    processDevice(device)
                }
            }
        }
    }

Интересная особенность SDK — реактивная модель на основе Kotlin Flow. Состояние устройства — это Flow, который автоматически эмитит новые значения при изменении:

suspend fun observeThermostat(device: HomeDevice) {
    device.trait(ThermostatMode)
        ?.changes()
        ?.collect { mode ->
            updateUI(mode.mode)
        }
}

Команды выполняются через те же объекты трейтов:

val thermostatTrait = device.trait(ThermostatMode) ?: return
thermostatTrait.setMode(ThermostatMode.Mode.COOL)

Камеры Nest: WebRTC стриминг

Camera Access трейт возвращает rtspUrl или WebRTC offer, в зависимости от модели камеры. Новые Nest Cam (2021+) работают только через WebRTC:

val cameraLiveStream = device.trait(CameraLiveStream)
val streamResponse = cameraLiveStream?.generateWebRtcStream(
    offerSdp = localPeerConnection.localDescription?.description ?: ""
)
// streamResponse.answerSdp передаём в RTCPeerConnection
peerConnection.setRemoteDescription(
    RTCSessionDescription(RTCSessionDescription.Type.ANSWER, streamResponse.answerSdp)
)

Ошибка, которую делают почти все: не обновляют stream token. WebRTC-сессия живёт 5 минут, потом Nest закрывает соединение. Нужен фоновый таймер, который за 30 секунд до истечения вызывает extendWebRtcStream().

Ограничения экосистемы

Device Access API требует одобрения Google для каждого проекта — подаётся заявка через консоль, ответ через 1-5 рабочих дней. Есть плата: $5 за регистрацию проекта. Камеры не работают в Device Access без подписки Nest Aware на аккаунте пользователя — это нужно явно указывать в UX.

Google Home SDK на Android в 2024 году всё ещё в Developer Preview, API может измениться. Для продакшн-решений с камерами Device Access API надёжнее.

Сроки интеграции: REST Device Access API для iOS — 2-3 недели; Android Google Home SDK с Matter — 3-4 недели; Flutter с обеими платформами — 5-6 недель. Стоимость рассчитывается индивидуально после анализа требований.