Autoriza una cuenta

Una vez que creaste tus proyectos de Google Cloud y Acceso a dispositivos, puedes autorizar una Cuenta de Google con un dispositivo Google Nest compatible para la API de SDM.

Para ver estructuras y dispositivos, debes vincular una Cuenta de Google a tu proyecto deDevice Access con la PCM. La PCM permite que user otorgue permiso para que los developeraccedan a sus estructuras y datos del dispositivo.

En esta guía, actúas como user y como developer.

  1. Abre el siguiente vínculo en un navegador web y reemplaza lo siguiente:

    1. project-id por tu Device Access Project ID
    2. oauth2-client-id por 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 recientemente accediste a Google con varias cuentas, es posible que aparezca la pantalla Elige una cuenta inicial con una lista de tus Cuentas de Google. Si es así, selecciona la Cuenta de Google vinculada a los dispositivos que desees autorizar para Device Access.
  3. La pantalla de permisos de Google Nest es PCM. Aquí puedes otorgar permisos de estructura y dispositivo. Activa los permisos para tu casa (paso 1) y cualquier dispositivo de esa casa que sea compatible con la API de SDM (paso 2). Luego, haz clic en Next.
  4. En la pantalla Choose an account to continue to Project Name, en la que 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 veas una pantalla de advertencia que indica que Google no verificó esta app. Si es así, haz clic en la opción Avanzada y, luego, en Ir a Nombre del proyecto (no seguro). Consulta Google aún no verificó esta app para obtener más información.
  6. En la pantalla Otorga el permiso Nombre del proyecto, haz clic en Permitir para otorgarle permiso al proyecto que acceda a tu Cuenta de Google.
  7. En la pantalla Confirma tus opciones, asegúrate de que los permisos que deseas otorgar estén marcados y haz clic en Permitir para confirmar.
  8. Se te debería redireccionar a https://www.google.com. El código de autorización se muestra como el parámetro code en la URL, que debe tener el siguiente 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 puedas usar para llamar a la API de SDM.

  1. Abre una terminal y ejecuta el siguiente comando de curl y reemplaza lo siguiente:

    1. oauth2-client-id y oauth2-client-secret por el ID y el secreto de 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 muestra 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 con el fin de llamar a la API de SDM y el token de actualización se usa para obtener un token de acceso nuevo.

Hacer una llamada a la lista de dispositivos

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

Usa curl a fin de realizar esta llamada para el extremo devices:

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

Si la llamada se realiza correctamente, se mostrará una lista de los dispositivos vinculados a tu proyecto de Device Access. Cada dispositivo tiene su propia lista única de características 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 muestra Google OAuth. Si vence tu token de acceso, usa el token de actualización para obtener uno nuevo.

El comando es similar al token de acceso uno, con la excepción de que usas un grant_type diferente.

  1. Abre una terminal y ejecuta el siguiente comando curl y reemplaza lo siguiente:

    1. oauth2-client-id y oauth2-client-secret por el ID y el secreto de cliente de OAuth2 de tus credenciales de Google Cloud
    2. refresh-token por 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 muestra 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

Si deseas 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 expirando

Es posible que los tokens de actualización dejen de funcionar después de 7 días si no se aprueba el ID de cliente. El vencimiento del token de 7 días no está relacionado con las aprobaciones comerciales ni de la zona de pruebas. Una cuenta de usuario o servicio debe obtener la aprobación del ID de cliente de OAuth 2.0 y ponerlo en producción para obtener una mayor vida útil del token. Consulta el vencimiento del token de actualización para obtener más información.

Acceso denegado

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

Error del Administrador de conexiones de socios (PCM)

Para obtener ayuda con los errores que se encuentran cuando se accede a PCM, consulta la Referencia de errores del Administrador de conexiones de socios (PCM).

Google no verificó esta app

La API de SDM usa un alcance restringido, lo que significa que cualquier app que lo use durante la autorización quedará "sin verificar", a menos que se complete la verificación de la API de OAuth. Cuando usas Device Access para uso personal, no se requiere la verificación de la API de OAuth.

Es posible que veas una pantalla con el mensaje “Google no verificó esta app” durante el proceso de autorización, que aparece si el permiso sdm.service no está configurado en la pantalla de consentimiento de OAuth en Google Cloud. Para omitir esta pantalla, haz clic en la opción Advanced y, luego, en Go to Project Name (no seguro).

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

Cliente no válido

Cuando intentes obtener un token de acceso o de actualización, aparecerá el error “Cliente no válido” si proporcionas un secreto del cliente de OAuth 2.0 incorrecto. Asegúrate de que el valor client_secret que usas en las llamadas de acceso y token de actualización sea el mismo para el ID de cliente de OAuth 2.0 que se usa, como se encuentra en la página Credenciales de Google Cloud.

Solicitud no válida, falta el alcance obligatorio

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

Inconsistencia de URI de redireccionamiento

Cuando ejecutes la autorización, es posible que aparezca el error “Redireccionar la falta de coincidencia de URI”. Asegúrate de que el valor redirect_uri que usas en las llamadas de autorización sea el mismo que estableciste para el cliente de OAuth 2.0, como se encuentra en la página Credenciales de Google Cloud.

Modificar los permisos de la cuenta

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

https://nestservices.google.com/partnerconnections

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

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

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 el proyecto tiene para la cuenta.

Si la 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 a fin de 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 cópiala y pégala según sea necesario:

1 PCM

Abre el siguiente vínculo en un navegador web y reemplaza lo siguiente:

  1. project-id por tu Device Access Project ID
  2. oauth2-client-id por 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 autenticación

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

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

3 tokens de acceso

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

Abre una terminal y ejecuta el siguiente comando de curl y reemplaza lo siguiente:

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

Google OAuth muestra 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 estará completa hasta que realices tu primera llamada a devices.list con el nuevo token de acceso. Esta llamada inicial finaliza el proceso de autorización y habilita eventos si ya configuraste una suscripción de Pub/Sub.

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

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 tokens 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 muestra Google OAuth. Si vence tu token de acceso, usa el token de actualización para obtener uno nuevo.

Abre una terminal y ejecuta el siguiente comando curl y reemplaza lo siguiente:

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

Google OAuth muestra 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"
}