設定 JavaScript Consumer SDK

透過 JavaScript Consumer SDK,您的消費者應用程式可以在網路地圖上顯示車輛位置和 Fleet Engine 追蹤的其他感興趣地點。這樣一來,消費者使用者就能查看貨物運送進度。本指南假設您已設定 Fleet Engine 及其相關聯的 Google Cloud 專案和 API 金鑰。詳情請參閱「Fleet Engine」。

您可以按照下列步驟設定 JavaScript Consumer SDK:

  1. 啟用 Maps JavaScript API
  2. 設定授權

啟用 Maps JavaScript API

在您用於 Fleet Engine 例項的 Google Cloud 控制台專案中啟用 Maps JavaScript API。詳情請參閱 Maps JavaScript API 說明文件中的「啟用 API」。

設定授權

Fleet Engine 要求使用 JSON Web Token (JWT) 來呼叫來自信任程度較低的環境 (智慧型手機和瀏覽器) 的 API 方法。

JWT 會在您的伺服器上產生,並經過簽署和加密,然後傳遞至用戶端,以便在後續的伺服器互動中使用,直到過期或不再有效為止。

重要詳細資料

消費者應用程式應使用 Google Cloud 專案的 delivery_consumer 角色驗證使用者,以便只傳回消費者專屬資訊。如此一來,Fleet Engine 就能篩選並遮蓋回應中的所有其他資訊。舉例來說,在無法使用服務的任務期間,系統不會與使用者分享任何位置資訊。如要瞭解排程工作任務的服務帳戶角色,請參閱服務帳戶角色

授權的運作方式為何?

使用 Fleet Engine 資料進行授權時,必須同時在伺服器端和用戶端實作。

伺服器端授權

在您在以網頁為基礎的應用程式中設定驗證和授權之前,後端伺服器必須能夠向以網頁為基礎的應用程式核發 JSON Web Token,以便存取 Fleet Engine。您的網路應用程式會隨要求傳送這些 JWT,讓 Fleet Engine 將要求視為已驗證,並授權存取要求中的資料。如需伺服器端 JWT 實作說明,請參閱「Fleet Engine 重點」一節中的「發出 JSON Web Token」。

具體來說,請留意以下 JavaScript Consumer SDK 的追蹤貨件功能:

用戶端授權

使用 JavaScript Consumer SDK 時,SDK 會使用授權權杖擷取器向伺服器要求權杖。在下列任一情況下,系統就會執行這項操作:

  • 沒有有效的權杖,例如 SDK 在載入新網頁時未呼叫擷取器,或是擷取器未傳回權杖。

  • 權杖已過期。

  • 權杖即將在 1 分鐘內到期。

否則,JavaScript Consumer SDK 會使用先前核發的有效權杖,且不會呼叫擷取器。

建立授權權杖擷取工具

請按照下列規範建立授權權杖擷取器:

  • 擷取器必須傳回具有兩個欄位的資料結構,並以 Promise 包裝,如下所示:

    • 字串 token

    • 數字 expiresInSeconds。憑證會在擷取後的這段時間內到期。驗證權杖擷取器必須從擷取到程式庫的時間開始,以秒為單位傳遞到期時間,如範例所示。

  • 擷取器應呼叫伺服器上的網址,以便擷取權杖。這個網址 (SERVER_TOKEN_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,
  };
}

後續步驟