Autoryzowanie konta

Po utworzeniu projektów Google Cloud i Device Access możesz autoryzować konto Google z obsługiwanym urządzeniem Google Nest na potrzeby interfejsu SDM API.

Aby wyświetlać struktury i urządzenia, musisz połączyć konto Google z Device Access projektem za pomocą PCM. PCM umożliwia user przyznanie uprawnień developerdo dostępu do danych dotyczących struktur i urządzeń.

W tym przewodniku pełnisz rolę zarówno user , jak i  developer.

  1. Otwórz ten link w przeglądarce, zastępując:

    1. project-id za pomocą Device Access Project dokumentu tożsamości.
    2. oauth2-client-id z identyfikatorem klienta OAuth2 z sekcji Google Cloud Dane logowania.
    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. Jeśli ostatnio logowałeś(-aś) się w Google na kilka kont, może się wyświetlić początkowy ekran Wybierz konto z listą Twoich kont Google. Jeśli tak, wybierz konto Google powiązane z urządzeniami, którym chcesz przyznać uprawnienia Device Access.
  3. Ekran Uprawnienia w Google Nest to samo PCM. Możesz tu przyznawać uprawnienia do struktury i urządzeń. Włącz uprawnienia dla domu (krok 1) i wszystkich urządzeń w tym domu, które są obsługiwane przez interfejs SDM API (krok 2), a następnie kliknij Dalej.
  4. Na ekranie Wybierz konto, aby kontynuować w nazwie projektu, gdzie nazwa projektu to nazwa Twojego projektu Google Cloud, wybierz konto Google, które chcesz autoryzować w interfejsie SDM API. Użyj tego samego konta Google co wcześniej.
  5. Po wybraniu konta może pojawić się ekran z ostrzeżeniem Google nie zweryfikowało tej aplikacji. Jeśli tak się stanie, aby kontynuować, kliknij opcję Zaawansowane, a potem Otwórz nazwę projektu (niebezpieczne). Więcej informacji znajdziesz w sekcji Ta aplikacja nie została zweryfikowana przez Google.
  6. Na ekranie Przyznaj uprawnienia do nazwy projektu kliknij Zezwól, aby przyznać projektowi uprawnienia dostępu do Twojego konta Google.
  7. Na ekranie Potwierdź wybór upewnij się, że uprawnienia, które chcesz przyznać, są zaznaczone, a następnie kliknij Zezwól, aby potwierdzić.
  8. Powinno nastąpić przekierowanie na stronę https://www.google.com. Kod autoryzacji jest zwracany jako parametr code w adresie URL, który powinien mieć ten format:

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

Uzyskiwanie tokena dostępu

Użyj kodu autoryzacji, aby pobrać token dostępu, którego możesz używać do wywoływania interfejsu SDM API.

  1. Otwórz terminal i uruchom to polecenie curl, zastępując:

    1. oauth2-client-idoauth2-client-secret z identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud.
    2. authorization-code z kodem otrzymanym w poprzednim kroku.
    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 zwraca 2 tokeny: token dostępu i token odświeżania.

    {
      "access_token": "access-token",
      "expires_in": 3599,
      "refresh_token": "refresh-token",
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }
     Skopiuj obie te wartości. Token dostępu służy do wywoływania interfejsu SDM API, a token odświeżania – do uzyskiwania nowego tokena dostępu.

Nawiązywanie połączenia z listy urządzeń

Autoryzacja nie zostanie zakończona, dopóki nie wykonasz pierwszego wywołania devices.list za pomocą nowego tokena dostępu. To pierwsze wywołanie kończy proces autoryzacji i włącza zdarzenia, jeśli masz już skonfigurowaną subskrypcję Pub/Sub.

Użyj curl, aby nawiązać połączenie z punktem końcowym devices:

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

Wywołanie zakończone pomyślnie zwraca listę urządzeń połączonych z Twoim projektem Device Access. Każde urządzenie ma własną, unikalną listę dostępnych cech:

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

