Autorizar uma conta

Com os projetos do Google Cloud e do Device Access criados, você pode autorizar uma Conta do Google com um dispositivo Google Nest compatível para a API SDM.

Para ver estruturas e dispositivos, vincule uma Conta do Google ao seu projetoDevice Access usando o PCM. Com a PCM, o user pode conceder permissão para que os developers acessem os dados das estruturas e dos dispositivos.

Neste guia, você vai atuar como user e developer.

  1. Abra o link a seguir em um navegador da Web, substituindo:

    1. project-id com seu ID do Device Access Project
    2. oauth2-client-id com o ID do cliente OAuth2 das suas credenciais do 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. Se você fez login no Google com várias contas recentemente, talvez apareça uma tela inicial Escolher uma conta com uma lista das suas Contas do Google. Se sim, selecione a Conta do Google vinculada aos dispositivos que você quer autorizar para Device Access.
  3. A tela Permissões do Google Nest é o PCM. Aqui você pode conceder permissões de estrutura e dispositivo. Ative as permissões para sua casa (Etapa 1) e todos os dispositivos nela compatíveis com a API SDM (Etapa 2). Depois, clique em Próxima.
  4. Na tela Escolha uma conta para continuar em Nome do projeto, em que Nome do projeto é o nome do seu projeto do Google Cloud, selecione a Conta do Google que você quer autorizar para a API SDM. Use a mesma Conta do Google de antes.
  5. Depois de escolher uma conta, talvez apareça uma tela de aviso informando que O Google não verificou este app. Se isso acontecer, clique na opção Avançado e depois em Acessar Nome do projeto (não seguro). Consulte O Google não verificou este app para mais informações.
  6. Na tela Conceder permissão de nome do projeto, clique em Permitir para dar ao projeto permissão de acessar sua Conta do Google.
  7. Na tela Confirmar suas escolhas, verifique se as permissões que você quer conceder estão marcadas e clique em Permitir para confirmar.
  8. Você será redirecionado para https://www.google.com. O código de autorização é retornado como o parâmetro code no URL, que deve estar neste formato:

    https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service
    
  9. Copie o código de autorização.

Receber um token de acesso

Use o código de autorização para recuperar um token de acesso que pode ser usado para chamar a API SDM.

  1. Abra um terminal e execute o seguinte comando curl, substituindo:

    1. oauth2-client-id e oauth2-client-secret com o ID do cliente e a chave secreta do cliente OAuth2 das suas credenciais do Google Cloud.
    2. authorization-code com o código que você recebeu na etapa 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. O Google OAuth retorna dois tokens: um de acesso e um de atualização.

    {
      "access_token": "access-token",
      "expires_in": 3599,
      "refresh_token": "refresh-token",
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }
    Copie os dois valores. O token de acesso é usado para chamar a API SDM, e o token de atualização é usado para receber um novo token de acesso.

Fazer uma chamada de lista de dispositivos

A autorização não será concluída até que você faça sua primeira chamada devices.list com o novo token de acesso. Essa chamada inicial conclui o processo de autorização e ativa os eventos se você já tiver configurado uma assinatura do Pub/Sub.

Use curl para fazer essa chamada para o endpoint devices:

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

Uma chamada bem-sucedida retorna uma lista de dispositivos vinculados ao seu projeto Device Access. Cada dispositivo tem uma lista exclusiva de características disponíveis:

{
  "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"
        }
      ]
    }
  ]
}

Como usar um token de atualização

Os tokens de acesso da API SDM são válidos por apenas uma hora, conforme observado no parâmetro expires_in retornado pelo Google OAuth. Se o token de acesso expirar, use o token de atualização para receber um novo.

O comando é semelhante ao do token de acesso, mas você usa um grant_type diferente.

  1. Abra um terminal e execute o comando curl a seguir, substituindo:

    1. oauth2-client-id e oauth2-client-secret com o ID do cliente e a chave secreta do cliente OAuth2 das suas credenciais do Google Cloud.
    2. refresh-token com o código recebido ao gerar o token de acesso.
    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. O Google OAuth retorna um novo token de acesso.

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

Solução de problemas

Para saber mais sobre o OAuth do Google, consulte Como usar o OAuth 2.0 para acessar as APIs do Google.

O token de atualização expira constantemente

Os tokens de atualização podem parar de funcionar após sete dias se o ID do cliente não for aprovado. A expiração do token de sete dias não está relacionada às aprovações comerciais ou de sandbox. Uma conta de serviço ou de usuário precisa ter o ID do cliente OAuth 2.0 aprovado e colocado em produção para aumentar a validade do token. Consulte Validade do token de atualização para mais informações.

Acesso negado

Se você configurou a tela de permissão OAuth no Google Cloud e o Tipo de usuário é Externo, vai aparecer um erro de "Acesso negado" se você tentar vincular a conta com uma Conta do Google que não está listada como usuário de teste do app. Adicione a Conta do Google à seção Usuários de teste na tela de permissão OAuth.

