JavaScript コンシューマ SDK を使用すると、コンシューマ アプリで、Fleet Engine で追跡された車両の位置情報やその他の関心対象地域をウェブベースの地図に表示できます。これにより、一般ユーザーは配送の進捗状況を確認できます。このガイドでは、Fleet Engine を関連付けられた Google Cloud プロジェクトと API キーで設定していることを前提としています。詳細については、Fleet Engine をご覧ください。
JavaScript Consumer SDK を設定する手順は次のとおりです。
- Maps JavaScript API を有効化します。
- 認可を設定します。
Maps JavaScript API を有効にする
Fleet Engine インスタンスに使用する Google Cloud コンソール プロジェクトで Maps JavaScript API を有効にします。詳細については、Maps JavaScript API ドキュメントの API を有効にするをご覧ください。
認可を設定する
信頼性の低い環境からの API メソッド呼び出しの場合、Fleet Engine では、適切なサービス アカウントによって署名された JSON Web Token(JWT)を使用する必要があります。信頼性の低い環境には、スマートフォンやブラウザが含まれます。JWT は、完全に信頼できる環境であるサーバー上で生成されます。JWT は署名され、暗号化され、有効期限が切れるか無効になるまで、その後のサーバー インタラクションのためにクライアントに渡されます。
バックエンドは、標準のアプリケーションのデフォルト認証情報メカニズムを使用して、Fleet Engine に対して認証と承認を行う必要があります。適切なサービス アカウントで署名された JWT を使用してください。サービス アカウントのロールの一覧については、Fleet Engine の基本の Fleet Engine サービス アカウントのロールをご覧ください。
コンシューマ アプリは、Google Cloud プロジェクトのdelivery_consumer
ロールを使用してエンドユーザーを認証し、コンシューマ固有の情報のみを返す必要があります。このようにして、Fleet Engine はレスポンス内の他のすべての情報をフィルタして削除します。たとえば、不在タスク中は、エンドユーザーと位置情報が共有されません。スケジュールされたタスクについては、サービス アカウントのロールをご覧ください。一方、バックエンドは、標準のアプリケーションのデフォルト認証情報メカニズムを使用して、Fleet Engine に対して認証と承認を行う必要があります。
認可の仕組み
Fleet Engine データによる認証には、サーバーサイドとクライアントサイドの両方の実装が含まれます。
サーバーサイド認可
ウェブベースのアプリケーションで認証と承認を設定する前に、バックエンド サーバーが、Fleet Engine にアクセスするためにウェブベースのアプリケーションに JSON Web Token を発行できる必要があります。ウェブベースのアプリケーションは、これらの JWT をリクエストとともに送信します。これにより、Fleet Engine はリクエストが認証され、リクエスト内のデータにアクセスする権限があることを認識します。サーバーサイドの JWT の実装手順については、Fleet Engine の基本のJSON Web Token を発行するをご覧ください。
特に、配送状況を追跡するための JavaScript Consumer SDK については、次の点に注意してください。- JSON Web Token の発行に関する一般的なガイドライン
- スケジュール設定されたタスクの JWT ガイドライン
- コンシューマ アプリのトークンの例
クライアントサイドの認可
JavaScript Consumer SDK を使用すると、認証トークン取得ツールを使用してサーバーからトークンがリクエストされます。これは、次のいずれかに該当する場合に実行されます。
有効なトークンが存在しない(SDK が新しいページの読み込みで取得ツールを呼び出していない場合や、取得ツールがトークンを返さなかった場合など)。
トークンの有効期限が切れています。
トークンの有効期限が 1 分以内である。
それ以外の場合、JavaScript Consumer SDK は以前に発行された有効なトークンを使用し、フェッチャーを呼び出しません。
認証トークン取得ツールを作成する
以下のガイドラインに沿って、認可トークン取得ツールを作成します。
フェッチャーは、2 つのフィールドを含むデータ構造を返す必要があります。次のように
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,
};
}