בקשת סנכרון מפעילה בקשת SYNC למילוי הבקשה שלכם לכל משתמש Google עם מכשירים שמשויך אליהם agentUserId שצוין (ששלחתם בבקשת ה-SYNC המקורית). כך אפשר לעדכן את המכשירים של המשתמשים בלי לבטל את הקישור של החשבון שלהם ולקשר אותו מחדש. כל המשתמשים שמקושרים למזהה הזה יקבלו בקשה של SYNC.
צריך להפעיל בקשת SYNC:
- אם המשתמש מוסיף מכשיר חדש.
- אם המשתמש מסיר מכשיר קיים.
- אם המשתמש משנה את השם של מכשיר קיים.
- אם אתם מטמיעים סוג מכשיר חדש, תכונה חדשה או מוסיפים תכונה חדשה למכשיר.
שנתחיל?
כדי להטמיע את Request Sync, פועלים לפי השלבים הבאים:
הפעלת Google HomeGraph API
-
ב-Google Cloud Console, נכנסים לדף HomeGraph API.
כניסה לדף HomeGraph API - בוחרים את הפרויקט שתואם למזהה הפרויקט ב-smart home.
- לוחצים על הפעלה.
יצירת מפתח לחשבון שירות
כדי ליצור מפתח לחשבון שירות מ-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
HTTP
Home Graph API מספק נקודת קצה (endpoint) של HTTP
- משתמשים בקובץ ה-JSON של חשבון השירות שהורדתם כדי ליצור אסימון JWT (JSON Web Token). מידע נוסף זמין במאמר אימות באמצעות חשבון שירות.
- מקבלים אסימון גישה מסוג OAuth 2.0 עם ההיקף
https://www.googleapis.com/auth/homegraphבאמצעות oauth2l: - יוצרים את בקשת ה-JSON עם
agentUserId. דוגמה לבקשת JSON של Request Sync: - משלבים את קובץ ה-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: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:requestSync"
gRPC
Home Graph API מספק נקודת קצה (endpoint) של gRPC
- מורידים את הגדרת השירות של מאגרי האחסון לפרוטוקולים ל-Home Graph API.
- פועלים לפי ההוראות בתיעוד למפתחים של gRPC כדי ליצור קטעי קוד חלופי (stub) של לקוח באחת מהשפות הנתמכות.
- מפעילים את השיטה RequestSync.
Node.js
לקוח Google APIs Node.js מספק קישורים ל-Home Graph API.
- מפעילים את השירות
google.homegraphבאמצעות Application Default Credentials. - מפעילים את השיטה
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 } });
Java
ספריית הלקוח של 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);
תגובות שגיאה
יכול להיות שתקבלו את אחת מהודעות השגיאה הבאות כשתשלחו בקשה לסנכרון. התגובות האלה מגיעות בצורה של קודי סטטוס של 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.