Autoryzowanie konta

Po utworzeniu projektów Google Cloud i Device Access możesz autoryzować konto Google za pomocą obsługiwanego urządzenia Google Nest na potrzeby interfejsu SDM API.

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

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 ze swoim Device Access Project ID
    2. oauth2-client-id identyfikatorem klienta OAuth2 z danych logowania 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. Jeśli ostatnio logujesz się w Google na kilka kont, może się wyświetlić początkowy ekran Wybierz konto z listą Twoich kont Google. W takim przypadku wybierz konto Google powiązane z urządzeniami, które chcesz autoryzować Device Access.
  3. Ekran Uprawnienia w Google Nest to PCM. Tutaj możesz przyznać uprawnienia do struktury i urządzenia. Włącz uprawnienia do domu (krok 1) i wszystkich urządzeń w tym domu obsługiwanych przez SDM API (krok 2), a następnie kliknij Dalej.
  4. Na ekranie Wybierz konto, aby kontynuować w Nazwa projektu , gdzie Nazwa projektu to nazwa Twojego projektu Google Cloud, wybierz konto Google, które chcesz autoryzować na potrzeby SDM API. Użyj tego samego konta Google co wcześniej.
  5. Po wybraniu konta może się wyświetlić ekran ostrzeżenia Ta aplikacja nie została zweryfikowana przez Google. Jeśli tak się stanie, kliknij Zaawansowane, a potem Otwórz Nazwa projektu (niebezpieczne). Więcej informacji znajdziesz w artykule Ta aplikacja nie została zweryfikowana przez Google.
  6. Na ekranie Przyznaj uprawnienia do Nazwa projektu kliknij Zezwól, aby przyznać projektowi uprawnienia dostępu do Twojego konta Google.
  7. Na ekranie Potwierdź wybór sprawdź, czy uprawnienia, które chcesz przyznać, są zaznaczone, a następnie kliknij Zezwól , aby potwierdzić.
  8. Powinna nastąpić przekierowanie na 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 SDM API.

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

    1. oauth2-client-id i oauth2-client-secret identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud
    2. authorization-code 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 SDM API, a token odświeżania – do uzyskiwania nowego tokena dostępu.

Wywołanie listy urządzeń

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

Użyj curl, aby wykonać to wywołanie w przypadku punktu końcowego 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 Device Access projektem. 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 SDM API są ważne tylko przez godzinę, co jest podane 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 parametru grant_type.

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

    1. oauth2-client-id i oauth2-client-secret identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud
    2. refresh-token kodem otrzymanym podczas początkowego uzyskiwania dostępu tokena.
    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 OAuth 2.0 do korzystania z 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 został zatwierdzony. 7-dniowe wygaśnięcie tokena nie jest związane z zatwierdzeniami komercyjnymi ani w piaskownicy. Aby uzyskać dłuższy okres ważności tokena, konto usługi lub użytkownika musi zostać zatwierdzone, a identyfikator klienta OAuth 2.0 musi zostać wdrożony w środowisku produkcyjnym. Więcej informacji znajdziesz w artykule Wygaśnięcie tokena odświeżania.

Odmowa dostępu

Jeśli skonfigurujesz ekran zgody OAuth 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 Twojej aplikacji, pojawi się błąd „Odmowa dostępu”. Dodaj konto Google do sekcji Użytkownicy testowi na ekranie zgody OAuth.

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

Jeśli masz problem z dostępem do PCM, zapoznaj się z artykułem Menedżer połączeń z partnerami (PCM) informacje o błędach.

Ta aplikacja nie została zweryfikowana przez Google

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 aplikacji Device Access na własny użytek, weryfikacja interfejsu OAuth API nie jest wymagana.

Podczas procesu autoryzacji może się wyświetlić ekran „Ta aplikacja nie została zweryfikowana przez Google”, jeśli zakres sdm.service nie jest skonfigurowany na ekranie zgody OAuth w Google Cloud. Ten ekran można pominąć, klikając Zaawansowane , a potem Otwórz Nazwa projektu (niebezpieczne).

Więcej informacji znajdziesz w artykule Ekran niezweryfikowanej aplikacji screen.

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 tajny 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 zgodna z wartością identyfikatora klienta OAuth 2.0, która znajduje się na stronie Dane logowania Google Cloud.

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, która znajduje się na stronie Dane logowania Google Cloud page.

Niezgodność identyfikatora URI przekierowania

Podczas autoryzacji może wystąpić błąd „Niezgodność identyfikatora URI przekierowania”. Upewnij się, że wartość redirect_uri używana w wywołaniach autoryzacji jest taka sama jak wartość ustawiona dla klienta OAuth 2.0, która znajduje się na stronie Dane logowania Google Cloud.

Modyfikowanie uprawnień konta

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

https://nestservices.google.com/partnerconnections

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

Aby cofnąć tylko określone uprawnienia autoryzowanej usługi, wyłą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 , aby cofnąć wszystkie uprawnienia i tokeny dostępu przyznane projektowi na potrzeby konta.

Jeśli w PCM nie widać odpowiedniej usługi, być może trzeba najpierw wykonać wywołanie listy urządzeń.

Krótkie omówienie

Skorzystaj z tego omówienia, aby szybko wykonać czynności umożliwiające autoryzację user i połączenie konta Google .

Aby skorzystać z tego omówienia, zmień każdą zmienną zastępczą w przykładowych kodach na wartości dla konkretnej integracji, a następnie skopiuj i wklej w razie potrzeby:

1 PCM

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

  1. project-id ze swoim Device Access Project ID
  2. oauth2-client-id identyfikatorem klienta OAuth2 z danych logowania 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 Kod autoryzacji

Powinna nastąpić przekierowanie na 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 SDM API.

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

  1. oauth2-client-id i oauth2-client-secret identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud
  2. authorization-code 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 jest zakończona, dopóki nie wykonasz pierwszego devices.list wywołania za pomocą nowego tokena dostępu. To początkowe wywołanie kończy proces autoryzacji i włącza zdarzenia, jeśli masz już skonfigurowaną subskrypcję Pub/Sub.

Aby zakoń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 devices.list API.

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 SDM API są ważne tylko przez godzinę, co jest podane 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-id i oauth2-client-secret identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud
  2. refresh-token kodem otrzymanym podczas początkowego uzyskiwania dostępu tokena.

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