Autoriza una cuenta

Una vez que creaste tus proyectos de Google Cloud y de Device Access, puedes autorizar una cuenta de Google con un dispositivo Google Nest compatible para la API de SDM.

Para ver las estructuras y los dispositivos, debes vincular una Cuenta de Google a tu proyecto deDevice Access con el PCM. PCM permite que user otorgue permiso para que developerpueda acceder a sus estructuras y datos de dispositivos.

En esta guía, te desempeñarás como user y developer.

  1. Abre el siguiente vínculo en un navegador web y reemplaza los siguientes elementos:

    1. project-id con tu Device Access Project ID
    2. oauth2-client-id con el ID de cliente de OAuth2 de tus credenciales de Google Cloud
    https://nestservices.google.com/partnerconnections/project-id/auth?redirect_uri=https://www.google.com&access_type=offline&prompt=consent&client_id=oauth2-client-id&response_type=code&scope=https://www.googleapis.com/auth/sdm.service
    
  2. Si accediste a Google con varias cuentas recientemente, es posible que se muestre una pantalla inicial de Elige una cuenta con una lista de tus Cuentas de Google. Si es así, selecciona la Cuenta de Google vinculada a los dispositivos que deseas autorizar para Device Access.
  3. La pantalla Permisos de Google Nest es el PCM en sí. Aquí puedes otorgar permisos de estructura y dispositivos. Activa los permisos para tu casa (paso 1) y los dispositivos de esa casa que sean compatibles con la API de SDM (paso 2) y, luego, haz clic en Siguiente.
  4. En la pantalla Elige una cuenta para continuar con Nombre del proyecto, donde Nombre del proyecto es el nombre de tu proyecto de Google Cloud, selecciona la Cuenta de Google que deseas autorizar para la API de SDM. Usa la misma Cuenta de Google que antes.
  5. Después de elegir una cuenta, es posible que aparezca una pantalla de advertencia que indique que Google no verificó esta app. Si es así, para continuar, haz clic en la opción Opciones avanzadas y, luego, en Ir a Nombre del proyecto (no seguro). Consulta Google no verificó esta app para obtener más información.
  6. En la pantalla Grant Project Name permission, haz clic en Allow para otorgar permiso al proyecto para acceder a tu Cuenta de Google.
  7. En la pantalla Confirma tus elecciones, asegúrate de que los permisos que deseas otorgar estén marcados y haz clic en Permitir para confirmar.
  8. Se te redireccionará a https://www.google.com. El código de autorización se devuelve como el parámetro code en la URL, que debe tener este formato:

    https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service
    
  9. Copia el código de autorización.

Obtén un token de acceso

Usa el código de autorización para recuperar un token de acceso que puedes usar para llamar a la API de SDM.

  1. Abre una terminal y ejecuta el siguiente comando curl, reemplazando los siguientes elementos:

    1. oauth2-client-id y oauth2-client-secret con el ID de cliente y el secreto del cliente de OAuth2 de tus credenciales de Google Cloud
    2. authorization-code por el código que recibiste en el paso anterior
    curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&code=authorization-code&grant_type=authorization_code&redirect_uri=https://www.google.com'
  2. Google OAuth devuelve dos tokens: un token de acceso y un token de actualización.

    {
      "access_token": "access-token",
      "expires_in": 3599,
      "refresh_token": "refresh-token",
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }
    Copia ambos valores. El token de acceso se usa para llamar a la API de SDM, y el token de actualización se usa para obtener un nuevo token de acceso.

Realiza una llamada a la lista de dispositivos

La autorización no se completa hasta que realices tu primera llamada a devices.list con tu nuevo token de acceso. Esta llamada inicial finaliza el proceso de autorización y habilita los eventos si ya configuraste una suscripción a Pub/Sub.

Usa curl para realizar esta llamada al extremo devices:

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

Una llamada exitosa devuelve una lista de los dispositivos vinculados a tu proyecto de Device Access. Cada dispositivo tiene su propia lista única de rasgos disponibles:

