„Request Sync“ löst eine SYNC-Anfrage an deine Auftragsausführung für alle Google-Nutzer mit Geräten aus, denen die angegebene agentUserId zugeordnet ist (die du in der ursprünglichen SYNC-Anfrage gesendet hast). So können Sie die Geräte von Nutzern aktualisieren, ohne die Verknüpfung mit ihrem Konto aufzuheben und wiederherzustellen. Alle mit dieser Kennung verknüpften Nutzer erhalten eine SYNC-Anfrage.
Sie müssen eine SYNC-Anfrage auslösen:
- Wenn der Nutzer ein neues Gerät hinzufügt.
- Wenn der Nutzer ein vorhandenes Gerät entfernt.
- Wenn der Nutzer ein vorhandenes Gerät umbenennt.
- Wenn du einen neuen Gerätetyp oder ein neues Attribut implementierst oder eine neue Gerätefunktion hinzufügst.
Jetzt starten
So implementierst du die Synchronisierungsanfrage:
Google HomeGraph API aktivieren
-
Rufen Sie in der Google Cloud Console die Seite HomeGraph API auf.
Zur HomeGraph API-Seite - Wählen Sie das Projekt aus, das Ihrer smart home-Projekt-ID entspricht.
- Klicken Sie auf AKTIVIEREN.
Dienstkontoschlüssel erstellen
Folgen Sie dieser Anleitung, um einen Dienstkontoschlüssel über die Google Cloud Console zu generieren:
-
Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.
Zur Seite „Dienstkonten“Möglicherweise müssen Sie ein Projekt auswählen, bevor Sie zur Seite „Dienstkonten“ weitergeleitet werden.
Klicken Sie auf Dienstkonto erstellen.
Geben Sie im Feld Dienstkontoname einen Namen ein.
Geben Sie im Feld Dienstkonto-ID eine ID ein.
Geben Sie im Feld Dienstkontobeschreibung eine Beschreibung ein.
Klicken Sie auf Erstellen und fortfahren.
Wählen Sie im Drop-down-Menü Rolle die Option Dienstkonten > Ersteller des OpenID Connect-Identitätstokens für das Dienstkonto aus.
Klicken Sie auf Weiter.
Klicken Sie auf Fertig.
Wählen Sie das gerade erstellte Dienstkonto aus der Liste der Dienstkonten aus und wählen Sie im Menü Aktionen die Option Schlüssel verwalten aus.
Wählen Sie Schlüssel hinzufügen > Neuen Schlüssel erstellen aus.
Wählen Sie als Schlüsseltyp die Option JSON aus.
Klicken Sie auf Erstellen. Eine JSON-Datei mit Ihrem Schlüssel wird auf Ihren Computer heruntergeladen.
API aufrufen
HTTP
Die Home Graph API bietet einen HTTP-Endpunkt,
- Verwenden Sie die heruntergeladene JSON-Datei des Dienstkontos, um ein JSON Web Token (JWT) zu erstellen. Weitere Informationen finden Sie unter Authentifizierung mit einem Dienstkonto.
- Rufen Sie mit oauth2l ein OAuth 2.0-Zugriffstoken mit dem Bereich
https://www.googleapis.com/auth/homegraphab: - Erstellen Sie die JSON-Anfrage mit dem
agentUserId. Hier ist ein Beispiel für eine JSON-Anfrage für „Request Sync“: - Kombiniere die JSON-Datei für die Synchronisierungsanfrage und das Token in deiner HTTP-POST-Anfrage an den Google Home Graph-Endpunkt. Hier ein Beispiel für eine Testanfrage in der Befehlszeile mit
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
Die Home Graph API bietet einen gRPC-Endpunkt.
- Rufen Sie die Protokollzwischenspeicher-Dienstdefinition für die Home Graph API ab.
- Folgen Sie der gRPC-Entwicklerdokumentation, um Client-Stubs für eine der unterstützten Sprachen zu generieren.
- Rufen Sie die Methode RequestSync auf.
Node.js
Der Google APIs Node.js-Client bietet Bindungen für die Home Graph API.
- Initialisieren Sie den
google.homegraph-Dienst mit Standardanmeldedaten für Anwendungen. - Rufen Sie die Methode
requestSyncmit der RequestSyncDevicesRequest auf. Es wird einPromisemit einer leeren RequestSyncDevicesResponse zurückgegeben.
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
Die HomeGraph API-Clientbibliothek für Java bietet Bindungen für die Home Graph API.
- Initialisieren Sie die
HomeGraphApiServicemit Standardanmeldedaten für Anwendungen. - Rufen Sie die Methode
requestSyncmit demRequestSyncDevicesRequestauf. Es wird ein leeresReportStateAndNotificationResponsezurückgegeben.
// 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);
Fehlerantworten
Wenn du „Request Sync“ aufrufst, erhältst du möglicherweise eine der folgenden Fehlerantworten. Diese Antworten werden in Form von HTTP-Statuscodes zurückgegeben.
400 Bad Request: Der Server konnte die vom Client gesendete Anfrage aufgrund einer ungültigen Syntax nicht verarbeiten. Häufige Ursachen sind fehlerhaftes JSON oder die Verwendung vonnullanstelle von „“ für einen Stringwert.403 Forbidden: Der Server konnte die Anfrage für die angegebeneagentUserIdaufgrund eines Fehlers beim Aktualisieren des Tokens nicht verarbeiten. Achte darauf, dass dein OAuth-Endpunkt korrekt auf Anfragen zur Aktualisierungstoken reagiert, und prüfe den Status der Kontoverknüpfung des Nutzers.404 Not Found: Die angeforderte Ressource wurde nicht gefunden, ist aber möglicherweise in Zukunft verfügbar. In der Regel bedeutet dies, dass das Nutzerkonto nicht mit Google verknüpft ist oder wir eine ungültigeagentUserIderhalten haben. Achte darauf, dass der Wert vonagentUserIdmit dem Wert in deiner SYNC-Antwort übereinstimmt und dass du DISCONNECT-Intents richtig verarbeitest.429 Too Many Requests: Die maximale Anzahl gleichzeitiger Synchronisierungsanfragen für die angegebeneagentUserIdwurde überschritten. Ein Aufrufer kann nur eine gleichzeitige Synchronisierungsanfrage senden, es sei denn, das Flagasyncist auf „true“ gesetzt.