Synchronizacja żądań uruchamia żądanie SYNC
dla Twojej realizacji zamówień w przypadku każdego użytkownika Google z urządzeniami, które mają określone konto agentUserId
(wysyłane przez Ciebie w pierwotnym żądaniu SYNC). Dzięki temu możesz aktualizować urządzenia użytkowników bez rozłączania i ponownego łączenia ich kont. Wszyscy użytkownicy powiązani z tym identyfikatorem otrzymają żądanie SYNC
.
Musisz wysłać żądanie SYNC
:
- Jeśli użytkownik doda nowe urządzenie
- Usuwając dotychczasowe urządzenie.
- Jeśli użytkownik zmieni nazwę istniejącego urządzenia.
- Jeśli implementujesz nowy typ urządzenia, przypisujesz mu typ lub dodajesz nową funkcję.
Pierwsze kroki
Aby wdrożyć synchronizację żądań, wykonaj te czynności:
Włącz Google HomeGraph API
-
W: Google Cloud Console , go to the HomeGraph API page.
Otwórz stronę HomeGraph API - Wybierz projekt zgodny z identyfikatorem projektu smart home.
- Kliknij WŁĄCZ.
Tworzenie klucza konta usługi
Aby wygenerować klucz konta usługi z Google Cloud Console, postępuj zgodnie z tymi instrukcjami:
-
W sekcji Google Cloud Console otwórz stronę Utwórz klucz konta usługi.
Otwórz stronę tworzenia klucza konta usługi - Z listy Konto usługi wybierz Nowe konto usługi.
- W polu Nazwa konta usługi wpisz nazwę.
- W polu Identyfikator konta usługi wpisz identyfikator.
Z listy Rola wybierz Konta usługi > Twórca tokenów kont usługi.
W polu Typ klucza wybierz opcję JSON.
- Kliknij Utwórz. Plik JSON zawierający klucz pobrany na Twój komputer.
Wywoływanie interfejsu API
HTTP
Home Graph API udostępnia punkt końcowy HTTP.
- Za pomocą pobranego pliku JSON konta usługi utwórz token sieciowy JSON (JWT). Więcej informacji znajdziesz w artykule Uwierzytelnianie przy użyciu konta usługi.
- Uzyskaj token dostępu OAuth 2.0 z zakresem
https://www.googleapis.com/auth/homegraph
za pomocą oauth2l: - Utwórz żądanie JSON z
agentUserId
. Oto przykładowe żądanie JSON do synchronizacji żądań: - Połącz JSON żądania synchronizacji i token w żądaniu HTTP POST z punktem końcowym Google Home Graph. Oto przykład, jak wykonać żądanie z poziomu wiersza poleceń
curl
:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "agentUserId": "user-123" }
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
Home Graph API udostępnia punkt końcowy gRPC.
- Pobierz definicję usługi buforowania protokołu dla interfejsu Home Graph API.
- Postępuj zgodnie z dokumentacją dla deweloperów gRPC, aby wygenerować namiastki klienta dla jednego z obsługiwanych języków.
- Wywołaj metodę RequestSync.
Node.js
Klient Node.js interfejsu API Google API udostępnia powiązania interfejsu Home Graph API.
- Zainicjuj usługę
google.homegraph
przy użyciu domyślnych danych logowania aplikacji. - Wywołaj metodę
requestSync
za pomocą żądania RequestSyncDevicesRequest. ZwracaPromise
z pustym elementem 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 interfejsu Home Graph API.
- Zainicjuj aplikację
HomeGraphApiService
przy użyciu domyślnych danych logowania aplikacji. - Wywołaj metodę
requestSync
za pomocą metodyRequestSyncDevicesRequest
. Zwraca pusty elementReportStateAndNotificationResponse
.
// 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żesz zobaczyć jedną z poniższych odpowiedzi na błędy. 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. Częstą przyczyną jest zniekształcony kod JSON lub użycie wartościnull
zamiast „” w przypadku wartości ciągu znaków.403 Forbidden
– serwer nie może przetworzyć żądania dla podanegoagentUserId
z powodu błędu podczas odświeżania tokena. Sprawdź, czy punkt końcowy OAuth odpowiada prawidłowo, aby odświeżać żądania tokenów i sprawdzać stan połączenia kont 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 otrzymaliśmy nieprawidłowe żądanieagentUserId
. Sprawdź, czyagentUserId
pasuje do wartości w odpowiedzi SYNC i czy obsługujesz intencje DISCONNECT.429 Too Many Requests
– maksymalna liczba równoczesnych żądań synchronizacji dla danego zasobuagentUserId
została przekroczona. Element wywołujący może wysłać tylko jedno żądanie synchronizacji jednocześnie, chyba że flagaasync
ma wartość Prawda.