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