La sincronizzazione delle richieste attiva una SYNC richiesta al tuo fulfillment per qualsiasi utente Google
con dispositivi associati all'
agentUserId specificato (che hai
inviato nella richiesta SYNC originale). In questo modo, puoi aggiornare i dispositivi degli utenti senza scollegare e ricollegare il loro account. Tutti gli utenti collegati a questo identificatore riceveranno una richiesta SYNC.
Devi attivare una richiesta SYNC:
- Se l'utente aggiunge un nuovo dispositivo.
- Se l'utente rimuove un dispositivo esistente.
- Se l'utente rinomina un dispositivo esistente.
- Se implementi un nuovo tipo di dispositivo, un nuovo tratto o aggiungi una nuova funzionalità del dispositivo.
Inizia
Per implementare la sincronizzazione delle richieste:
Abilita l'API Google HomeGraph
-
Nella Google Cloud Console, vai alla pagina API HomeGraph.
Vai alla pagina dell'API HomeGraph - Seleziona il progetto che corrisponde all'ID del tuo progetto smart home.
- Fai clic su ABILITA.
Crea una chiave dell'account di servizio
Segui queste istruzioni per generare una chiave dell'account di servizio da Google Cloud Console:
-
Nella Google Cloud Console, vai alla pagina Account di servizio.
Vai alla pagina Account di servizio.Prima di accedere alla pagina Account di servizio, potrebbe essere necessario selezionare un progetto.
Fai clic su Crea account di servizio.
Nel campo Nome account di servizio, inserisci un nome.
Nel campo ID account di servizio, inserisci un ID.
Nel campo Descrizione account di servizio, inserisci una descrizione.
Fai clic su Crea e continua.
Dal menu a discesa Ruolo, seleziona Account di servizio > Service Account OpenID Connect Identity Token Creator.
Fai clic su Continua.
Fai clic su Fine.
Seleziona l'account di servizio che hai appena creato dall'elenco degli account di servizio e seleziona Gestisci chiavi dal menu Azioni.
Seleziona Aggiungi chiave > Crea nuova chiave.
In Tipo di chiave, seleziona l'opzione JSON.
Fai clic su Crea. Un file JSON contenente la chiave viene scaricato sul computer.
Chiama l'API
HTTP
L'API HomeGraph fornisce un endpoint HTTP
- Utilizza il file JSON dell'account di servizio scaricato per creare un JSON Web Token (JWT). Per ulteriori informazioni, consulta Autenticazione tramite un account di servizio.
- Ottieni un token di accesso OAuth 2.0 con l'
https://www.googleapis.com/auth/homegraphambito utilizzando oauth2l: - Crea la richiesta JSON con
agentUserId. Ecco una richiesta JSON di esempio per la sincronizzazione delle richieste: - Combina il JSON di sincronizzazione delle richieste e il token nella richiesta HTTP POST
richiesta all'endpoint Google Home Graph. Ecco un esempio di come
effettuare la richiesta nella riga di comando utilizzando
curl, a scopo di test:
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
L'API HomeGraph fornisce un endpoint gRPC
- Scarica la definizione del servizio dei buffer di protocollo per l'API HomeGraph.
- Segui la documentazione per gli sviluppatori di gRPC per generare stub client per una delle lingue supportate.
- Chiama il metodo RequestSync.
Node.js
Il client Node.js delle API di Google fornisce binding per l'API HomeGraph.
- Inizializza il servizio
google.homegraphutilizzando le Credenziali predefinite dell'applicazione. - Chiama il metodo
requestSynccon RequestSyncDevicesRequest. Restituisce unPromisecon un RequestSyncDevicesResponse vuoto.
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
La libreria client dell'API HomeGraph per Java fornisce binding per l'API HomeGraph.
- Inizializza
HomeGraphApiServiceutilizzando le Credenziali predefinite dell'applicazione. - Chiama il
requestSyncmetodo con ilRequestSyncDevicesRequest. Restituisce unReportStateAndNotificationResponsevuoto.
// 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);
Risposte di errore
Quando chiami la sincronizzazione delle richieste, potresti ricevere una delle seguenti risposte di errore. Queste risposte sono sotto forma di codici di stato HTTP.
400 Bad Request: il server non è riuscito a elaborare la richiesta inviata dal client a causa di una sintassi non valida. Le cause comuni includono JSON non validi o l'utilizzo dinullanziché "" per un valore stringa.403 Forbidden- Il server non è riuscito a elaborare la richiesta per ilagentUserIdspecificato a causa di un errore durante l' aggiornamento del token. Assicurati che l'endpoint OAuth risponda correttamente alle richieste di token di aggiornamento e controlla lo stato di collegamento dell'account dell'utente.404 Not Found: la risorsa richiesta non è stata trovata, ma potrebbe essere disponibile in futuro. In genere, questo significa che l'account utente non è collegato a Google o che abbiamo ricevuto unagentUserIdnon valido. Assicurati che ilagentUserIdcorrisponda al valore fornito nella tua SYNC e che gestisci correttamente gli intent DISCONNECT.429 Too Many Requests- è stato superato il numero massimo di richieste di sincronizzazione simultanee per ilagentUserIdspecificato. Un chiamante può inviare una sola richiesta di sincronizzazione simultanea, a meno che il flagasyncnon sia impostato su true.