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