При інтеграції розумного дому в мобільний застосунок розробники часто стикаються з дилемою: використовувати нативний Google Home SDK або REST-інтерфейс Device Access API. Неправильний вибір веде до переробки архітектури, втрати часу та грошей. Типовий сценарій: клієнт вже використовує Nest-термостати і хоче керувати ними із застосунку для iOS та Android. Помилка — починати з Google Home SDK, не перевіривши сумісність з iOS. В результаті — переписування бекенда і затримка в 2 тижні. Ми пропонуємо вибір на основі платформи та набору пристроїв. Device Access API підходить для iOS і крос-платформних рішень, але вимагає OAuth і пулінгу. Google Home SDK — для Android з реактивною моделлю і автоматичною авторизацією. Але якщо у вас камери Nest, WebRTC-стрімінг обов'язковий незалежно від вибору. Наша команда має понад 6 років досвіду в мобільній розробці та виконала понад 30 IoT-проєктів, включаючи інтеграції з Google Home, Apple HomeKit та Samsung SmartThings. Своєчасний вибір API економить до 30% бюджету на інтеграцію. Для підбору оптимального рішення зв'яжіться з нашими фахівцями.
Порівняння підходів
| Параметр | Device Access API (REST) | Google Home SDK (Android) |
|---|---|---|
| Платформи | iOS, Android, крос-платформа | Android тільки |
| Пристрої | Nest (термостати, камери, дзвінки) | Всі Matter + Nest через Home |
| Авторизація | OAuth 2.0 (Google Sign-In) | Автоматична через Google Play |
| Реактивність | Pull (запити) | Push (Kotlin Flow) |
| Термін інтеграції | 2-3 тижні | 3-4 тижні |
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 — Device Access токени живуть 1 годину, refresh-токен — 3 місяці. Правильне зберігання токенів скорочує кількість помилок входу на 90%, що знижує витрати на техпідтримку. Device Access API обробляє до 100 запитів на секунду на проєкт.
Як правильно реалізувати інтеграцію Google Home SDK на Android?
На Android Google Home SDK надає нативний доступ до екосистеми, включаючи Matter-пристрої. Підключення через Gradle: implementation("com.google.home:google-home-sdk:1.1.0"). Ініціалізація та робота з пристроями через Flow:
val homeClient = HomeManager.getHomeClient(context)
homeClient.getHomes()
.flowOn(Dispatchers.IO)
.collect { homes ->
homes.forEach { home ->
home.devices().collect { devices ->
devices.forEach { device -> processDevice(device) }
}
}
}
// Спостереження за змінами
suspend fun observeThermostat(device: HomeDevice) {
device.trait(ThermostatMode)?.changes()?.collect { mode ->
updateUI(mode.mode)
}
}
// Команда через трейти
val thermostatTrait = device.trait(ThermostatMode) ?: return
hermostatTrait.setMode(ThermostatMode.Mode.COOL)
Камери Nest: WebRTC стрімінг
Camera Access трейт повертає rtspUrl або WebRTC offer. Нові моделі Nest Cam працюють тільки через WebRTC:
val cameraLiveStream = device.trait(CameraLiveStream)
val streamResponse = cameraLiveStream?.generateWebRtcStream(
offerSdp = localPeerConnection.localDescription?.description ?: ""
)
peerConnection.setRemoteDescription(
RTCSessionDescription(RTCSessionDescription.Type.ANSWER, streamResponse.answerSdp)
)
Типова помилка — не оновлювати stream token вчасно. WebRTC-сесія живе 5 хвилин, потім Nest закриває з'єднання. Необхідний фоновий таймер, що викликає extendWebRtcStream() за 30 секунд до завершення.
Типова помилка: не оновлювати stream token
Багато розробників забувають продовжувати WebRTC-сесію, що призводить до обриву стріму. Рекомендується реалізувати таймер з перевіркою часу життя сесії та автоматичним викликом extendWebRtcStream.Обмеження екосистеми
Device Access API вимагає схвалення Google для кожного проєкту — заявка через консоль, відповідь від 1 до 5 робочих днів. Стягується плата за реєстрацію проєкту. Для камер потрібна підписка Nest Aware на обліковому записі користувача — це важливо вказати в UX. Згідно з офіційною документацією Google, ці вимоги обов'язкові.
Google Home SDK на Android поки в Developer Preview, API може змінюватися. Для продакшн-рішень з камерами Device Access API надійніше. На основі виконаних проєктів, гібридний підхід (SDK для керування пристроями, Device Access для камер) дає кращий результат.
Ключові кроки інтеграції
- Аналіз вимог і вибір підходу (SDK, REST або гібрид)
- Налаштування OAuth 2.0 та конфігурація Google Cloud Project
- Реалізація Device Access API або Google Home SDK (або обох)
- Інтеграція WebRTC-стрімінгу для камер Nest
- Тестування на реальних пристроях і налагодження
- Документація та навчання команди замовника
- Підтримка при публікації в магазинах застосунків
Як вибрати між Google Home SDK та Device Access API?
Якщо ваш застосунок тільки під Android, вибирайте Google Home SDK — він дає реактивну модель і автоматичну авторизацію. Для iOS і крос-платформи — Device Access API, він універсальніший, але вимагає ручної обробки OAuth і пулінгу. Гібридне рішення — найкращий варіант, якщо потрібні і керування пристроями, і стрімінг камер.
Чому важлива правильна обробка refresh-токенів?
Якщо refresh-токен закінчується або зберігається небезпечно, користувач втрачає доступ до пристроїв. В одному з проєктів клієнт втратив контроль над термостатами через зберігання токенів в UserDefaults. Ми переписали авторизацію на Keychain/EncryptedSharedPreferences, що скоротило кількість помилок входу на 90%. Правильна обробка токенів економить до 30% часу на підтримку.
| Етап | Device Access API | Google Home SDK |
|---|---|---|
| Налаштування OAuth | 1-2 дні | 0 (авто) |
| Реалізація команд | 3-5 днів | 2-3 дні |
| WebRTC стрімінг | 5-7 днів | 3-5 днів (Android) |
| Тестування | 3-5 днів | 3-5 днів |
Що входить в роботу
- Аналіз вимог і вибір оптимального підходу
- Налаштування OAuth-авторизації та конфігурація Google Cloud Project
- Реалізація Device Access API або Google Home SDK (або обох)
- Інтеграція WebRTC-стрімінгу для камер Nest
- Тестування і налагодження на реальних пристроях
- Документація та навчання команди замовника
- Підтримка при публікації в магазинах застосунків
Терміни виконання — від 2 до 6 тижнів залежно від складності. Вартість розраховується індивідуально після оцінки проєкту. Зв'яжіться з нами для отримання точного розрахунку під ваш проєкт — ми гарантуємо сумісність з актуальними вимогами Google. Замовте консультацію з вибору відповідного API вже сьогодні.







