إعداد "حزمة تطوير البرامج (SDK) للمستهلكين" بلغة JavaScript

باستخدام JavaScript Consumer SDK، يمكن لتطبيق المستهلك عرض موقع المركبات والمواقع الجغرافية الأخرى التي تهم المستخدمين والتي يتم تتبّعها في Fleet Engine على خريطة مستندة إلى الويب. يسمح ذلك لمستخدمي تطبيق المستهلك الاطّلاع على تقدُّم شحناتهم. يفترض هذا الدليل أنّك أعددت Fleet Engine باستخدام مشروع على السحابة الإلكترونية المرتبط بـ Google Cloud ومفاتيح واجهة برمجة التطبيقات. لمعرفة التفاصيل، يُرجى الاطّلاع على Fleet Engine.

يمكنك إعداد JavaScript Consumer SDK باتّباع الخطوات التالية:

  1. تفعيل Maps JavaScript API.
  2. إعداد التفويض.

تفعيل Maps JavaScript API

فعِّل Maps JavaScript API في مشروع Google Cloud Console الذي تستخدمه لمثيل Fleet Engine. لمزيد من التفاصيل، يُرجى الاطّلاع على تفعيل واجهات برمجة التطبيقات في مستندات Maps JavaScript API.

إعداد التفويض

يتطلب Fleet Engine استخدام رموز JSON المميزة للويب (JWT) لاستدعاء طرق واجهة برمجة التطبيقات من البيئات منخفضة الموثوقية: الهواتف الذكية والمتصفحات.

يتم إنشاء رمز JWT على الخادم وتوقيعه وتشفيره وتمريره إلى العميل لإجراء تفاعلات لاحقة مع الخادم إلى أن تنتهي صلاحيته أو يصبح غير صالح.

التفاصيل الرئيسية

يجب أن يصادق تطبيق المستهلك على المستخدمين النهائيين باستخدام دور delivery_consumer من مشروع Google Cloud لعرض المعلومات الخاصة بالمستهلكين فقط. وبهذه الطريقة، يفلتر Fleet Engine جميع المعلومات الأخرى في الردود ويحذفها. على سبيل المثال، أثناء مهمة عدم التوفّر، لا تتم مشاركة أي معلومات عن الموقع الجغرافي مع مستخدم نهائي. يُرجى الاطّلاع على أدوار حساب الخدمة للمهام المُجدوَلة.

كيف يعمل التفويض؟

يتضمّن التفويض باستخدام بيانات Fleet Engine تنفيذًا من جهة الخادم ومن جهة العميل.

التفويض من جهة الخادم

قبل إعداد المصادقة والتفويض في تطبيقك المستند إلى الويب، يجب أن يكون خادمك الخلفي قادرًا على إصدار رموز JSON المميزة للويب لتطبيقك المستند إلى الويب للوصول إلى Fleet Engine. يرسل تطبيقك المستند إلى الويب رموز JWT هذه مع طلباته لكي يتعرّف Fleet Engine على الطلبات على أنّها مصادق عليها ومفوّضة للوصول إلى البيانات في الطلب. للحصول على تعليمات حول تنفيذ رموز JWT من جهة الخادم، يُرجى الاطّلاع على إصدار رموز JSON المميزة للويب ضمن أساسيات Fleet Engine.

على وجه التحديد، ضَع في اعتبارك ما يلي بالنسبة إلى JavaScript Consumer SDK لتتبُّع الشحنات:

التفويض من جهة العميل

عند استخدام JavaScript Consumer SDK، يطلب رمزًا مميّزًا من الخادم باستخدام أداة جلب رمز التفويض. يحدث ذلك عندما يتحقّق أي مما يلي:

  • لا يتوفّر رمز مميّز صالح، مثلاً عندما لم تستدعِ حزمة تطوير البرامج (SDK) أداة الجلب عند تحميل صفحة جديدة، أو عندما لم تُرجع أداة الجلب رمزًا مميّزًا.

  • انتهت صلاحية الرمز المميّز.

  • يتبقى أقل من دقيقة على انتهاء صلاحية الرمز المميّز.

بخلاف ذلك، تستخدم JavaScript Consumer SDK الرمز المميّز الصالح الذي تم إصداره سابقًا ولا تستدعي أداة الجلب.

إنشاء أداة جلب رمز التفويض

يمكنك إنشاء أداة جلب رمز التفويض باستخدام الإرشادات التالية:

  • يجب أن تُرجع أداة الجلب بنية بيانات تحتوي على حقلَين، يتم تضمينهما في 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,
  };
}

الخطوات التالية