Запросить синхронизацию

Функция Request Sync инициирует запрос SYNC на ваше выполнение для любого пользователя Google с устройствами, с которыми связан указанный agentUserId (отправленный вами в исходном запросе SYNC). Это позволяет обновлять устройства пользователей без необходимости отсоединения и повторного подключения их аккаунтов. Все пользователи, привязанные к этому идентификатору, получат запрос SYNC .

Вам необходимо инициировать запрос SYNC :

  • Если пользователь добавляет новое устройство.
  • Если пользователь удаляет существующее устройство.
  • Если пользователь переименовывает существующее устройство.
  • Если вы реализуете новый тип устройства, характеристику или добавляете новую функцию устройства.

Начать

Чтобы реализовать Request Sync, выполните следующие действия:

Включить API Google HomeGraph

  1. В Google Cloud Console перейдите на страницу API HomeGraph .

    Перейти на страницу API HomeGraph
  2. Выберите проект, соответствующий идентификатору вашего проекта smart home .
  3. Нажмите ВКЛЮЧИТЬ .

Создайте ключ учетной записи службы

Следуйте этим инструкциям, чтобы сгенерировать ключ учетной записи службы из Google Cloud Console :

Примечание : Убедитесь, что вы используете правильный проект GCP при выполнении этих шагов. Это проект, соответствующий идентификатору вашего проекта smart home .
  1. В Google Cloud Console перейдите на страницу «Учетные записи служб» .

    Перейдите на страницу «Учетные записи служб» .

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

  2. Нажмите « Создать учетную запись службы .

  3. В поле Имя учетной записи службы введите имя.

  4. В поле Идентификатор учетной записи службы введите идентификатор.

  5. В поле Описание учетной записи службы введите описание.

  6. Нажмите «Создать» и продолжите .

  7. В раскрывающемся списке Роль выберите Учетные записи служб > Учетная запись службы OpenID Connect Создатель токена удостоверения .

  8. Нажмите «Продолжить» .

  9. Нажмите Готово .

  10. Выберите учетную запись службы, которую вы только что создали, из списка учетных записей службы и выберите Управление ключами в меню Действия .

  11. Выберите Добавить ключ > Создать новый ключ .

  12. Для параметра «Тип ключа» выберите вариант JSON .

  13. Нажмите «Создать» . JSON-файл, содержащий ваш ключ, загрузится на ваш компьютер.

Подробные инструкции и информацию о создании ключей учетных записей служб см. в разделе Создание и удаление ключей учетных записей служб на сайте справки Google Cloud Console.

Вызов API

HTTP

API Home Graph предоставляет конечную точку HTTP

  1. Используйте загруженный JSON-файл учётной записи сервиса для создания JSON-веб-токена (JWT). Подробнее см. в разделе «Аутентификация с использованием учётной записи сервиса» .
  2. Получите токен доступа OAuth 2.0 с областью действия https://www.googleapis.com/auth/homegraph используя oauth2l :
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Создайте JSON-запрос с agentUserId . Вот пример JSON-запроса для Request Sync:
  5. {
      "agentUserId": "user-123"
    }
  6. Объедините JSON-код Request Sync и токен в HTTP-запросе POST к конечной точке Google Home Graph. Вот пример того, как выполнить запрос в командной строке с помощью curl в качестве теста:
  7. 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

  1. Получите определение службы буферов протокола для API Home Graph.
  2. Следуйте документации разработчика gRPC, чтобы создать клиентские заглушки для одного из поддерживаемых языков .
  3. Вызовите метод RequestSync .

Node.js

Клиент Node.js API Google предоставляет привязки для API Home Graph.

  1. Инициализируйте службу google.homegraph , используя учетные данные приложения по умолчанию .
  2. Вызовите метод 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.

  1. Инициализируйте HomeGraphApiService , используя учетные данные приложения по умолчанию .
  2. Вызовите метод 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.