בעזרת JavaScript Consumer SDK, אפליקציית הצרכן יכולה להציג במפה מבוססת-אינטרנט את המיקום של כלי רכב ומיקומים אחרים שיש בהם עניין ב-Fleet Engine. כך המשתמשים הצרכנים יכולים לראות את התקדמות המשלוחים שלהם. במדריך הזה אנו מביאים בחשבון שכבר הגדרתם את Fleet Engine עם הפרויקט ועם מפתחות ה-API המשויכים שלו ב-Google Cloud. לפרטים נוספים, ראו Fleet Engine.
כדי להגדיר את JavaScript Consumer SDK:
הפעלת Maps JavaScript API
מפעילים את Maps JavaScript API בפרויקט במסוף Google Cloud שבו משתמשים במכונה של Fleet Engine. פרטים נוספים זמינים במאמר הפעלת ממשקי API במסמכי העזרה של Maps JavaScript API.
הגדרת הרשאה
בקריאות לשיטות API מסביבות עם רמת אמון נמוכה, מערכת Fleet Engine דורשת שימוש באסימוני JWT (JSON Web Tokens) בחתימה של חשבון שירות מתאים. סביבות עם רמת אמון נמוכה כוללות סמארטפונים ודפדפנים. ה-JWT מגיע בשרת, שהוא סביבה מהימנה לגמרי. ה-JWT נחתם, מוצפן ומוענק ללקוח לצורך אינטראקציות עתידיות עם השרת, עד שתוקף האסימון יפוג או שהוא כבר לא יהיה תקף.
הקצה העורפי צריך לבצע אימות והרשאה מול Fleet Engine באמצעות מנגנונים רגילים של Application Default Credentials. חשוב להשתמש באסימוני JWT שנחתמו על ידי חשבון שירות מתאים. לרשימת התפקידים של חשבונות השירות, ראו תפקידי חשבון השירות של Fleet Engine בקטע יסודות של Fleet Engine.
אפליקציית הצרכן צריכה לאמת את משתמשי הקצה בתפקידdelivery_consumer
מהפרויקט ב-Google Cloud כדי להחזיר רק מידע ספציפי לצרכן. כך, מערכת Fleet Engine מסננת את כל המידע האחר בתשובות ומוחקת אותו. לדוגמה, במהלך משימה של זמן לא זמין, לא מתבצע שיתוף של פרטי המיקום עם משתמש קצה. למידע נוסף, קראו את המאמר תפקידים של חשבונות שירות לגבי משימות מתוזמנות.
לעומת זאת, הקצה העורפי צריך לבצע אימות ואישור מול Fleet Engine באמצעות מנגנונים רגילים של Application Default Credentials.
איך פועלת ההרשאה?
הרשאה עם נתוני Fleet Engine כוללת הטמעה גם בצד השרת וגם בצד הלקוח.
הרשאה בצד השרת
לפני שמגדירים אימות והרשאה באפליקציה מבוססת-האינטרנט, שרת הקצה העורפי צריך להיות מסוגל להנפיק לאפליקציה מבוססת-האינטרנט אסימוני אינטרנט מסוג JSON כדי לקבל גישה ל-Fleet Engine. האפליקציה מבוססת-האינטרנט שולחת את אסימוני ה-JWT האלה יחד עם הבקשות, כך ש-Fleet Engine מזהה את הבקשות כמאומתות ומורשה לגשת לנתונים שבבקשה. להוראות להטמעת JWT בצד השרת, אפשר לעיין בקטע הנפקה של אסימוני אינטרנט מסוג JSON בקטע יסודות של Fleet Engine.
באופן ספציפי, חשוב לזכור את הנקודות הבאות לגבי ה-SDK של JavaScript לצרכן למעקב אחר משלוחים:- הנחיות כלליות להנפקת אסימוני אינטרנט מסוג JSON
- הנחיות JWT למשימות מתוזמנות
- אסימון לדוגמה של אפליקציה לצרכנים
הרשאה מצד הלקוח
כשמשתמשים ב-SDK של צרכן JavaScript, הוא מבקש אסימון מהשרת באמצעות גורם לאחזור אסימוני הרשאה. המערכת עושה זאת אם מתקיים אחד מהמצבים הבאים:
אין טוקן תקף, למשל כש-SDK לא קרא למאחזר בטעינה של דף חדש, או כשהמאחזר לא החזיר טוקן.
פג תוקפו של הטוקן.
תוקף האסימון יפוג תוך דקה.
אחרת, ה-SDK של הצרכן ב-JavaScript משתמש באסימון התקף שכבר הונפקה ולא קורא לשליפה.
יצירת אובייקט לאחזור של אסימון הרשאה
יוצרים את המאחזר של אסימון ההרשאה לפי ההנחיות הבאות:
המאחזר צריך להחזיר מבנה נתונים עם שני שדות, שמוקף ב-
Promise
באופן הבא:מחרוזת
token
.מספר
expiresInSeconds
. התוקף של האסימון יפוג תוך פרק הזמן הזה אחרי האחזור. הגורם שאחראי לאחזור אסימון האימות צריך להעביר את זמן התפוגה בשניות, מהרגע שבו הוא מאחזר את האסימון לספרייה, כפי שמוצג בדוגמה.
המאחזר צריך לקרוא לכתובת URL בשרת שלכם כדי לאחזר אסימון. כתובת ה-URL הזו –
SERVER_TOKEN_URL
– תלויה ביישום הקצה העורפי. כתובת ה-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,
};
}