Trước khi sử dụng thư viện theo dõi đội xe bằng JavaScript, hãy đảm bảo bạn đã quen thuộc và thiết lập xong Công cụ quản lý đội xe. Để biết thông tin chi tiết, hãy xem bài viết về Công cụ quản lý đội xe.
Tài liệu này cho biết cách bật tính năng uỷ quyền giữa ứng dụng trang web và Công cụ của đội xe. Sau khi thiết lập các yêu cầu của bạn đến Công cụ quản lý đội xe bằng mã thông báo uỷ quyền chính xác, bạn sẽ có thể theo dõi một xe trên bản đồ.
Thiết lập quyền uỷ quyền
Công cụ của Fleet yêu cầu sử dụng Mã thông báo web JSON (JWT) cho các lệnh gọi phương thức API từ môi trường có độ tin cậy thấp: điện thoại thông minh và trình duyệt.
JWT bắt nguồn từ máy chủ của bạn, được ký, mã hoá và chuyển đến ứng dụng cho các lượt tương tác tiếp theo với máy chủ cho đến khi JWT hết hạn hoặc không còn hợp lệ.
Thông tin chi tiết chính
- Sử dụng Thông tin xác thực mặc định của ứng dụng để xác thực và uỷ quyền đối với Công cụ của đội xe.
- Sử dụng một tài khoản dịch vụ thích hợp để ký JWT. Xem các vai trò của tài khoản dịch vụ Fleet Engine trong phần Kiến thức cơ bản về Fleet Engine.
Quy trình uỷ quyền hoạt động như thế nào?
Việc uỷ quyền bằng dữ liệu của Công cụ quản lý đội xe liên quan đến cả việc triển khai phía máy chủ và phía máy khách.
Uỷ quyền phía máy chủ
Trước khi bạn thiết lập tính năng xác thực và uỷ quyền trong ứng dụng theo dõi xe, máy chủ phụ trợ của bạn phải có khả năng phát hành mã thông báo web JSON cho ứng dụng theo dõi xe để truy cập vào Công cụ xe. Ứng dụng theo dõi của bạn trong Fleet sẽ gửi các JWT này cùng với các yêu cầu để Công cụ Fleet nhận dạng các yêu cầu đó là đã được xác thực và được uỷ quyền truy cập vào dữ liệu trong yêu cầu. Để biết hướng dẫn về cách triển khai JWT phía máy chủ, hãy xem phần Phát hành mã thông báo web JSON trong phần Kiến thức cơ bản về công cụ của Fleet.
Để tạo mã thông báo từ máy chủ của bạn khi triển khai tính năng Theo dõi đội xe, hãy xem nội dung sau:- Nguyên tắc chung để phát hành mã thông báo web JSON, bao gồm cả các phần dành cho cả chuyến đi theo yêu cầu và công việc theo lịch
- Chuyến đi theo yêu cầu: Mã thông báo mẫu cho thao tác trên máy chủ phụ trợ
- Công việc theo lịch: Ví dụ về mã thông báo để theo dõi tất cả công việc và xe trong đoàn xe
Uỷ quyền phía máy khách
Khi bạn sử dụng thư viện theo dõi JavaScript Fleet, thư viện này sẽ yêu cầu mã thông báo từ máy chủ bằng cách sử dụng trình tìm nạp mã thông báo uỷ quyền. Phương thức này thực hiện việc này khi bất kỳ điều kiện nào sau đây là đúng:
Không có mã thông báo hợp lệ nào, chẳng hạn như khi SDK chưa gọi trình tìm nạp trên một lượt tải trang mới hoặc khi trình tìm nạp chưa trả về mã thông báo.
Mã thông báo đã hết hạn.
Mã thông báo sắp hết hạn trong vòng một phút.
Nếu không, thư viện theo dõi JavaScript Fleet sẽ sử dụng mã thông báo hợp lệ đã phát hành trước đó và không gọi trình tìm nạp.
Tạo trình tìm nạp mã thông báo uỷ quyền
Tạo trình tìm nạp mã thông báo uỷ quyền theo các nguyên tắc sau:
Trình tìm nạp phải trả về một cấu trúc dữ liệu có hai trường, được gói trong một
Promise
như sau:Một chuỗi
token
.Một số
expiresInSeconds
. Mã thông báo sẽ hết hạn sau khoảng thời gian này sau khi tìm nạp. Trình tìm nạp mã thông báo xác thực phải truyền thời gian hết hạn bằng giây, từ thời điểm tìm nạp đến thư viện như trong ví dụ.
Trình tìm nạp phải gọi một URL trên máy chủ của bạn để truy xuất mã thông báo. URL này (
SERVER_TOKEN_URL
) phụ thuộc vào cách triển khai phần phụ trợ của bạn. URL mẫu sau đây là dành cho phần phụ trợ của ứng dụng mẫu trên GitHub:https://SERVER_URL/token/fleet_reader
Ví dụ – Tạo trình tìm nạp mã thông báo uỷ quyền
Các ví dụ sau đây cho thấy cách tạo trình tìm nạp mã thông báo uỷ quyền:
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,
};
}