Как настроить Consumer SDK для JavaScript

С помощью Consumer SDK для JavaScript ваше приложение для пользователей может показывать на веб-карте местоположение транспортных средств и другие интересующие местоположения, отслеживаемые в Fleet Engine. Это позволяет вашим пользователям-потребителям видеть ход выполнения своих поставок. В этом руководстве предполагается, что вы настроили Fleet Engine, а также связанный с ним облачный проект Google Cloud и ключи API. Подробнее о Fleet Engine…

Чтобы настроить Consumer SDK для JavaScript, выполните следующие действия:

  1. Включите Maps JavaScript API.
  2. Настройте авторизацию.

Включить Maps JavaScript API

Включите Maps JavaScript API в проекте консоли Google Cloud, который вы используете для экземпляра Fleet Engine. Подробную информацию можно найти в разделе Включение API документации по Maps JavaScript API.

Настройте авторизацию

Для вызовов методов API из сред с низким уровнем доверия (смартфонов и браузеров) Fleet Engine требует использовать веб-токены JSON (JWT).

Токен JWT создается на вашем сервере, подписывается, шифруется и передается клиенту для последующих взаимодействий с сервером, пока не истечет срок его действия или он не станет недействительным.

Основные сведения

Приложение для пользователей должно выполнять аутентификацию конечных пользователей с ролью delivery_consumer из вашего облачного проекта Google Cloud, чтобы возвращать только информацию, предназначенную для пользователей. Таким образом, Fleet Engine фильтрует и редактирует всю остальную информацию в ответах. Например, во время выполнения задачи по недоступности геоданные не передаются конечному пользователю. Ознакомьтесь с ролями сервисных аккаунтов для запланированных задач.

Как работает авторизация?

Авторизация с данными Fleet Engine включает реализацию как на серверной, так и на клиентской стороне.

Авторизация на стороне сервера

Прежде чем настраивать аутентификацию и авторизацию в веб-версии приложения, убедитесь, что ваш бэкенд-сервер может выдавать веб-версии приложения веб-токены JSON для доступа к Fleet Engine. Ваше веб-приложение отправляет эти JWT со своими запросами, чтобы Fleet Engine распознавал запросы как аутентифицированные и авторизованные для доступа к данным в запросе. Инструкции по реализации JWT на стороне сервера можно найти в разделе Выпуск веб-токенов JSON статьи Основы Fleet Engine.

В частности, при использовании Consumer SDK для JavaScript для отслеживания доставки учитывайте следующее:

Клиентская авторизация

Когда вы используете Consumer SDK для JavaScript, он запрашивает токен у сервера с помощью сборщика токенов авторизации. Это происходит в следующих случаях:

  • Действительный токен отсутствует. Например, SDK не вызвал сборщик при загрузке страницы или сборщик не вернул токен.

  • Срок действия токена истек.

  • Срок действия токена истекает через минуту.

В противном случае Consumer SDK для JavaScript использует ранее выданный действительный токен и не вызывает функцию получения.

Как создать средство получения токена авторизации

При создании сборщика токенов авторизации следуйте этим рекомендациям:

  • Функция извлечения должна возвращать структуру данных с двумя полями, заключенными в 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,
  };
}

Дальнейшие действия