设置 JavaScript Consumer SDK

有了 JavaScript Consumer SDK,您的消费者应用就可以显示 Fleet Engine 中基于 Web 跟踪的车辆和其他感兴趣的地点 地图。这样,您的消费者用户就可以查看物流进度了。 本指南假定您已将 Fleet Engine 及其关联的 Google Cloud 项目和 API 密钥。如需了解详情,请参阅 Fleet Engine

您可以按照以下步骤设置 JavaScript 使用方 SDK:

  1. 启用 Maps JavaScript API
  2. 设置授权

启用 Maps JavaScript API

在您使用的 Google Cloud 控制台项目中启用 Maps JavaScript API 您的 Fleet Engine 实例。有关详情,请参阅启用 API Maps JavaScript API 文档。

设置授权

Fleet Engine 要求使用 JSON Web 令牌 (JWT), 适当的服务账号,用于低信任度 API 方法调用 环境。低信任的环境包括智能手机和浏览器。JWT 来自您的服务器,这是一个完全可信的环境。JWT 经过签名和加密,并传递给客户端,以供后续服务器使用 直至过期或失效。

您的后端应使用 标准的应用默认凭据机制。制造商 请务必使用由相应服务账号签名的 JWT。对于 服务账号角色的列表,请参阅 Fleet Engine 服务账号角色 Fleet Engine 基础知识

您的消费者应用应使用 仅返回 Google Cloud 项目中的 delivery_consumer 角色 消费者特有的信息通过这种方式,Fleet Engine 会过滤和隐去 提供更多信息例如,在执行不可用任务时 不会与最终用户共享位置信息。请参阅服务账号 角色

授权是如何运作的?

使用 Fleet Engine 数据进行授权涉及服务器端和客户端 实施。

服务器端授权

在基于网络的应用中设置授权之前, 服务器必须能够提供 JSON Web 令牌。这样,Fleet Engine 将来自您的应用的请求识别为有权访问 请求中的数据有关服务器端 JWT 实现的说明,请参阅 在 Fleet Engine Essentials颁发 JSON Web 令牌

具体而言,对于 JavaScript Consumer SDK,请注意以下几点 用于跟踪货运:

客户端授权

当您使用 JavaScript Consumer 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,
  };
}

后续步骤