使用 JavaScript 機群追蹤程式庫前, 熟悉並設定了 Fleet Engine。詳情請參閱 Fleet Engine。
本文件將說明如何啟用 和 Fleet Engine 的網頁應用程式向 Fleet Engine 發出的要求 正確設定正確的授權權杖 在地圖上追蹤車輛。
設定授權
Fleet Engine 必須使用 適用於來自 low-trust 的 API 方法呼叫的適當服務帳戶 環境。低信任的環境包括智慧型手機和瀏覽器。JWT 起源於您的伺服器,這也是值得信賴的環境JWT 簽署、加密並傳遞至用戶端,以供後續伺服器使用 互動,直到過期或不再有效。
您的後端應使用 標準的應用程式預設憑證機制。廠牌 請務必使用適當服務帳戶簽署的 JWT。換 服務帳戶角色清單,請參閱 Fleet Engine 服務帳戶角色 詳情請參閱 Fleet Engine 基本概念一文。
授權程序如何運作?
使用 Fleet Engine 資料進行授權時,涉及伺服器端和用戶端 。
伺服器端授權
在機群追蹤應用程式中設定授權之前,後端 伺服器必須能夠提供 JSON Web Token因此 Fleet Engine 將來自您應用程式的要求視為已取得授權,能夠存取應用程式 要求中的資料如需伺服器端 JWT 實作的操作說明,請參閱 在「Fleet Engine Essentials」下方發出 JSON Web Token。
如要在實作機群追蹤功能時從伺服器產生權杖,請參閱 包括:- 核發 JSON Web Token 的一般指南,包括 隨選行程和排程工作的專區
- 隨選行程:後端伺服器作業的符記範例
- 排程工作:用於追蹤機群所有任務和車輛的權杖範例
用戶端授權
使用 JavaScript 機群追蹤程式庫時,系統會透過 授權權杖擷取工具系統會在符合下列任一條件時執行此動作:
沒有有效的憑證,例如 SDK 未在 載入新的網頁,或是擷取程式未傳回權杖時。
權杖已過期。
憑證會在一分鐘內到期。
否則,JavaScript 機群追蹤程式庫會使用先前核發的有效權杖, 呼叫擷取程式
建立授權權杖擷取工具
按照下列指南建立授權權杖擷取工具:
擷取器必須傳回兩個欄位的資料結構,並以
Promise
,如下所示:字串
token
。數字
expiresInSeconds
。權杖的有效期限為這個時長 擷取。驗證權杖擷取工具必須及時 從擷取到資料庫的時間 (以秒為單位),如圖所示 這個例子
擷取器應呼叫伺服器上的網址以擷取憑證。這個 網址:
SERVER_TOKEN_URL
視後端實作而定。 以下範例網址是 GitHub 上的範例應用程式後端:https://SERVER_URL/token/fleet_reader
範例:建立授權權杖擷取程式
下列範例說明如何建立授權權杖擷取程式:
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,
};
}