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