בקשת סנכרון מפעילה בקשה מסוג SYNC
לשירות ההנפקה שלכם לכל משתמש Google שיש לו מכשירים שמשויכים אליהם agentUserId
שציינתם (ששלחתם בבקשת ה-SYNC המקורית). כך תוכלו לעדכן את המכשירים של המשתמשים בלי לבטל את הקישור של החשבון שלהם ולקשר אותו מחדש. כל המשתמשים שמקושרים למזהה הזה יקבלו בקשה מסוג SYNC
.
צריך להפעיל בקשה מסוג SYNC
:
- אם המשתמש מוסיף מכשיר חדש.
- אם המשתמש מסיר מכשיר קיים.
- אם המשתמש משנה את השם של מכשיר קיים.
- אם מטמיעים סוג מכשיר חדש, מאפיין חדש או מוסיפים תכונה חדשה למכשיר.
בוא נתחיל
כדי להטמיע את התכונה 'סנכרון בקשות':
הפעלת Google HomeGraph API
-
ב-Google Cloud Console, עוברים לדף HomeGraph API.
כניסה לדף HomeGraph API - בוחרים את הפרויקט שתואם למזהה הפרויקט smart home.
- לוחצים על ENABLE.
יצירת מפתח לחשבון שירות
פועלים לפי ההוראות הבאות כדי ליצור מפתח לחשבון שירות מה-Google Cloud Console:
-
בדף Google Cloud Console, עוברים לדף Service accounts.
כניסה לדף Service Accounts.יכול להיות שתצטרכו לבחור פרויקט לפני שתופנו לדף Service Accounts.
לוחצים על
Create service account.כותבים שם בשדה Service account name.
בשדה Service account ID, מזינים מזהה.
כותבים תיאור בשדה Service account description.
לוחצים על יצירה והמשך.
בתפריט הנפתח Role, בוחרים באפשרות Service Accounts > Service Account OpenID Connect Identity Token Creator.
לוחצים על המשך.
לוחצים על סיום.
בוחרים את חשבון השירות שיצרתם ברשימת חשבונות השירות, ואז בוחרים באפשרות Manage keys בתפריט Actions של
.בוחרים באפשרות Add key (הוספת מפתח) > Create new key (יצירת מפתח חדש).
בKey type, בוחרים באפשרות JSON.
לוחצים על יצירה. קובץ JSON שמכיל את המפתח שלכם יוריד למחשב.
קריאה ל-API
Home Graph API מספק נקודת קצה (endpoint) של HTTP
- משתמשים בקובץ ה-JSON של חשבון השירות שהורדתם כדי ליצור אסימון אינטרנט מסוג JSON (JWT). מידע נוסף זמין במאמר אימות באמצעות חשבון שירות.
- מקבלים אסימון גישה מסוג OAuth 2.0 בהיקף
https://www.googleapis.com/auth/homegraph
באמצעות oauth2l: - יוצרים את בקשת ה-JSON באמצעות
agentUserId
. דוגמה לבקשת JSON עבור סנכרון בקשות: - משלבים את ה-JSON של בקשת הסנכרון ואת האסימון בבקשת ה-HTTP POST לנקודת הקצה של Google Home Graph. דוגמה לבקשת הבדיקה ששולחים בשורת הפקודה באמצעות
curl
:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "agentUserId": "user-123" }
curl -X POST -H "Authorization: BearerACCESS_TOKEN " \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:requestSync"
Home Graph API מספק נקודת קצה (endpoint) של gRPC
- מקבלים את הגדרת השירות של Protocol Buffers עבור Home Graph API.
- פועלים לפי התיעוד למפתחים של gRPC כדי ליצור stubs של לקוח לאחת מהשפות הנתמכות.
- קוראים לשיטה RequestSync.
לקוח Google APIs ל-Node.js מספק קישורים ל-Home Graph API.
- מאתחלים את השירות
google.homegraph
באמצעות Application Default Credentials. - קוראים ל-method
requestSync
עם RequestSyncDevicesRequest. הפונקציה מחזירהPromise
עם 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 } });
ספריית הלקוח של HomeGraph API ל-Java מספקת קישורים ל-Home Graph API.
- מאתחלים את
HomeGraphApiService
באמצעות Application Default Credentials. - קוראים ל-method
requestSync
עםRequestSyncDevicesRequest
. הפונקציה מחזירהReportStateAndNotificationResponse
ריק.
// 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);
תגובות שגיאה
יכול להיות שתקבלו אחת מהתגובות הבאות כשתקראו ל-Request Sync. התשובות האלה מגיעות בצורת קודי סטטוס HTTP.
400 Bad Request
– השרת לא הצליח לעבד את הבקשה שנשלחה מהלקוח בגלל תחביר לא חוקי. סיבות נפוצות כוללות JSON בפורמט שגוי או שימוש ב-null
במקום ב-"" עבור ערך מחרוזת.403 Forbidden
– השרת לא הצליח לעבד את הבקשה עבורagentUserId
נתון בגלל שגיאה במהלך הרענון של האסימון. מוודאים שנקודת הקצה של OAuth מגיבה בצורה תקינה לבקשות לרענון האסימון, ובודקים את סטטוס קישור החשבון של המשתמש.404 Not Found
– לא נמצא המשאב המבוקש, אבל יכול להיות שהוא יהיה זמין בעתיד. בדרך כלל, המשמעות היא שחשבון המשתמש לא מקושר ל-Google או שקיבלנו ערךagentUserId
לא חוקי. חשוב לוודא שהערך שלagentUserId
תואם לערך שצוין בתגובה ל-SYNC, ושאתם מטפלים כראוי בכוונות DISCONNECT.429 Too Many Requests
– חרגתם מהמספר המקסימלי של בקשות סנכרון בו-זמניות עבורagentUserId
הנתון. מבצע הקריאה החוזרת יכול להנפיק רק בקשת סנכרון אחת בו-זמנית, אלא אם הדגלasync
מוגדר כ-true.