Функция Request Sync инициирует запрос SYNC
на ваше выполнение для любого пользователя Google с устройствами, с которыми связан указанный agentUserId
(отправленный вами в исходном запросе SYNC). Это позволяет обновлять устройства пользователей без необходимости отсоединения и повторного подключения их аккаунтов. Все пользователи, привязанные к этому идентификатору, получат запрос SYNC
.
Вам необходимо инициировать запрос SYNC
:
- Если пользователь добавляет новое устройство.
- Если пользователь удаляет существующее устройство.
- Если пользователь переименовывает существующее устройство.
- Если вы реализуете новый тип устройства, характеристику или добавляете новую функцию устройства.
Начать
Чтобы реализовать Request Sync, выполните следующие действия:
Включить API Google HomeGraph
В Google Cloud Console перейдите на страницу API HomeGraph .
Перейти на страницу API HomeGraph- Выберите проект, соответствующий идентификатору вашего проекта smart home .
- Нажмите ВКЛЮЧИТЬ .
Создайте ключ учетной записи службы
Следуйте этим инструкциям, чтобы сгенерировать ключ учетной записи службы из Google Cloud Console :
В Google Cloud Console перейдите на страницу «Учетные записи служб» .
Перейдите на страницу «Учетные записи служб» .Возможно, вам потребуется выбрать проект, прежде чем вы попадете на страницу учетных записей служб.
Нажмите «
Создать учетную запись службы .В поле Имя учетной записи службы введите имя.
В поле Идентификатор учетной записи службы введите идентификатор.
В поле Описание учетной записи службы введите описание.
Нажмите «Создать» и продолжите .
В раскрывающемся списке Роль выберите Учетные записи служб > Учетная запись службы OpenID Connect Создатель токена удостоверения .
Нажмите «Продолжить» .
Нажмите Готово .
Выберите учетную запись службы, которую вы только что создали, из списка учетных записей службы и выберите Управление ключами в меню Действия
.Выберите Добавить ключ > Создать новый ключ .
Для параметра «Тип ключа» выберите вариант JSON .
Нажмите «Создать» . JSON-файл, содержащий ваш ключ, загрузится на ваш компьютер.
Вызов API
HTTP
API Home Graph предоставляет конечную точку HTTP
- Используйте загруженный JSON-файл учётной записи сервиса для создания JSON-веб-токена (JWT). Подробнее см. в разделе «Аутентификация с использованием учётной записи сервиса» .
- Получите токен доступа OAuth 2.0 с областью действия
https://www.googleapis.com/auth/homegraph
используя oauth2l : - Создайте JSON-запрос с
agentUserId
. Вот пример JSON-запроса для Request Sync: - Объедините JSON-код Request Sync и токен в HTTP-запросе POST к конечной точке Google Home Graph. Вот пример того, как выполнить запрос в командной строке с помощью
curl
в качестве теста:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "agentUserId": "user-123" }
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:requestSync"
gRPC
API Home Graph предоставляет конечную точку gRPC
- Получите определение службы буферов протокола для API Home Graph.
- Следуйте документации разработчика gRPC, чтобы создать клиентские заглушки для одного из поддерживаемых языков .
- Вызовите метод RequestSync .
Node.js
Клиент Node.js API Google предоставляет привязки для API Home Graph.
- Инициализируйте службу
google.homegraph
, используя учетные данные приложения по умолчанию . - Вызовите метод
requestSync
с RequestSyncDevicesRequest . Он возвращаетPromise
с пустым RequestSyncDevicesResponse .
const homegraphClient = homegraph({ version: 'v1', auth: new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/homegraph' }) }); const res = await homegraphClient.devices.requestSync({ requestBody: { agentUserId: 'PLACEHOLDER-USER-ID', async: false } });
Ява
Клиентская библиотека HomeGraph API для Java предоставляет привязки для Home Graph API.
- Инициализируйте
HomeGraphApiService
, используя учетные данные приложения по умолчанию . - Вызовите метод
requestSync
с помощьюRequestSyncDevicesRequest
. Он возвращает пустойReportStateAndNotificationResponse
.
// Get Application Default credentials. GoogleCredentials credentials = GoogleCredentials.getApplicationDefault() .createScoped(List.of("https://www.googleapis.com/auth/homegraph")); // Create Home Graph service client. HomeGraphService homegraphService = new HomeGraphService.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), new HttpCredentialsAdapter(credentials)) .setApplicationName("HomeGraphExample/1.0") .build(); // Request sync. RequestSyncDevicesRequest request = new RequestSyncDevicesRequest().setAgentUserId("PLACEHOLDER-USER-ID").setAsync(false); homegraphService.devices().requestSync(request);
Ответы об ошибках
При вызове Request Sync вы можете получить один из следующих ответов об ошибке. Эти ответы представлены в виде кодов состояния HTTP.
-
400 Bad Request
— серверу не удалось обработать запрос, отправленный клиентом, из-за недопустимого синтаксиса . К распространенным причинам относятся некорректный формат JSON или использованиеnull
вместо "" для строкового значения. -
403 Forbidden
— серверу не удалось обработать запрос для указанногоagentUserId
из-за ошибки при обновлении токена. Убедитесь, что ваша конечная точка OAuth корректно отвечает на запросы на обновление токена, и проверьте статус привязки учётной записи пользователя. -
404 Not Found
— Запрошенный ресурс не найден, но может быть доступен в будущем. Обычно это означает, что учётная запись пользователя не связана с Google или получен недопустимыйagentUserId
. Убедитесь, чтоagentUserId
соответствует значению, указанному в ответе SYNC , и что вы правильно обрабатываете намерения DISCONNECT . -
429 Too Many Requests
— Превышено максимальное количество одновременных запросов синхронизации для указанногоagentUserId
. Вызывающий объект может выполнить только один одновременный запрос синхронизации, если флагasync
не установлен в значение true.