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