Erro do Partner Connections Manager (PCM)

Para receber ajuda com erros encontrados ao acessar o PCM, consulte a Referência de erros do Gerenciador de conexões de parceiros (PCM).

O Google não verificou este app

A API SDM usa um escopo restrito, o que significa que todos os apps que usam esse escopo durante a autorização serão "não verificados", a menos que a verificação da API OAuth seja concluída. Ao usar o Device Access para uso pessoal, a verificação da API OAuth não é necessária.

Durante o processo de autorização, talvez apareça uma tela "O Google não verificou este app". Isso acontece se o escopo sdm.service não estiver configurado na sua tela de consentimento do OAuth no Google Cloud. Para ignorar essa tela, clique em Avançado e em Acessar Nome do projeto (não seguro).

Consulte Tela de app não verificado para mais informações.

Cliente inválido

Ao tentar receber um token de acesso ou de atualização, você vai receber um erro "Cliente inválido" se fornecer um segredo do cliente OAuth 2.0 incorreto. Verifique se o valor client_secret usado nas chamadas de token de acesso e atualização é o ID do cliente OAuth 2.0 em uso, conforme encontrado na página Credenciais do Google Cloud.

Solicitação inválida, escopo obrigatório ausente

Depois de conceder permissões na PCM, talvez você encontre um erro "Solicitação inválida" de "Parâmetro obrigatório ausente: escopo". Verifique se o valor scope usado nas chamadas de autorização é o mesmo definido para o cliente OAuth 2.0, conforme encontrado na página Credenciais do Google Cloud.

Falha na correspondência do URI de redirecionamento

Durante a autorização, talvez você encontre um erro de "URI de redirecionamento incompatível". Verifique se o valor redirect_uri usado nas chamadas de autorização é o mesmo definido para o cliente OAuth 2.0, conforme encontrado na página Credenciais do Google Cloud.

Modificar permissões da conta

Para modificar as permissões concedidas a um projeto Device Access ou desconectá-lo totalmente, acesse o PCM:

https://nestservices.google.com/partnerconnections

Essa página mostra todos os serviços de desenvolvedores terceirizados (projetos doDevice Access ) conectados à sua conta. Selecione o projeto do Device Access que você quer mudar. Use a próxima tela para modificar as permissões conforme necessário.

Para revogar apenas permissões específicas de um serviço autorizado, ative/desative as permissões que você quer revogar e clique na seta para trás para salvar.

Para desconectar um serviço autorizado por completo, clique em Desvincular sua Conta do Google para revogar todas as permissões e tokens de acesso concedidos ao projeto para a conta.

Se o PCM não mostrar o serviço desejado, talvez seja necessário fazer uma chamada de lista de dispositivos primeiro.

Referência rápida

Use esta referência para implementar rapidamente as etapas de autorização de um user e vincular a Conta do Google .

Para usar esta referência rápida, edite cada variável de marcador nos exemplos de código com os valores da sua integração específica e copie e cole conforme necessário:

1 PCM

Abra o link a seguir em um navegador da Web, substituindo:

  1. project-id com seu ID do Device Access Project
  2. oauth2-client-id com o ID do cliente OAuth2 das suas credenciais do 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 autenticação

Você será redirecionado para https://www.google.com. O código de autorização é retornado como o parâmetro code no URL, que deve estar neste formato:

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

3 Token de acesso

Use o código de autorização para recuperar um token de acesso que pode ser usado para chamar a API SDM.

Abra um terminal e execute o seguinte comando curl, substituindo:

  1. oauth2-client-id e oauth2-client-secret com o ID do cliente e a chave secreta do cliente OAuth2 das suas credenciais do Google Cloud.
  2. authorization-code com o código que você recebeu na etapa anterior.

O Google OAuth retorna dois tokens: um de acesso e um de atualização.

Solicitação

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'

Resposta

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

4. Chamada de API

A autorização não será concluída até que você faça sua primeira chamada devices.list com o novo token de acesso. Essa chamada inicial conclui o processo de autorização e ativa os eventos se você já tiver configurado uma assinatura do Pub/Sub.

Você precisa usar uma das chamadas de API listadas para o escopo especificado para concluir a autorização.

sdm.service

dispositivos

Consulte a referência da API devices.list para mais informações.

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 atualização

Os tokens de acesso da API SDM são válidos por apenas uma hora, conforme observado no parâmetro expires_in retornado pelo Google OAuth. Se o token de acesso expirar, use o token de atualização para receber um novo.

Abra um terminal e execute o comando curl a seguir, substituindo:

  1. oauth2-client-id e oauth2-client-secret com o ID do cliente e a chave secreta do cliente OAuth2 das suas credenciais do Google Cloud.
  2. refresh-token com o código recebido ao gerar o token de acesso.

O Google OAuth retorna um novo token de acesso.

Solicitação

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'

Resposta

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