Solicitar sincronización

La sincronización de solicitudes activa una solicitud SYNC a tu entrega para cualquier usuario de Google. con dispositivos que tienen el estado agentUserId asociados (que enviados en la solicitud de SYNC original). Esto te permite actualizar las contraseñas dispositivos sin desvincular y volver a vincular su cuenta. Todos los usuarios vinculados a esta de destino recibirá una solicitud SYNC.

Debes activar una solicitud SYNC:

  • Si el usuario agrega un dispositivo nuevo
  • Si el usuario quita un dispositivo existente.
  • Si el usuario cambia el nombre de un dispositivo existente.
  • Si implementas un nuevo tipo de dispositivo o característica, o agregas una nueva función de dispositivo.

Comenzar

Para implementar Solicitar sincronización, sigue estos pasos:

Cómo habilitar la API de Google HomeGraph

  1. En Google Cloud Console, ve a la página API de HomeGraph.

    Ir a la página de la API de HomeGraph
  2. Selecciona el proyecto que coincida con tu ID del proyecto de smart home.
  3. Haz clic en HABILITAR.

Crea una clave de cuenta de servicio

Sigue estas instrucciones para generar una clave de cuenta de servicio desde Google Cloud Console:

Nota: Asegúrate de usar el proyecto de GCP correcto cuando realices estos pasos. Este es el proyecto que coincide con el ID de tu proyecto smart home.
  1. En Google Cloud Console, ve a la página Crear clave de cuenta de servicio.

    Ir a la página Crear clave de la cuenta de servicio
  2. Desde la lista Cuenta de servicio, selecciona Cuenta de servicio nueva.
  3. Escribe un nombre en el campo Nombre de cuenta de servicio.
  4. En el campo ID de la cuenta de servicio, ingresa un ID.
  5. Desde la lista de Rol, selecciona Cuentas de servicio > Creador de tokens de cuenta de servicio.

  6. En Tipo de clave, selecciona la opción JSON.

  7. Haz clic en Crear. Un archivo JSON que contiene tu clave descargas en tu computadora.

Llama a la API

HTTP

La API de Home Graph proporciona un extremo HTTP

  1. Usa el archivo JSON de la cuenta de servicio que descargaste para crear un archivo web JSON Token (JWT). Para obtener más información, consulta Autentica con una cuenta de servicio.
  2. Obtén un token de acceso de OAuth 2.0 con el https://www.googleapis.com/auth/homegraph permiso con oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Crea la solicitud JSON con el agentUserId. Este es un ejemplo de solicitud JSON para solicitar la sincronización:
  5. {
      "agentUserId": "user-123"
    }
    
  6. Combina el JSON de solicitud de sincronización y el token en tu HTTP POST. al extremo de Google Home Graph. Aquí hay un ejemplo de cómo para realizar la solicitud en la línea de comandos con curl, como una prueba:
  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

La API de Home Graph proporciona un extremo de gRPC

  1. Obtén la definición del servicio de búferes de protocolo para la API de Home Graph.
  2. Sigue la documentación para desarrolladores de gRPC con el objetivo de generar stubs de cliente para uno de los lenguajes compatibles.
  3. Llama al método RequestSync.

Node.js

El cliente de Node.js de las APIs de Google proporciona vinculaciones para la API de Home Graph.

  1. Inicializa el servicio google.homegraph con las credenciales predeterminadas de la aplicación.
  2. Llama al método requestSync con RequestSyncDevicesRequest. Se muestra un Promise con una RequestSyncDevicesResponse vacía.
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
  }
});
    

Java

La biblioteca cliente de la API de HomeGraph para Java proporciona vinculaciones para la API de Home Graph.

  1. Inicializa HomeGraphApiService con las credenciales predeterminadas de la aplicación.
  2. Llama al método requestSync con RequestSyncDevicesRequest. Se mostrará un ReportStateAndNotificationResponse vacío.
// 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);
    

Respuestas de error

Cuando llames a Solicitar sincronización, es posible que recibas una de las siguientes respuestas de error. Estas respuestas se presentan en forma de códigos de estado HTTP.

  • 400 Bad Request: El servidor no se pudo procesar. La solicitud que envió el cliente debido a una sintaxis no válida Causas comunes incluye un JSON con formato incorrecto o usa null en lugar de “” para un valor de cadena.
  • 403 Forbidden: el servidor no pudo procesar el la solicitud del agentUserId especificado debido a un error actualizando el token. Asegúrate de que tu extremo de OAuth responda correctamente para actualizar las solicitudes de tokens y verificar la vinculación de cuentas del usuario estado.
  • 404 Not Found: El recurso solicitado no se pudo pero que podrían estar disponibles en el futuro. Por lo general, esto significa que la cuenta de usuario no está vinculada con Google o recibimos un error agentUserId Asegúrate de que agentUserId coincida con el valor proporcionado en tu respuesta de SYNC y que procesa los intents DISCONNECT.
  • 429 Too Many Requests: Cantidad máxima de sincronización simultánea se superó la cantidad de solicitudes correspondientes a la agentUserId especificada. Un emisor solo puede emitir una solicitud de sincronización simultánea, a menos que async está configurada en true.