Poproś o synchronizację

1

Żądanie synchronizacji aktywuje żądanie SYNC w przypadku każdego użytkownika Google z urządzeniami, z którymi powiązane jest agentUserId (wysłane w oryginalnym żądaniu SYNC). Pozwala to aktualizować urządzenia użytkowników bez rozłączania i ponownego łączenia kont. Wszyscy użytkownicy powiązani z tym identyfikatorem otrzymają żądanie SYNC.

Musisz wywołać żądanie SYNC:

  • Jeśli użytkownik doda nowe urządzenie
  • Jeśli użytkownik usunie już używane urządzenie.
  • Jeśli użytkownik zmieni nazwę istniejącego urządzenia.
  • jeśli wdrożysz nowy typ lub nową cechę urządzenia albo dodasz nową funkcję;

Rozpocznij

Aby wdrożyć synchronizację żądań, wykonaj te czynności:

Włączanie interfejsu Google HomeGraph API

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

    Otwórz stronę interfejsu HomeGraph API
  2. Wybierz projekt, który pasuje do identyfikatora projektu smart home.
  3. Kliknij WŁĄCZ.

Tworzenie klucza konta usługi

Aby wygenerować klucz konta usługi z Google Cloud Console, wykonaj te instrukcje:

Uwaga: upewnij się, że podczas wykonywania tych czynności używasz właściwego projektu GCP. To jest projekt, który pasuje do identyfikatora projektu smart home.
  1. W Google Cloud Console otwórz stronę Utwórz klucz konta usługi.

    Otwórz stronę tworzenia klucza konta usługi
  2. Z listy Konto usługi wybierz Nowe konto usługi.
  3. W polu Nazwa konta usługi wpisz nazwę.
  4. W polu Identyfikator konta usługi wpisz identyfikator.
  5. Z listy Rola wybierz Konta usługi > Twórca tokenów konta usługi.

  6. W polu Typ klucza wybierz opcję JSON.

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

Wywoływanie interfejsu API

HTTP

Interfejs Home Graph API zapewnia punkt końcowy HTTP

  1. Użyj pobranego pliku JSON konta usługi, aby utworzyć token sieciowy JSON (JWT). Więcej informacji znajdziesz w artykule o uwierzytelnianiu za pomocą konta usługi.
  2. Uzyskaj token dostępu OAuth 2.0 z zakresem https://www.googleapis.com/auth/homegraph za pomocą oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Utwórz żądanie JSON za pomocą agentUserId. Oto przykładowe żądanie synchronizacji żądań w formacie JSON:
  5. {
      "agentUserId": "user-123"
    }
    
  6. Połącz żądanie synchronizacji w formacie JSON z tokenem w żądaniu HTTP POST z punktem końcowym Google Home Graph. Oto przykład wykonania żądania w wierszu poleceń przy użyciu interfejsu curl w ramach 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 zapewnia punkt końcowy gRPC

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

Node.js

Klient Node.js interfejsów API Google zapewnia powiązania dla interfejsu Home Graph API.

  1. Zainicjuj usługę google.homegraph przy użyciu domyślnych danych logowania aplikacji.
  2. Wywołaj metodę requestSync za pomocą RequestSyncDevicesRequest. Zwraca Promise z pustą odpowiedzią 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 for Java zawiera powiązania dla interfejsu Home Graph API.

  1. Zainicjuj HomeGraphApiService przy użyciu domyślnych danych logowania aplikacji.
  2. Wywołaj metodę requestSync za pomocą funkcji RequestSyncDevicesRequest. Zwraca pustą wartość 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 żądania synchronizacji może wystąpić jeden z poniższych błędów. Odpowiedzi te mają postać kodów stanu HTTP.

  • 400 Bad Request – serwer nie może przetworzyć żądania wysłanego przez klienta z powodu nieprawidłowej składni. Typowe przyczyny to nieprawidłowy format JSON lub użycie null zamiast „” jako wartości ciągu znaków.
  • 403 Forbidden – serwer nie może przetworzyć żądania dotyczącego danego elementu agentUserId z powodu błędu podczas odświeżania tokena. Upewnij się, że punkt końcowy OAuth prawidłowo reaguje na żądania tokenów odświeżania, i sprawdź stan połączenia kont użytkownika.
  • 404 Not Found – nie udało się znaleźć żądanego zasobu, ale może być dostępny w przyszłości. Zwykle oznacza to, że konto użytkownika nie jest połączone z Google lub otrzymaliśmy nieprawidłowy agentUserId. Upewnij się, że agentUserId jest zgodny z wartością w odpowiedzi SYNC i że poprawnie obsługujesz intencje DISCONNECT.
  • 429 Too Many Requests – została przekroczona maksymalna liczba równoczesnych żądań synchronizacji dla: agentUserId. Element wywołujący może wysłać tylko jedno żądanie synchronizacji, chyba że flaga async ma wartość Prawda.