Jak używać tokena odświeżania

Tokeny dostępu do interfejsu SDM API są ważne tylko przez godzinę, co jest zaznaczone w parametrze expires_in zwracanym przez Google OAuth. Jeśli token dostępu wygaśnie, użyj tokena odświeżania, aby uzyskać nowy.

Polecenie jest podobne do polecenia tokena dostępu, z tym że używasz innego grant_type.

  1. Otwórz terminal i uruchom to polecenie curl, zastępując:

    1. oauth2-client-idoauth2-client-secret z identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud.
    2. refresh-token z kodem otrzymanym podczas pierwszego uzyskiwania tokena dostępu.
    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 zwraca nowy token dostępu.

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

Rozwiązywanie problemów

Więcej informacji o Google OAuth znajdziesz w artykule Używanie protokołu OAuth 2.0 na potrzeby dostępu do interfejsów API Google.

Token odświeżania ciągle wygasa

Tokeny odświeżania mogą przestać działać po 7 dniach, jeśli identyfikator klienta nie zostanie zatwierdzony. 7-dniowy okres ważności tokena nie jest związany z zatwierdzeniami w przypadku środowiska komercyjnego ani piaskownicy. Aby uzyskać dłuższy okres ważności tokena, konto usługi lub użytkownika musi mieć zatwierdzony identyfikator klienta OAuth 2.0 i być wdrożone w środowisku produkcyjnym. Więcej informacji znajdziesz w sekcji Wygaśnięcie tokena odświeżania.

Odmowa dostępu

Jeśli ekran akceptacji OAuth został skonfigurowany w Google Cloud, a Typ użytkownika to Zewnętrzny, podczas próby połączenia konta z kontem Google, które nie jest wymienione jako użytkownik testowy aplikacji, pojawi się błąd „Odmowa dostępu”. Pamiętaj, aby dodać konto Google do sekcji Użytkownicy testowi na ekranie akceptacji OAuth.

Błąd Menedżera połączeń z partnerami (PCM)

Jeśli podczas uzyskiwania dostępu do PCM wystąpią błędy, zapoznaj się z informacjami o błędach w Menedżerze połączeń z partnerami (PCM).

Ta aplikacja nie została zweryfikowana przez Google

Interfejs SDM API używa ograniczonego zakresu, co oznacza, że wszystkie aplikacje, które używają tego zakresu podczas autoryzacji, będą „niezweryfikowane”, dopóki nie zostanie ukończona weryfikacja interfejsu OAuth API. Jeśli używasz Device Access do celów osobistych, weryfikacja interfejsu OAuth API nie jest wymagana.

Podczas procesu autoryzacji może pojawić się ekran „Google nie zweryfikowało tej aplikacji”. Wyświetla się on, jeśli zakres sdm.service nie jest skonfigurowany na ekranie zgody OAuth w Google Cloud. Ten ekran można pominąć, klikając Zaawansowane, a następnie Otwórz nazwę projektu (niebezpieczne).

Więcej informacji znajdziesz na ekranie niezweryfikowanej aplikacji.

Nieprawidłowy klient

Podczas próby uzyskania tokena dostępu lub tokena odświeżania pojawi się błąd „Nieprawidłowy klient”, jeśli podasz nieprawidłowy klucz klienta OAuth 2.0. Upewnij się, że wartość client_secret używana w wywołaniach tokena dostępu i tokena odświeżania jest wartością identyfikatora klienta OAuth 2.0, który jest używany, jak podano na stronie Google Cloud – Dane logowania.

Nieprawidłowe żądanie, brak wymaganego zakresu

Po przyznaniu uprawnień w PCM może wystąpić błąd „Nieprawidłowe żądanie” z komunikatem „Brak wymaganego parametru: scope”. Upewnij się, że wartość scope używana w wywołaniach autoryzacji jest taka sama jak wartość ustawiona dla klienta OAuth 2.0 na stronie Dane logowania w Google Cloud.

