Autoriser un compte

Une fois vos projets Google Cloud et Device Access créés, vous pouvez autoriser un compte Google avec un appareil Google Nest compatible pour l'API SDM.

Pour afficher les structures et les appareils, vous devez associer un compte Google à votre projetDevice Access à l'aide du PCM. PCM permet à user d'accorder l'autorisation aux developerd'accéder à leurs structures et aux données de leur appareil.

Dans ce guide, vous faites office de user et de developer.

  1. Ouvrez le lien suivant dans un navigateur Web en remplaçant:

    1. project-id avec votre Device Access Project ID
    2. oauth2-client-id par l'ID client OAuth2 provenant de vos identifiants 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 vous vous êtes récemment connecté à Google avec plusieurs comptes, un écran initial Sélectionner un compte peut s'afficher, avec une liste de vos comptes Google. Si tel est le cas, sélectionnez le compte Google associé aux appareils que vous souhaitez autoriser pour Device Access.
  3. L'écran Google Nest permissions (Autorisations Google Nest) affiche le PCM lui-même. Ici, vous pouvez accorder des autorisations liées à la structure et à l'appareil. Activez les autorisations pour votre maison (étape 1) et tous les appareils de cette maison compatibles avec l'API SDM (étape 2), puis cliquez sur Suivant.
  4. Sur l'écran Sélectionnez un compte pour passer à Nom du projet, où Nom du projet correspond au nom de votre projet Google Cloud, sélectionnez le compte Google que vous souhaitez autoriser pour l'API SDM. Utilisez le même compte Google qu'auparavant.
  5. Après avoir choisi un compte, un écran d'avertissement peut s'afficher et indiquer que Google n'a pas validé cette application. Si c'est le cas, cliquez sur Avancé, puis sur Accéder à Nom du projet (non sécurisé). Pour en savoir plus, consultez Google n'a pas validé cette application.
  6. Sur l'écran Accorder l'autorisation Nom du projet, cliquez sur Autoriser pour autoriser le projet à accéder à votre compte Google.
  7. Sur l'écran Confirm your choice (Confirmer vos choix), assurez-vous que les autorisations que vous souhaitez accorder sont cochées, puis cliquez sur Allow (Autoriser) pour confirmer.
  8. Vous devriez être redirigé vers https://www.google.com. Le code d'autorisation est renvoyé en tant que paramètre code dans l'URL, au format suivant:

    https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service
    
  9. Copiez le code d'autorisation.

Obtenir un jeton d'accès

Utilisez le code d'autorisation pour récupérer un jeton d'accès que vous pouvez utiliser pour appeler l'API SDM.

  1. Ouvrez un terminal et exécutez la commande curl suivante, en remplaçant:

    1. oauth2-client-id et oauth2-client-secret par l'ID client OAuth2 et le code secret du client provenant de vos identifiants Google Cloud
    2. authorization-code par le code reçu à l'étape précédente
    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 renvoie deux jetons : un jeton d'accès et un jeton d'actualisation.

    {
      "access_token": "access-token",
      "expires_in": 3599,
      "refresh_token": "refresh-token",
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }
    Copiez ces deux valeurs. Le jeton d'accès permet d'appeler l'API SDM, tandis que le jeton d'actualisation permet d'obtenir un nouveau jeton d'accès.

Passer un appel de la liste des appareils

L'autorisation n'est terminée qu'une fois que vous avez effectué votre premier appel devices.list avec votre nouveau jeton d'accès. Cet appel initial met fin au processus d'autorisation et active les événements si vous avez déjà configuré un abonnement Pub/Sub.

Utilisez curl pour effectuer cet appel pour le point de terminaison devices:

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

Les appels réussis affichent la liste des appareils associés à votre projet Device Access. Chaque appareil possède sa propre liste unique de caractéristiques 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"
        }
      ]
    }
  ]
}

Utiliser un jeton d'actualisation

Les jetons d'accès pour l'API SDM ne sont valides que pendant une heure, comme indiqué dans le paramètre expires_in renvoyé par Google OAuth. Si votre jeton d'accès expire, utilisez le jeton d'actualisation pour en obtenir un nouveau.

La commande est semblable au jeton d'accès, sauf que vous utilisez un autre grant_type.

  1. Ouvrez un terminal et exécutez la commande curl suivante, en remplaçant:

    1. oauth2-client-id et oauth2-client-secret par l'ID client OAuth2 et le code secret du client provenant de vos identifiants Google Cloud
    2. refresh-token par le code que vous avez reçu lors de l'obtention initiale du jeton d'accès.
    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 renvoie un nouveau jeton d'accès.

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

Dépannage

Pour en savoir plus sur Google OAuth, consultez Utiliser OAuth 2.0 pour accéder aux API Google.

Le jeton d'actualisation n'arrête pas d'expirer

Les jetons d'actualisation peuvent cesser de fonctionner au bout de sept jours si l'ID client n'est pas approuvé, ce qui peut en être la cause. L'expiration du jeton de sept jours n'est pas liée aux approbations de type "Commercial" ou "Sandbox". Pour allonger la durée de vie des jetons, un compte de service ou un compte utilisateur doit faire approuver son ID client OAuth 2.0 et le mettre en production. Pour en savoir plus, consultez la section Expiration du jeton d'actualisation.

Accès refusé

Si vous avez configuré votre écran d'autorisation OAuth dans Google Cloud et que le type d'utilisateur est défini sur Externe, une erreur "Accès refusé" s'affiche si vous tentez d'associer un compte Google non répertorié comme utilisateur test pour votre application. Veillez à ajouter le compte Google à la section Utilisateurs test de votre écran d'autorisation OAuth.

