باستخدام JavaScript Consumer SDK، يمكن لتطبيق المستهلك عرض موقع المركبات والمواقع الأخرى التي تهم المستخدمين والتي يتم تتبّعها في Fleet Engine على خريطة مستندة إلى الويب. ويتيح ذلك للمستهلكين الاطّلاع على مدى تقدُّم رحلة السائق. يفترض هذا الدليل أنّك أعددت Fleet Engine باستخدام مشروع Google Cloud المرتبط ومفاتيح واجهة برمجة التطبيقات. لمزيد من التفاصيل، يُرجى الاطّلاع على Fleet Engine.
يمكنك إعداد JavaScript Consumer SDK باتّباع الخطوات التالية:
تفعيل Maps JavaScript API
فعِّل Maps JavaScript API في Google Cloud Console. لمزيد من التفاصيل، يُرجى الاطّلاع على تفعيل واجهات برمجة التطبيقات في مستندات Google Cloud. يؤدي ذلك إلى تفعيل Consumer SDK لـ JavaScript.
إعداد التفويض
يتطلب Fleet Engine استخدام رموز JSON المميزة للويب (JWT) لاستدعاء طرق واجهة برمجة التطبيقات من البيئات منخفضة الثقة: الهواتف الذكية والمتصفّحات.
يتم إنشاء رمز JWT على الخادم وتوقيعه وتشفيره ونقله إلى العميل لإجراء تفاعلات لاحقة مع الخادم إلى أن تنتهي صلاحيته أو يصبح غير صالح.
التفاصيل الرئيسية
- استخدِم بيانات الاعتماد التلقائية للتطبيق للمصادقة و التفويض في Fleet Engine.
- استخدِم حساب خدمة مناسبًا لتوقيع رموز JWT. راجِع أدوار حساب خدمة Fleet Engine في أساسيات Fleet Engine.
كيف يعمل التفويض؟
يتضمّن التفويض باستخدام بيانات Fleet Engine تنفيذًا من جهة الخادم ومن جهة العميل.
التفويض من جهة الخادم
قبل إعداد المصادقة والتفويض في تطبيقك المستند إلى الويب، يجب أن يكون خادم الخلفية قادرًا على إصدار رموز JSON المميزة للويب لتطبيقك المستند إلى الويب للوصول إلى Fleet Engine. يرسل تطبيقك المستند إلى الويب رموز JWT هذه مع طلباته لكي يتعرّف Fleet Engine على الطلبات على أنّها مصادَق عليها ومفوَّضة للوصول إلى البيانات في الطلب. للحصول على تعليمات بشأن تنفيذ رموز JWT من جهة الخادم، يُرجى الاطّلاع على إصدار رموز JSON المميزة للويب ضمن أساسيات Fleet Engine.
على وجه الخصوص، ضَع في اعتبارك ما يلي بالنسبة إلى JavaScript Consumer SDK لمشاركة تقدُّم الرحلة:- الإرشادات العامة لإصدار رموز JSON المميزة للويب
- إرشادات رموز JWT للرحلات عند الطلب
- مثال على رمز مميّز لعملية مستهلك
التفويض من جهة العميل
عند استخدام JavaScript Consumer SDK، يطلب رمزًا مميّزًا من الخادم باستخدام أداة جلب الرمز المميّز للتفويض. ويحدث ذلك عندما يتحقّق أي مما يلي:
لا يتوفّر رمز مميّز صالح، مثلاً عندما لم تستدعِ حزمة SDK أداة الجلب عند تحميل صفحة جديدة، أو عندما لم تُرجع أداة الجلب رمزًا مميّزًا.
انتهت صلاحية الرمز المميّز.
لم يتبقَّ على انتهاء صلاحية الرمز المميّز سوى دقيقة واحدة.
بخلاف ذلك، تستخدم JavaScript Consumer SDK الرمز المميّز الصالح الذي تم إصداره سابقًا ولا تستدعي أداة الجلب.
إنشاء أداة جلب الرمز المميّز للتفويض
يمكنك إنشاء أداة جلب الرمز المميّز للتفويض باستخدام هذه الإرشادات:
يجب أن تُرجع أداة الجلب بنية بيانات تحتوي على حقلَين، يتم تضمينهما في
Promiseعلى النحو التالي:سلسلة
tokenرقم
expiresInSecondsتنتهي صلاحية الرمز المميّز بعد هذا المقدار من الوقت بعد جلبه. يجب أن تمرِّر أداة جلب رمز المصادقة المميز وقت انتهاء الصلاحية بالثواني، من وقت الجلب إلى المكتبة كما هو موضّح في المثال.
يجب أن تستدعي أداة الجلب عنوان URL على الخادم لاسترداد رمز مميّز. يعتمد عنوان URL هذا، وهو
SERVER_TOKEN_URL، على عملية تنفيذ الخلفية. عنوان URL التالي هو لخلفية نموذج التطبيق على GitHub:https://SERVER_URL/token/consumer/TRIPID
مثال: إنشاء أداة جلب رمز المصادقة المميز
توضّح الأمثلة التالية كيفية إنشاء أداة جلب الرمز المميّز للتفويض:
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,
};
}