Niezgodność identyfikatora URI przekierowania

Podczas autoryzacji może wystąpić błąd „Redirect uri mismatch” (Niezgodność adresu URI przekierowania). Sprawdź, czy wartość redirect_uri używana w wywołaniach autoryzacji jest taka sama jak wartość ustawiona dla klienta OAuth 2.0 na stronie Google Cloud – Dane logowania.

Modyfikowanie uprawnień konta

Aby zmodyfikować uprawnienia przyznane Device Access projektowi lub całkowicie go odłączyć, otwórz PCM:

https://nestservices.google.com/partnerconnections

Na tej stronie znajdziesz wszystkie usługi deweloperów innych firm (Device Access projekty) połączone z Twoim kontem. Wybierz Device Access projekt, który chcesz zmienić. Na następnym ekranie zmień uprawnienia.

Aby cofnąć tylko określone uprawnienia autoryzowanej usługi, przełącz uprawnienia, które chcesz cofnąć, i kliknij strzałkę wstecz, aby zapisać zmiany.

Aby całkowicie odłączyć autoryzowaną usługę, kliknij Odłącz konto Google. Spowoduje to cofnięcie wszystkich uprawnień i tokenów dostępu, które projekt otrzymał w przypadku tego konta.

Jeśli PCM nie wyświetla żądanej usługi, być może musisz najpierw wykonać wywołanie listy urządzeń.

Krótkie omówienie

Skorzystaj z tego przewodnika, aby szybko wdrożyć kroki autoryzacji usługiuser i połączenia jej z kontem Google.

Aby skorzystać z tego krótkiego przewodnika, w przykładach kodu zmień każdą zmienną zastępczą na wartości odpowiednie dla Twojej integracji, a następnie skopiuj i wklej kod w razie potrzeby:

1 PCM

Otwórz ten link w przeglądarce, zastępując:

  1. project-id za pomocą Device Access Project dokumentu tożsamości.
  2. oauth2-client-id z identyfikatorem klienta OAuth2 z sekcji Google Cloud Dane logowania.
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 Kod autoryzacji

Powinno nastąpić przekierowanie na stronę https://www.google.com. Kod autoryzacji jest zwracany jako parametr code w adresie URL, który powinien mieć ten format:

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

3. Token dostępu

Użyj kodu autoryzacji, aby pobrać token dostępu, którego możesz używać do wywoływania interfejsu SDM API.

Otwórz terminal i uruchom to polecenie curl, zastępując:

  1. oauth2-client-idoauth2-client-secret z identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud.
  2. authorization-code z kodem otrzymanym w poprzednim kroku.

Google OAuth zwraca 2 tokeny: token dostępu i token odświeżania.

Żądanie

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'

Odpowiedź

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

4 Wywołanie interfejsu API

Autoryzacja nie zostanie zakończona, dopóki nie wykonasz pierwszego wywołania devices.list za pomocą nowego tokena dostępu. To pierwsze wywołanie kończy proces autoryzacji i włącza zdarzenia, jeśli masz już skonfigurowaną subskrypcję Pub/Sub.

Aby dokończyć autoryzację, musisz użyć jednego z wywołań interfejsu API wymienionych w przypadku określonego zakresu.

sdm.service

urządzenia

Więcej informacji znajdziesz w dokumentacji interfejsu 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. Token odświeżania

Tokeny dostępu do interfejsu SDM API są ważne tylko przez godzinę, co jest zaznaczone w parametrze expires_in zwracanym przez Google OAuth. Jeśli token dostępu wygaśnie, użyj tokena odświeżania, aby uzyskać nowy.

Otwórz terminal i uruchom to polecenie curl, zastępując:

  1. oauth2-client-idoauth2-client-secret z identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud.
  2. refresh-token z kodem otrzymanym podczas pierwszego uzyskiwania tokena dostępu.

Google OAuth zwraca nowy token dostępu.

Żądanie

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'

Odpowiedź

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