{
  "devices": [
    {
      "name": "enterprises/project-id/devices/device-id",
      "type": "sdm.devices.types.device-type",
      "traits": { ... },
      "parentRelations": [
        {
          "parent": "enterprises/project-id/structures/structure-id/rooms/room-id",
          "displayName": "device-room-name"
        }
      ]
    }
  ]
}

Cómo usar un token de actualización

Los tokens de acceso para la API de SDM solo son válidos durante 1 hora, como se indica en el parámetro expires_in que devuelve Google OAuth. Si tu token de acceso vence, usa el token de actualización para obtener uno nuevo.

El comando es similar al del token de acceso, excepto que usas un grant_type diferente.

  1. Abre una terminal y ejecuta el siguiente comando curl, reemplazando los siguientes elementos:

    1. oauth2-client-id y oauth2-client-secret con el ID de cliente y el secreto del cliente de OAuth2 de tus credenciales de Google Cloud
    2. refresh-token con el código que recibiste cuando obtuviste el token de acceso por primera vez.
    curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&refresh_token=refresh-token&grant_type=refresh_token'
  2. Google OAuth devuelve un nuevo token de acceso.

    {
      "access_token": "new-access-token",
      "expires_in": 3599,
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }

Solución de problemas

Para obtener más información sobre Google OAuth, consulta Usa OAuth 2.0 para acceder a las APIs de Google.

El token de actualización sigue venciendo

Los tokens de actualización pueden dejar de funcionar después de 7 días si el ID de cliente no está aprobado, lo que es una posible causa. El vencimiento del token en 7 días no está relacionado con las aprobaciones de Commercial o Sandbox. Una cuenta de servicio o de usuario debe obtener la aprobación de su ID de cliente de OAuth 2.0 y ponerlo en producción para obtener una vida útil más prolongada del token. Consulta Vencimiento del token de actualización para obtener más información.

Acceso denegado

Si configuraste tu pantalla de consentimiento de OAuth en Google Cloud y el Tipo de usuario es Externo, recibirás un error de "Acceso denegado" si intentas vincular la cuenta con una Cuenta de Google que no aparezca como usuario de prueba de tu app. Asegúrate de agregar la Cuenta de Google a la sección Usuarios de prueba en tu pantalla de consentimiento de OAuth.

Error del Administrador de conexiones de socios (PCM)

Si necesitas ayuda con los errores que se producen cuando accedes al PCM, consulta la Referencia de errores de Partner Connections Manager (PCM).

Google no verificó esta app

La API de SDM usa un alcance restringido, lo que significa que todas las apps que usen este alcance durante la autorización se considerarán "sin verificar" a menos que se complete la Verificación de la API de OAuth. Cuando se usa Device Access para uso personal, no se requiere la verificación de la API de OAuth.

Es posible que veas la pantalla "Google no verificó esta app" durante el proceso de autorización, que aparece si el permiso sdm.service no está configurado en tu pantalla de consentimiento de OAuth en Google Cloud. Para omitir esta pantalla, haz clic en la opción Avanzado y, luego, en Ir a Nombre del proyecto (no seguro).

Consulta la pantalla de la app sin verificar para obtener más información.

Cliente no válido

Cuando intentes obtener un token de acceso o de actualización, recibirás un error de "Cliente no válido" si proporcionas un secreto de cliente de OAuth 2.0 incorrecto. Asegúrate de que el valor de client_secret que usas en las llamadas de tokens de acceso y actualización sea el del ID de cliente de OAuth 2.0 que se está usando, como se indica en la página Credenciales de Google Cloud.

La solicitud no es válida y falta el permiso obligatorio

Después de otorgar permisos en PCM, es posible que se produzca un error de "Solicitud no válida" de "Falta el parámetro obligatorio: scope". Asegúrate de que el valor de scope que usas en las llamadas de autorización sea el mismo que el que estableciste para el cliente de OAuth 2.0, como se indica en la página Credenciales de Google Cloud.

Los URI de redireccionamiento no coinciden

Cuando realices la autorización, es posible que aparezca el error "Redirect uri mismatch". Asegúrate de que el valor de redirect_uri que usas en las llamadas de autorización sea el mismo que el que estableciste para el cliente de OAuth 2.0, como se indica en la página Credenciales de Google Cloud.