Erreur du gestionnaire des connexions partenaires (PCM)

Pour obtenir de l'aide concernant les erreurs rencontrées lors de l'accès à PCM, consultez la documentation de référence sur les erreurs de gestionnaire des connexions partenaires (PCM).

Google n'a pas validé cette application

L'API SDM utilise un champ d'application restreint, ce qui signifie que toutes les applications qui utilisent ce champ d'application pendant l'autorisation seront "non validées", sauf si la validation de l'API OAuth est terminée. En cas d'utilisation personnelle de Device Access , la validation de l'API OAuth n'est pas requise.

Le message "Google n'a pas validé cette application" peut s'afficher pendant le processus d'autorisation si le champ d'application de sdm.service n'est pas configuré sur votre écran d'autorisation OAuth dans Google Cloud. Vous pouvez contourner cet écran en cliquant sur l'option Advanced (Avancé), puis sur Go to Project Name (non sécurisé).

Pour en savoir plus, consultez Écran de l'application non validée.

Client non valide

Lorsque vous tentez d'obtenir un jeton d'accès ou d'actualisation, une erreur "Client non valide" s'affiche si vous fournissez un code secret de client OAuth 2.0 incorrect. Assurez-vous que la valeur client_secret que vous utilisez dans les appels de jeton d'accès et d'actualisation correspond à celle de l'ID client OAuth 2.0 utilisé, comme indiqué sur la page Identifiants Google Cloud.

Requête non valide, champ d'application requis manquant

Après avoir accordé des autorisations dans PCM, vous risquez de rencontrer l'erreur "Requête non valide" de "Paramètre obligatoire manquant: champ d'application". Assurez-vous que la valeur scope que vous utilisez dans les appels d'autorisation est identique à celle que vous avez définie pour le client OAuth 2.0, comme indiqué sur la page Identifiants Google Cloud.

L'URI de redirection ne correspond pas

Lorsque vous passez l'autorisation, vous pouvez rencontrer une erreur "Incohérence de l'URI de redirection". Assurez-vous que la valeur redirect_uri que vous utilisez dans les appels d'autorisation est identique à celle que vous avez définie pour le client OAuth 2.0, comme indiqué sur la page Identifiants Google Cloud.

Modifier les autorisations du compte

Pour modifier les autorisations accordées à un projet Device Access ou le déconnecter entièrement, accédez à PCM:

https://nestservices.google.com/partnerconnections

Cette page affiche tous les services de développement tiers (Device Access projets) connectés à votre compte. Sélectionnez le projet Device Access que vous souhaitez modifier. Utilisez l'écran suivant pour modifier les autorisations selon vos besoins.

Pour ne révoquer que certaines autorisations d'un service autorisé, activez/désactivez les autorisations que vous souhaitez révoquer, puis cliquez sur la flèche de retour pour les enregistrer.

Pour déconnecter complètement un service autorisé, cliquez sur Dissocier votre compte Google afin de révoquer toutes les autorisations et tous les jetons d'accès accordés au projet pour le compte.

Si le service PCM n'affiche pas le service souhaité, vous devrez peut-être d'abord effectuer un appel de liste d'appareils.

Guide de référence rapide

Utilisez cette référence pour implémenter rapidement la procédure permettant d'autoriser unuser et d'associer son compte Google.

Pour utiliser cette référence rapide, modifiez chaque variable d'espace réservé dans les exemples de code avec les valeurs correspondant à votre intégration spécifique, puis copiez-collez les éléments nécessaires:

1 PCM

Ouvrez le lien suivant dans un navigateur Web en remplaçant:

  1. project-id avec votre Device Access Project ID
  2. oauth2-client-id par l'ID client OAuth2 provenant de vos identifiants 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 Code d'autorisation

Vous devriez être redirigé vers https://www.google.com. Le code d'autorisation est renvoyé en tant que paramètre code dans l'URL, au format suivant:

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

3. Jeton d'accès

Utilisez le code d'autorisation pour récupérer un jeton d'accès que vous pouvez utiliser pour appeler l'API SDM.

Ouvrez un terminal et exécutez la commande curl suivante, en remplaçant:

  1. oauth2-client-id et oauth2-client-secret par l'ID client OAuth2 et le code secret du client provenant de vos identifiants Google Cloud
  2. authorization-code par le code reçu à l'étape précédente

Google OAuth renvoie deux jetons : un jeton d'accès et un jeton d'actualisation.

Requête

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'

Réponse

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

4 Appel d'API

L'autorisation n'est terminée qu'une fois que vous avez effectué votre premier appel devices.list avec votre nouveau jeton d'accès. Cet appel initial met fin au processus d'autorisation et active les événements si vous avez déjà configuré un abonnement Pub/Sub.

Vous devez utiliser l'un des appels d'API répertoriés pour le champ d'application spécifié pour terminer l'autorisation.

sdm.service

appareils

Pour en savoir plus, consultez la documentation de référence de l'API devices.list.

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

5 Jeton d'actualisation

Les jetons d'accès pour l'API SDM ne sont valides que pendant une heure, comme indiqué dans le paramètre expires_in renvoyé par Google OAuth. Si votre jeton d'accès expire, utilisez le jeton d'actualisation pour en obtenir un nouveau.

Ouvrez un terminal et exécutez la commande curl suivante, en remplaçant:

  1. oauth2-client-id et oauth2-client-secret par l'ID client OAuth2 et le code secret du client provenant de vos identifiants Google Cloud
  2. refresh-token par le code que vous avez reçu lors de l'obtention initiale du jeton d'accès.

Google OAuth renvoie un nouveau jeton d'accès.

Requête

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'

Réponse

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