Durch „Request Sync“ wird eine SYNC
-Anfrage an Ihren Fulfillment-Endpunkt für alle Google-Nutzer mit Geräten ausgelöst, denen die angegebene agentUserId
zugeordnet ist (die Sie in der ursprünglichen SYNC-Anfrage gesendet haben). So können Sie die Geräte der Nutzer aktualisieren, ohne die Verknüpfung ihres Kontos aufzuheben und wiederherzustellen. Alle Nutzer, die mit dieser Kennung verknüpft sind, 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 Sie einen neuen Gerätetyp oder ein neues Merkmal implementieren oder eine neue Gerätefunktion hinzufügen.
Jetzt starten
So implementieren Sie „Synchronisierung anfordern“:
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 ü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 von OpenID Connect-Identitätstokens für Dienstkonten 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
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.
- Erstellen Sie mit der heruntergeladenen JSON-Datei für das Dienstkonto ein JSON Web Token (JWT). 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 „Synchronisierung anfordern“: - Kombiniere das JSON für die Synchronisierungsanfrage und das Token in deiner HTTP-POST-Anfrage an den Google Home Graph-Endpunkt. Hier ein Beispiel dafür, 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 bietet einen gRPC-Endpunkt.
- Rufen Sie die Protocol Buffers-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
requestSync
mit RequestSyncDevicesRequest auf. Es wird einPromise
mit 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
HomeGraphApiService
mit 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“ können Sie eine der folgenden Fehlerantworten erhalten. Diese Antworten werden in Form von HTTP-Statuscodes gesendet.
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 vonnull
anstelle von „“ für einen Stringwert.403 Forbidden
: Der Server konnte die Anfrage für den angegebenenagentUserId
aufgrund eines Fehlers beim Aktualisieren des Tokens nicht verarbeiten. Achten Sie darauf, dass Ihr OAuth-Endpunkt korrekt auf Anfragen für Aktualisierungstokens reagiert, und prüfen Sie den Status der Kontoverknüpfung des Nutzers.404 Not Found
– Die angeforderte Ressource wurde nicht gefunden, ist aber möglicherweise in Zukunft verfügbar. Das bedeutet in der Regel, dass das Nutzerkonto nicht mit Google verknüpft ist oder wir eine ungültigeagentUserId
erhalten haben. Achte darauf, dassagentUserId
mit dem in deiner SYNC-Antwort angegebenen Wert übereinstimmt und dass du DISCONNECT-Intents richtig verarbeitest.429 Too Many Requests
– Die maximale Anzahl gleichzeitiger Synchronisierungsanfragen für die angegebeneagentUserId
wurde überschritten. Ein Aufrufer darf nur eine gleichzeitige Synchronisierungsanfrage stellen, es sei denn, das Flagasync
ist auf „true“ gesetzt.