Cómo modificar los permisos de la cuenta

Para modificar los permisos otorgados a un proyecto Device Access o desconectarlo por completo, ve a PCM:

https://nestservices.google.com/partnerconnections

En esta página, se muestran todos los servicios de desarrolladores externos (proyectosDevice Access ) conectados a tu cuenta. Selecciona el proyecto Device Access que deseas cambiar. Usa la siguiente pantalla para modificar los permisos según desees.

Para revocar solo permisos específicos de un servicio autorizado, activa o desactiva los permisos que quieras revocar y haz clic en la flecha hacia atrás para guardar los cambios.

Para desconectar un servicio autorizado por completo, haz clic en Desvincular tu Cuenta de Google para revocar todos los permisos y tokens de acceso que se le otorgaron al proyecto para la cuenta.

Si PCM no muestra el servicio deseado, es posible que primero debas hacer una llamada a la lista de dispositivos.

Referencia rápida

Usa esta referencia para implementar rápidamente los pasos para autorizar unuser y vincular su Cuenta de Google.

Para usar esta referencia rápida, edita cada variable de marcador de posición en las muestras de código con los valores de tu integración específica, y copia y pega según sea necesario:

1 PCM

Abre el siguiente vínculo en un navegador web y reemplaza los siguientes elementos:

  1. project-id con tu Device Access Project ID
  2. oauth2-client-id con el ID de cliente de OAuth2 de tus credenciales de Google Cloud
https://nestservices.google.com/partnerconnections/project-id/auth?redirect_uri=https://www.google.com&access_type=offline&prompt=consent&client_id=oauth2-client-id&response_type=code&scope=https://www.googleapis.com/auth/sdm.service

2. Código de autorización

Se te redireccionará a https://www.google.com. El código de autorización se devuelve como el parámetro code en la URL, que debe tener este formato:

https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service

3. Token de acceso

Usa el código de autorización para recuperar un token de acceso que puedes usar para llamar a la API de SDM.

Abre una terminal y ejecuta el siguiente comando curl, reemplazando los siguientes elementos:

  1. oauth2-client-id y oauth2-client-secret con el ID de cliente y el secreto del cliente de OAuth2 de tus credenciales de Google Cloud
  2. authorization-code por el código que recibiste en el paso anterior

Google OAuth devuelve dos tokens: un token de acceso y un token de actualización.

Solicitud

curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&code=authorization-code&grant_type=authorization_code&redirect_uri=https://www.google.com'

Respuesta

{
  "access_token": "access-token",
  "expires_in": 3599,
  "refresh_token": "refresh-token",
  "scope": "https://www.googleapis.com/auth/sdm.service",
  "token_type": "Bearer"
}

4. Llamada a la API

La autorización no se completa hasta que realices tu primera llamada a devices.list con tu nuevo token de acceso. Esta llamada inicial finaliza el proceso de autorización y habilita los eventos si ya configuraste una suscripción a Pub/Sub.

Debes usar una de las llamadas a la API que se indican para el alcance especificado para completar la autorización.

sdm.service

dispositivos

Consulta la referencia de la API de devices.list para obtener más información.

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

5. Token de actualización

Los tokens de acceso para la API de SDM solo son válidos durante 1 hora, como se indica en el parámetro expires_in que devuelve Google OAuth. Si tu token de acceso vence, usa el token de actualización para obtener uno nuevo.

Abre una terminal y ejecuta el siguiente comando curl, reemplazando los siguientes elementos:

  1. oauth2-client-id y oauth2-client-secret con el ID de cliente y el secreto del cliente de OAuth2 de tus credenciales de Google Cloud
  2. refresh-token con el código que recibiste cuando obtuviste el token de acceso por primera vez.

Google OAuth devuelve un nuevo token de acceso.

Solicitud

curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&refresh_token=refresh-token&grant_type=refresh_token'

Respuesta

{
  "access_token": "new-access-token",
  "expires_in": 3599,
  "scope": "https://www.googleapis.com/auth/sdm.service",
  "token_type": "Bearer"
}