הגדרת JavaScript Consumer SDK

באמצעות JavaScript Consumer SDK, אפליקציה למשתמשים יכולה להציג את המיקום של כלי רכב ומיקומים אחרים שמעניינים את המשתמשים, שמתבצע אחריהם מעקב ב-Fleet Engine, במפה מבוססת-אינטרנט. כך המשתמשים הצרכניים יכולים לראות את התקדמות המשלוחים שלהם. במדריך הזה אנחנו מניחים שהגדרתם את Fleet Engine עם פרויקט בענן של Google ומפתחות API שמשויכים אליו. פרטים נוספים זמינים במאמר בנושא Fleet Engine.

כדי להגדיר את JavaScript Consumer SDK, מבצעים את השלבים הבאים:

  1. מפעילים את Maps JavaScript API.
  2. הגדרת הרשאות

הפעלת Maps JavaScript API

מפעילים את Maps JavaScript API בפרויקט ב-מסוף Google Cloud שבו אתם משתמשים עבור מופע Fleet Engine. פרטים נוספים מופיעים במאמר הפעלת ממשקי API במאמרי העזרה של ה-API של Maps JavaScript.

הגדרת הרשאה

ב-Fleet Engine נדרש שימוש בטוקנים של JSON Web‏ (JWT) לקריאות של שיטות API מסביבות עם רמת אמון נמוכה: סמארטפונים ודפדפנים.

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

פרטים חשובים

אפליקציה למשתמשים שלכם צריכה לאמת את משתמשי הקצה באמצעות התפקיד delivery_consumer מפרויקט Google Cloud כדי להחזיר רק מידע שספציפי לצרכנים. בדרך הזו, Fleet Engine מסנן ומצנזר את כל שאר המידע בתשובות. לדוגמה, במהלך משימה של זמינות, לא משותף מידע על מיקום עם משתמש קצה. מידע נוסף על משימות מתוזמנות זמין במאמר תפקידים של חשבונות שירות.

איך פועל תהליך ההרשאה?

ההרשאה לנתוני Fleet Engine כוללת הטמעה בצד השרת ובצד הלקוח.

הרשאה בצד השרת

לפני שמגדירים אימות והרשאה באפליקציה מבוססת-האינטרנט, שרת הבק-אנד צריך להיות מסוגל להנפיק טוקנים של JSON Web לאפליקציה מבוססת-האינטרנט כדי לגשת ל-Fleet Engine. אפליקציות מבוססות-אינטרנט שולחות את ה-JWT האלה עם הבקשות שלהן, כדי שמערכת Fleet Engine תזהה את הבקשות כמאומתות וכבעלות הרשאה לגשת לנתונים בבקשה. הוראות להטמעה של JWT בצד השרת מופיעות במאמר הנפקת אסימוני אינטרנט מסוג JSON בקטע היסודות של Fleet Engine.

בפרט, חשוב לזכור את הנקודות הבאות לגבי JavaScript Consumer SDK למעקב אחר משלוחים:

הרשאה מצד הלקוח

כשמשתמשים ב-SDK של צרכן JavaScript, הוא מבקש טוקן מהשרת באמצעות כלי לאחזור טוקן הרשאה. הוא עושה זאת אם מתקיים אחד מהתנאים הבאים:

  • לא קיים טוקן תקין, למשל אם ה-SDK לא קרא ל-fetcher בטעינת דף חדש, או אם ה-fetcher לא החזיר טוקן.

  • פג תוקפו של הטוקן.

  • האסימון עומד לפוג תוך דקה.

אחרת, JavaScript Consumer SDK משתמש בטוקן הקודם התקף ולא קורא ל-fetcher.

יצירת כלי לאחזור טוקן הרשאה

כדי ליצור את הפונקציה לאחזור אסימון ההרשאה, פועלים לפי ההנחיות הבאות:

  • ה-Fetcher צריך להחזיר מבנה נתונים עם שני שדות, שעטופים ב-Promise באופן הבא:

    • מחרוזת token.

    • מספר expiresInSeconds. תוקף הטוקן יפוג אחרי פרק הזמן הזה אחרי האחזור. הפונקציה להשגת טוקן אימות חייבת לקבוע ערך (pass) של מועד התפוגה בשניות, מהזמן של השגת הטוקן לספרייה, כמו שמוצג בדוגמה.

  • הכלי לאחזור נתונים צריך להפעיל כתובת URL בשרת כדי לאחזר טוקן. כתובת ה-URL הזו – SERVER_TOKEN_URL – תלויה בהטמעה של ה-Backend. כתובת ה-URL הבאה היא של הקצה העורפי של האפליקציה לדוגמה ב-GitHub:

    • https://SERVER_URL/token/delivery_consumer/TRACKING_ID

דוגמה – יצירת כלי לאחזור אסימון אימות

בדוגמאות הבאות אפשר לראות איך יוצרים כלי לאחזור אסימון הרשאה:

JavaScript

async function authTokenFetcher(options) {
  // options is a record containing two keys called
  // serviceType and context. The developer should
  // generate the correct SERVER_TOKEN_URL and request
  // based on the values of these fields.
  const response = await fetch(SERVER_TOKEN_URL);
  if (!response.ok) {
    throw new Error(response.statusText);
  }
  const data = await response.json();
  return {
    token: data.Token,
    expiresInSeconds: data.ExpiresInSeconds
  };
}

TypeScript

function authTokenFetcher(options: {
  serviceType: google.maps.journeySharing.FleetEngineServiceType,
  context: google.maps.journeySharing.AuthTokenContext,
}): Promise<google.maps.journeySharing.AuthToken> {
  // The developer should generate the correct
  // SERVER_TOKEN_URL based on options.
  const response = await fetch(SERVER_TOKEN_URL);
  if (!response.ok) {
    throw new Error(response.statusText);
  }
  const data = await response.json();
  return {
    token: data.token,
    expiresInSeconds: data.ExpiresInSeconds,
  };
}

המאמרים הבאים