Die Anfragesynchronisierung löst für alle Google-Nutzer mit Geräten, denen die angegebenen agentUserId
(die Sie in der ursprünglichen SYNC-Anfrage gesendet haben) eine SYNC
-Anfrage an Ihre Auftragsausführung aus. Auf diese Weise können Sie die Geräte der Nutzer aktualisieren, ohne die Verknüpfung der Konten aufzuheben oder sie erneut zu verknüpfen. Alle Nutzer, die mit dieser ID verknüpft sind, erhalten eine SYNC
-Anfrage.
Sie müssen eine SYNC
-Anfrage auslösen:
- Der Nutzer fügt ein neues Gerät hinzu.
- Der Nutzer entfernt ein vorhandenes Gerät.
- Ob der Nutzer ein vorhandenes Gerät umbenennt.
- Du implementierst einen neuen Gerätetyp oder eine neue Eigenschaft oder fügst eine neue Gerätefunktion hinzu.
Erste Schritte
So implementieren Sie die Anfragesynchronisierung:
Google HomeGraph API aktivieren
-
Rufen Sie in der Google Cloud Console die Seite HomeGraph API auf.
Zur Seite „HomeGraph API“ - 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 aus Google Cloud Console zu generieren:
-
Rufen Sie in der Google Cloud Console die Seite Dienstkontoschlüssel erstellen auf.
Zur Seite Dienstkontoschlüssel erstellen - Wählen Sie in der Liste Dienstkonto die Option Neues Dienstkonto aus.
- Geben Sie im Feld Dienstkontoname einen Namen ein.
- Geben Sie im Feld Dienstkonto-ID eine ID ein.
Wählen Sie in der Liste Rolle die Option Dienstkonten > Ersteller von Dienstkonto-Token aus.
Wählen Sie als Schlüsseltyp die Option JSON aus.
- Klicken Sie auf Erstellen. Es wird dann eine JSON-Datei mit Ihrem Schlüssel auf Ihren Computer heruntergeladen.
API aufrufen
HTTP
Die Home Graph API stellt einen HTTP-Endpunkt bereit.
- 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/homegraph
ab: - Erstellen Sie die JSON-Anfrage mit
agentUserId
. Hier ist ein Beispiel für eine JSON-Anfrage für die Synchronisierungsanfrage: - Kombiniere die JSON-Anfrage mit dem Token in deiner HTTP-POST-Anfrage an den Google Home Graph-Endpunkt. Das folgende Beispiel zeigt, wie Sie die Anfrage in der Befehlszeile mit
curl
als Test stellen:
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 stellt einen gRPC-Endpunkt bereit.
- 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 stellt Bindungen für die Home Graph API bereit.
- Initialisieren Sie den
google.homegraph
-Dienst mit den Standardanmeldedaten für Anwendungen. - Rufen Sie die Methode
requestSync
mit RequestSyncDevicesRequest auf. Sie gibt einPromise
mit einer leeren RequestSyncDevicesResponse zurück.
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 enthält Bindungen für die Home Graph API.
- Initialisieren Sie
HomeGraphApiService
mit den Standardanmeldedaten für Anwendungen. - Rufen Sie die Methode
requestSync
mitRequestSyncDevicesRequest
auf. Es wird ein leeresReportStateAndNotificationResponse
zurü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
Beim Aufrufen von Request Sync wird möglicherweise eine der folgenden Fehlermeldungen angezeigt. Diese Antworten werden in Form von HTTP-Statuscodes ausgegeben.
400 Bad Request
: Der Server konnte die vom Client gesendete Anfrage aufgrund einer ungültigen Syntax nicht verarbeiten. Häufige Ursachen sind ein fehlerhaftes JSON-Format oder die Verwendung vonnull
anstelle von „“ für einen Stringwert.403 Forbidden
: Der Server konnte die Anfrage für die angegebeneagentUserId
aufgrund eines Fehlers beim Aktualisieren des Tokens nicht verarbeiten. Prüfe, ob dein OAuth-Endpunkt korrekt auf die Aktualisierung von Tokenanfragen reagiert und den Kontoverknüpfungsstatus des Nutzers prüft.404 Not Found
: Die angeforderte Ressource wurde nicht gefunden, ist aber möglicherweise in Zukunft verfügbar. In der Regel bedeutet das, dass das Nutzerkonto nicht mit Google verknüpft ist oder wir eine ungültigeagentUserId
erhalten haben. Achten Sie darauf, dassagentUserId
mit dem Wert in Ihrer SYNC-Antwort übereinstimmt und DISCONNECT-Intents ordnungsgemäß verarbeitet werden.429 Too Many Requests
: Die maximale Anzahl gleichzeitiger Synchronisierungsanfragen wurde für den angegebenenagentUserId
überschritten. Ein Aufrufer kann nur eine Synchronisierungsanfrage gleichzeitig senden, sofern das Flagasync
nicht auf „true“ gesetzt ist.