בקשה לסנכרון

בקשת סנכרון מפעילה בקשת SYNC למילוי הבקשה שלכם לכל משתמש Google עם מכשירים שמשויך אליהם agentUserId שצוין (ששלחתם בבקשת ה-SYNC המקורית). כך אפשר לעדכן את המכשירים של המשתמשים בלי לבטל את הקישור של החשבון שלהם ולקשר אותו מחדש. כל המשתמשים שמקושרים למזהה הזה יקבלו בקשה של SYNC.

צריך להפעיל בקשת SYNC:

  • אם המשתמש מוסיף מכשיר חדש.
  • אם המשתמש מסיר מכשיר קיים.
  • אם המשתמש משנה את השם של מכשיר קיים.
  • אם אתם מטמיעים סוג מכשיר חדש, תכונה חדשה או מוסיפים תכונה חדשה למכשיר.

שנתחיל?

כדי להטמיע את Request Sync, פועלים לפי השלבים הבאים:

הפעלת Google HomeGraph API

  1. ב-Google Cloud Console, נכנסים לדף HomeGraph API.

    כניסה לדף HomeGraph API
  2. בוחרים את הפרויקט שתואם למזהה הפרויקט ב-smart home.
  3. לוחצים על הפעלה.

יצירת מפתח לחשבון שירות

כדי ליצור מפתח לחשבון שירות מ-Google Cloud Console:

הערה: חשוב לוודא שאתם משתמשים בפרויקט הנכון ב-GCP כשאתם מבצעים את השלבים האלה. זה הפרויקט שתואם למזהה הפרויקט smart home.
  1. ב-Google Cloud Console, נכנסים לדף Service accounts.

    נכנסים לדף Service Accounts.

    יכול להיות שתצטרכו לבחור פרויקט לפני שתועברו לדף Service Accounts.

  2. לוחצים על Create service account.

  3. כותבים שם בשדה Service account name.

  4. כותבים מזהה בשדה Service account ID.

  5. כותבים תיאור בשדה Service account description.

  6. לוחצים על יצירה והמשך.

  7. בתפריט הנפתח Role, בוחרים באפשרות Service Accounts > Service Account OpenID Connect Identity Token Creator.

  8. לוחצים על המשך.

  9. לוחצים על סיום.

  10. בוחרים את חשבון השירות שיצרתם מרשימת חשבונות השירות ולוחצים על Manage keys בתפריט Actions.

  11. לוחצים על Add key ואז על Create new key.

  12. ב-Key type, בוחרים באפשרות JSON.

  13. לוחצים על יצירה. קובץ JSON שמכיל את המפתח יורד למחשב.

באתר העזרה של מסוף Google Cloud מוסבר איך יוצרים ומוחקים מפתחות של חשבונות שירות.

שליחת קריאה ל-API

HTTP

‫Home Graph API מספק נקודת קצה (endpoint) של HTTP

  1. משתמשים בקובץ ה-JSON של חשבון השירות שהורדתם כדי ליצור אסימון JWT‏ (JSON Web Token). מידע נוסף זמין במאמר אימות באמצעות חשבון שירות.
  2. מקבלים אסימון גישה מסוג OAuth 2.0 עם ההיקף https://www.googleapis.com/auth/homegraph באמצעות oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. יוצרים את בקשת ה-JSON עם agentUserId. דוגמה לבקשת JSON של Request Sync:
  5. {
      "agentUserId": "user-123"
    }
  6. משלבים את קובץ ה-JSON של בקשת הסנכרון ואת האסימון בבקשת ה-HTTP POST לנקודת הקצה של Google Home Graph. כדי לבדוק את הבקשה, אפשר לשלוח אותה משורת הפקודה באמצעות curl, כמו בדוגמה הבאה:
  7. 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

  1. מורידים את הגדרת השירות של מאגרי האחסון לפרוטוקולים ל-Home Graph API.
  2. פועלים לפי ההוראות בתיעוד למפתחים של gRPC כדי ליצור קטעי קוד חלופי (stub) של לקוח באחת מהשפות הנתמכות.
  3. מפעילים את השיטה RequestSync.

Node.js

לקוח Google APIs Node.js מספק קישורים ל-Home Graph API.

  1. מפעילים את השירות google.homegraph באמצעות Application Default Credentials.
  2. מפעילים את השיטה 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.

  1. מפעילים את HomeGraphApiService באמצעות Application Default Credentials.
  2. מפעילים את ה-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.