Poproś o synchronizację

Cloud-to-cloud

Synchronizacja żądań wywołuje żądanie SYNC do Twojej usługi realizacji w przypadku każdego użytkownika Google który ma urządzenia powiązane z określonym agentUserId (wysłanym w pierajtnym żądaniu SYNC). Umożliwia to aktualizowanie urządzeń użytkowników bez odłączania i ponownego łączenia ich kont. Wszyscy użytkownicy powiązani z tym identyfikatorem otrzymają żądanie SYNC.

Musisz wywołać żądanie SYNC:

  • gdy użytkownik doda nowe urządzenie,
  • gdy użytkownik usunie istniejące urządzenie,
  • gdy użytkownik zmieni nazwę istniejącego urządzenia,
  • gdy zaimplementujesz nowy typ urządzenia, cechę lub dodasz nową funkcję urządzenia.

Rozpocznij

Aby zaimplementować synchronizację żądań:

Włączanie interfejsu Google HomeGraph API

  1. W Google Cloud Console otwórz stronę HomeGraph API.

    Otwórz stronę HomeGraph API
  2. Wybierz projekt, który odpowiada identyfikatorowi projektu smart home.
  3. Kliknij WŁĄCZ.

Tworzenie klucza konta usługi

Aby wygenerować klucz konta usługi z Google Cloud Console:

Uwaga: upewnij się, że podczas wykonywania tych czynności używasz właściwego projektu GCP. Jest to projekt, który odpowiada identyfikatorowi projektu smart home.
  1. W Google Cloud Console otwórz stronę Konta usługi.

    Otwórz stronę Konta usługi.

    Zanim przejdziesz na stronę Konta usługi, może być konieczne wybranie projektu.

  2. Kliknij Utwórz konto usługi.

  3. W polu Nazwa konta usługi wpisz nazwę.

  4. W polu Identyfikator konta usługi wpisz identyfikator.

  5. W polu Opis konta usługi wpisz opis.

  6. Kliknij Utwórz i kontynuuj.

  7. W menu Rola wybierz Konta usługi > Twórca tokenów tożsamości OpenID Connect konta usługi.

  8. Kliknij Dalej.

  9. Kliknij Gotowe.

  10. Na liście kont usługi wybierz utworzone konto usługi i wybierz Zarządzaj kluczami z menu Działania.

  11. Kliknij Dodaj klucz > Utwórz nowy klucz.

  12. W polu Typ klucza wybierz opcję JSON.

  13. Kliknij Utwórz. Na komputer zostanie pobrany plik JSON zawierający klucz.

Szczegółowe instrukcje i informacje o tworzeniu kluczy kont usługi znajdziesz w artykule Tworzenie i usuwanie kluczy kont usługi w witrynie pomocy konsoli Google Cloud.

Wywoływanie interfejsu API

HTTP

Interfejs Home Graph API udostępnia punkt końcowy HTTP.

  1. Użyj pobranego pliku JSON konta usługi, aby utworzyć token internetowy JSON Token (JWT). Więcej informacji znajdziesz w artykule Uwierzytelnianie za pomocą konta usługi.
  2. Uzyskaj token dostępu OAuth 2.0 z https://www.googleapis.com/auth/homegraph zakresem za pomocą oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Utwórz żądanie JSON z identyfikatorem agentUserId. Oto przykładowe żądanie JSON dotyczące synchronizacji żądań:
  5. {
      "agentUserId": "user-123"
    }
  6. Połącz żądanie JSON synchronizacji żądań i token w żądaniu HTTP POST request do punktu końcowego Google Home Graph. Oto przykład, jak wysłać żądanie w wierszu poleceń za pomocą curl na potrzeby testu:
  7. curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \
      -H "Content-Type: application/json" \
      -d @request-body.json \
      "https://homegraph.googleapis.com/v1/devices:requestSync"
    

gRPC

Interfejs Home Graph API udostępnia punkt końcowy gRPC.

  1. Pobierz definicję usługi buforów protokołu dla interfejsu Home Graph API.
  2. Postępuj zgodnie z dokumentacją dla deweloperów gRPC, aby wygenerować stuby klienta w jednym z obsługiwanych języków.
  3. Wywołaj metodę RequestSync.

Node.js

Biblioteka klienta interfejsów Google API dla Node.js udostępnia powiązania z interfejsem Home Graph API.

  1. Zainicjuj usługę google.homegraph za pomocą domyślnego uwierzytelniania aplikacji.
  2. Wywołaj metodę requestSync za pomocą RequestSyncDevicesRequest. Zwraca ona Promise z pustą RequestSyncDevicesResponse.
const homegraphClient = homegraph({
  version: 'v1',
  auth: new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/homegraph'
  })
});

const res = await homegraphClient.devices.requestSync({
  requestBody: {
    agentUserId: 'PLACEHOLDER-USER-ID',
    async: false
  }
});
    

Java

Biblioteka klienta interfejsu HomeGraph API dla języka Java udostępnia powiązania z interfejsem Home Graph API.

  1. Zainicjuj HomeGraphApiService za pomocą domyślnych uwierzytelnień aplikacji.
  2. Wywołaj metodę requestSync za pomocą RequestSyncDevicesRequest. Zwraca ona pustą ReportStateAndNotificationResponse.
// Get Application Default credentials.
GoogleCredentials credentials =
    GoogleCredentials.getApplicationDefault()
        .createScoped(List.of("https://www.googleapis.com/auth/homegraph"));

// Create Home Graph service client.
HomeGraphService homegraphService =
    new HomeGraphService.Builder(
            GoogleNetHttpTransport.newTrustedTransport(),
            GsonFactory.getDefaultInstance(),
            new HttpCredentialsAdapter(credentials))
        .setApplicationName("HomeGraphExample/1.0")
        .build();

// Request sync.
RequestSyncDevicesRequest request =
    new RequestSyncDevicesRequest().setAgentUserId("PLACEHOLDER-USER-ID").setAsync(false);
homegraphService.devices().requestSync(request);
    

Odpowiedzi na błędy

Podczas wywoływania synchronizacji żądań możesz otrzymać jedną z tych odpowiedzi na błędy. Te odpowiedzi mają postać kodów stanu HTTP.

  • 400 Bad Request – serwer nie mógł przetworzyć żądania wysłanego przez klienta z powodu nieprawidłowej składni. Typowe przyczyny to nieprawidłowy format JSON lub użycie wartości null zamiast "" w przypadku wartości ciągu znaków.
  • 403 Forbidden – serwer nie mógł przetworzyć żądania dla danego agentUserId z powodu błędu podczas odświeżania tokena. Upewnij się, że punkt końcowy protokołu OAuth prawidłowo odpowiada na żądania tokena odświeżania, i sprawdź stan połączenia konta użytkownika.
  • 404 Not Found – nie udało się znaleźć żądanego zasobu, ale może on być dostępny w przyszłości. Zwykle oznacza to, że konto użytkownika nie jest połączone z Google lub że otrzymaliśmy nieprawidłowy identyfikator agentUserId. Upewnij się, że identyfikator agentUserId jest zgodny z wartością podaną w Twojej odpowiedzi SYNC i że prawidłowo obsługujesz intencje DISCONNECT.
  • 429 Too Many Requests – przekroczono maksymalną liczbę równoczesnych żądań synchronizacji dla danego agentUserId. Wywołujący może wysłać tylko 1 równoczesne żądanie synchronizacji, chyba że flaga async jest ustawiona na true.