Autoryzowanie konta

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

Aby wyświetlać struktury i urządzenia, musisz połączyć konto Google z projektemDevice Access za pomocą PCM. PCM umożliwia user przyznanie uprawnień do developer, aby umożliwić im dostęp do struktur i danych urządzenia.

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 z dokumentem tożsamości Device Access Project
    2. oauth2-client-id z 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 logowałeś(-aś) się w Google z kilku kont, może pojawić się początkowy ekran Wybierz konto z listą Twoich kont Google. Jeśli tak, wybierz konto Google powiązane z urządzeniami, na których chcesz przyznać uprawnienia Device Access.
  3. Ekran Uprawnienia Google Nest to sam PCM. Tutaj możesz przyznać uprawnienia do struktury i urządzenia. Włącz uprawnienia dla swojego domu (krok 1) i wszystkich urządzeń w tym domu, które są obsługiwane przez interfejs SDM API (krok 2), a potem kliknij Dalej.
  4. Na ekranie Wybierz konto, aby przejść do Nazwa projektu (Nazwa projektu to nazwa projektu Google Cloud), wybierz konto Google, które chcesz autoryzować do interfejsu SDM API. Użyj tego samego konta Google, które było używane do tej pory.
  5. Po wybraniu konta może pojawić się ekran z ostrzeżeniem, na którym będzie napisane, że Google nie zweryfikowało tej aplikacji. Aby kontynuować, kliknij opcję 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 Nazwa projektu kliknij Zezwól, aby przyznać projektowi uprawnienia dostępu do Twojego konta Google.
  7. Na ekranie Potwierdź wybór zaznacz uprawnienia, które chcesz przyznać, i kliknij Zezwól, aby potwierdzić.
  8. Powinieneś zostać przekierowany na stronę https://www.google.com. Kod autoryzacji jest zwracany jako parametr code w adresie URL. Powinien mieć taki 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-id i oauth2-client-secret z identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud
    2. authorization-code zastąp 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.

Wykonywanie połączeń 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.

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

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

Pomyślne wywołanie zwraca listę urządzeń połączonych z Twoim projektem Device Access. Każde urządzenie ma własną 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 1 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 dotyczącego 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-id i oauth2-client-secret z identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud
    2. refresh-token z kodem otrzymanym przy pierwszym uzyskaniu 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 protokole OAuth Google 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 został zatwierdzony. Tokeny wygasają po 7 dniach niezależnie od tego, czy zostały zatwierdzone do użytku komercyjnego, czy w piaskownicy. Aby wydłużyć czas ważności tokenów, konto usługi lub użytkownika musi uzyskać zatwierdzony identyfikator klienta OAuth 2.0 i wdrożyć go w wersji produkcyjnej. Więcej informacji znajdziesz w sekcji Wygaśnięcie tokena odświeżania.

Odmowa dostępu

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

Błąd Menedżera połączeń z usługami partnerskimi

Więcej informacji o błędach występujących podczas korzystania z PCM znajdziesz w artykule Informacje o błędach w 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 przeprowadzona weryfikacja interfejsu OAuth API. W przypadku korzystania z Device Access do celów osobistych weryfikacja interfejsu OAuth API nie jest wymagana.

Podczas procesu autoryzacji może się wyświetlić ekran „Google nie zweryfikowało tej aplikacji”. Wyświetla się on, jeśli zakres sdm.service nie jest skonfigurowany na ekranie akceptacji OAuth w Google Cloud. Aby pominąć ten ekran, kliknij opcję Zaawansowane, a następnie Przejdź do Nazwa projektu (niebezpieczne).

Więcej informacji znajdziesz na ekranie niezweryfikowanej aplikacji.

Nieprawidłowy klient

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

Nieprawidłowe żądanie – brak wymaganego zakresu

Po przyznaniu uprawnień w PCM możesz napotkać błąd „Nieprawidłowe żądanie” o nazwie „Brak wymaganego parametru: zakres”. Upewnij się, że wartość scope używana w wywołaniach autoryzacji jest taka sama jak ta ustawiona dla klienta OAuth 2.0, jaką znajdziesz na stronie Dane uwierzytelniające Google Cloud.

Niezgodność identyfikatora URI przekierowania

Podczas autoryzacji może wystąpić błąd „Niezgodna wartość uri przekierowania”. Upewnij się, że wartość redirect_uri używana w wywołaniach autoryzacji jest taka sama jak ta ustawiona dla klienta OAuth 2.0 na stronie Dane uwierzytelniające Google Cloud.

Modyfikowanie uprawnień konta

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

https://nestservices.google.com/partnerconnections

Na tej stronie wyświetlane są wszystkie usługi dewelopera innych firm (Device Access projekty) połączone z Twoim kontem. Wybierz projekt Device Access , który chcesz zmienić. Na następnym ekranie możesz zmienić uprawnienia.

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

Aby całkowicie odłączyć autoryzowaną usługę, kliknij Odłącz konto Google, aby cofnąć wszystkie uprawnienia i tokeny dostępu przyznane przez projekt dla tego konta.

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

Krótkie omówienie

Skorzystaj z tego dokumentu, aby szybko wykonać czynności wymagane do autoryzacjiuser i połączenia konta Google.

Aby skorzystać z tego szybkiego przewodnika, w przypadku każdej zmiennej zastępczej w przykładach kodu wpisz wartości odpowiadające konkretnej integracji i w razie potrzeby skopiuj i wklej je:

1 PCM

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

  1. project-id z dokumentem tożsamości Device Access Project
  2. oauth2-client-id z 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

Powinieneś zostać przekierowany na stronę https://www.google.com. Kod autoryzacji jest zwracany jako parametr code w adresie URL. Powinien mieć taki 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-id i oauth2-client-secret z identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud
  2. authorization-code zastąp 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 ramach 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 1 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-id i oauth2-client-secret z identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud
  2. refresh-token z kodem otrzymanym przy pierwszym uzyskaniu 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"
}