بعد أن أعددت حزمة تطوير البرامج (SDK) الخاصة بمستهلكي JavaScript للمهام المُجدوَلة، على استعداد لمتابعة شحنة باستخدام تطبيقك للمستهلك. يتناول هذا المستند الخطوات الرئيسية التالية في هذه العملية:
- تهيئة خريطة وعرض الرحلة المشتركة
- التحديث ومتابعة التقدم المحرز في الرحلة
- إيقاف مشاركة الرحلة
- التعامل مع الأخطاء
إعداد خريطة
لمتابعة استلام شحنة أو تسليمها في تطبيق الويب، عليك تحميل خريطة. وإنشاء مثيل لحزمة تطوير البرامج (SDK) الخاصة بالمستهلك لبدء تتبُّع شحنتك يمكنك تحميل خريطة جديدة أو استخدام خريطة حالية. يمكنك بعد ذلك استخدام واجهة برمجة التطبيقات لإنشاء مثيل SDK للمستهلك حتى يتجاوب عرض الخريطة مع موقع السلعة التي يتم تتبّعها
تحميل خريطة جديدة باستخدام واجهة برمجة تطبيقات JavaScript لخرائط Google
لإنشاء خريطة جديدة، يجب تحميل واجهة برمجة تطبيقات JavaScript لخرائط Google في تطبيق الويب. تشير رسالة الأشكال البيانية المثال التالي كيفية تحميل واجهة برمجة تطبيقات JavaScript لخرائط Google، وتمكين SDK وبدء التحقق من التهيئة.
- تشغِّل المَعلمة
callback
الدالةinitMap
بعد تحميل واجهة برمجة التطبيقات. - تتيح السمة
defer
للمتصفح مواصلة عرض بقية محتوى الصفحة أثناء تحميل واجهة برمجة التطبيقات.
يمكنك استخدام الدالة initMap
لإنشاء مثيل لحزمة تطوير البرامج (SDK) الخاصة بالمستهلك. على سبيل المثال:
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=journeySharing" defer></script>
تحميل خريطة حالية
يمكنك أيضًا تحميل خريطة حالية تم إنشاؤها بواسطة واجهة برمجة تطبيقات JavaScript لخرائط Google، كتلك التي تستخدمها بالفعل.
على سبيل المثال، لنفترض أن لديك صفحة ويب تتضمن google.maps.Map
قياسي
الذي تظهر عليه علامة كما هو موضح في رمز HTML التالي. هذا النمط
تعرض خريطتك باستخدام الدالة initMap
نفسها في رد الاتصال في النهاية:
<!DOCTYPE html>
<html>
<head>
<style>
/* Set the size of the div element that contains the map */
#map {
height: 400px; /* The height is 400 pixels */
width: 100%; /* The width is the width of the web page */
}
</style>
</head>
<body>
<h3>My Google Maps Demo</h3>
<!--The div element for the map -->
<div id="map"></div>
<script>
// Initialize and add the map
function initMap() {
// The location of Pier 39 in San Francisco
var pier39 = {lat: 37.809326, lng: -122.409981};
// The map, initially centered at Mountain View, CA.
var map = new google.maps.Map(document.getElementById('map'));
map.setOptions({center: {lat: 37.424069, lng: -122.0916944}, zoom: 14});
// The marker, now positioned at Pier 39
var marker = new google.maps.Marker({position: pier39, map: map});
}
</script>
<!-- Load the API from the specified URL.
* The defer attribute allows the browser to render the page while the API loads.
* The key parameter contains your own API key.
* The callback parameter executes the initMap() function.
-->
<script defer src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
</script>
</body>
</html>
إنشاء نسخة من مزوِّد موقع الشحن
استخدام موفِّر الموقع الجغرافي للشحن إلى جانب الرمز المميز للتفويض الذي حددته سابقًا، لبدء تلقي البيانات من Fleet Engine.
توضح هذه الأمثلة كيفية إنشاء مثيل موفِّر الموقع.
JavaScript
const locationProvider =
new google.maps.journeySharing.FleetEngineShipmentLocationProvider({
projectId: 'your-project-id',
authTokenFetcher: authTokenFetcher, // the fetcher defined previously
});
TypeScript
const locationProvider =
new google.maps.journeySharing.FleetEngineShipmentLocationProvider({
projectId: 'your-project-id',
authTokenFetcher: authTokenFetcher, // the fetcher defined previously
});
عرض الرحلة التي تمّت مشاركتها
لكي تعرض الخريطة الرحلة المشتركة، تحتاج إلى تهيئة العرض، الذي يعين إطار الخريطة نفسها لتتطابق مع موقع العميل الذي تم تتبعه والتي توفرها حزمة تطوير البرامج (SDK) الخاصة بالمستهلك بعد حصولها على المعلومات من Fleet Engine
ملاحظات:
تأكد من أن صفحتك تحتوي على عنصر <div> يتيح عرض الخريطة. في المثال التالي، تتم تسمية العنصر <div> باسم
map_canvas
.يُرجى الانتباه إلى قواعد مستوى الظهور التلقائية التي تنطبق عليها Fleet Engine والتي يتم تتبُّعها. ورحلاتها. يمكنك أيضًا ضبط قواعد إذن الوصول للمركبة النشطة. الشحن ومهام التوقف المجدولة. راجِع تخصيص مستوى رؤية المهمة في دليل إعداد المهام.
توضح هذه الأمثلة كيفية تهيئة عرض الخريطة.
JavaScript
function initMap() {
const mapView = new
google.maps.journeySharing.JourneySharingMapView({
element: document.getElementById('map_canvas'),
// Any undefined styling options use defaults.
});
// If you did not specify a tracking ID in the location
// provider constructor, you may do so here.
// Location tracking starts as soon as this is set.
locationProvider.trackingId = 'your-tracking-id';
// Give the map an initial viewport to allow it to
// initialize; otherwise the 'ready' event above may
// not fire. The user also has access to the mapView
// object to customize as they wish.
mapView.map.setCenter({lat: 37.2, lng: -121.9});
mapView.map.setZoom(14);
}
TypeScript
function initMap() {
const mapView = new
google.maps.journeySharing.JourneySharingMapView({
element: document.getElementById('map_canvas'),
// Any undefined styling options will use defaults.
});
// If you did not specify a tracking ID in the location
// provider constructor, you may do so here.
// Location tracking starts as soon as this is set.
locationProvider.trackingId = 'your-tracking-id';
// Give the map an initial viewport to allow it to
// initialize; otherwise the 'ready' event above may
// not fire. The user also has access to the mapView
// object to customize as they wish.
mapView.map.setCenter({lat: 37.2, lng: -121.9});
mapView.map.setZoom(14);
}
تعديل مستوى تقدُّم الشحن
يمكنك الاستماع إلى الأحداث وتعديل تقدم الشحنة كرحلة
المشروع. استخدم موفر الموقع لاسترداد المعلومات الوصفية من
عنصر taskTrackingInfo
. التغييرات في علامة التعريف
إلى تشغيل حدث update. يوفّر الكائن taskTrackingInfo
ما يلي:
- الوقت المُقدّر للوصول
- عدد المحطات المتبقية
- المسافة المتبقية قبل استلام الطلب أو التسليم
يوضح المثال التالي كيفية الاستماع إلى أحداث التغيير هذه.
JavaScript
locationProvider.addListener('update', e => {
// e.taskTrackingInfo contains data that may be useful
// to the rest of the UI.
console.log(e.taskTrackingInfo.remainingStopCount);
});
TypeScript
locationProvider.addListener('update',
(e: google.maps.journeySharing.FleetEngineShipmentLocationProviderUpdateEvent) => {
// e.taskTrackingInfo contains data that may be useful
// to the rest of the UI.
console.log(e.taskTrackingInfo.remainingStopCount);
});
عرض معايير لمهام متعددة
تعرض حزمة SDK للمستهلكين للمهام المُجدوَلة مهمة واحدة فقط لكل رقم تعريف تتبّع في الخريطة. ومع ذلك، تعيِّن عادةً رقم تعريف تتبع واحدًا إلى رقم تعريفي شحن السِلع التي تظلّ مرتبطة بالسلعة خلال رحلتها في نظامك. هذا يعني أنه قد يكون هناك رقم تعريف واحد للتتبع مرتبطًا مهام متعددة، مثل مهمة الاستلام متبوعة بمهمة تسليم لنفس أو عدة مهام شحن فاشلة لطرد ما.
للتعامل مع هذا الموقف، يطبق Fleet Engine معايير عرض المهام، كما هو موضح في الجدول التالي.
معايير المهمة | النتيجة |
---|---|
فتح مهام استلام الطلب | |
يوجد تطابق واحد | عرض المهمة |
هناك جهات متعددة | إنشاء خطأ |
مهام استلام الطلب المغلقة | |
يوجد تطابق واحد | عرض المهمة |
توجد عدة مواقع (بعضها لها أوقات نتائج) | إظهار المهمة ذات وقت النتائج الأحدث |
فيديوهات حالية متعدّدة (بدون أوقات نتائج) | إنشاء خطأ |
مهام التسليم المفتوحة | |
يوجد تطابق واحد | عرض المهمة |
هناك جهات متعددة | إنشاء خطأ |
مهام التسليم المغلق | |
يوجد تطابق واحد | عرض المهمة |
توجد عدة مواقع (بعضها لها أوقات نتائج) | إظهار المهمة ذات وقت النتائج الأحدث |
فيديوهات حالية متعدّدة (بدون أوقات نتائج) | إنشاء خطأ |
إيقاف متابعة شحنة
عند اكتمال رحلة الشحن أو إلغائها، من المفترض أن يكون تطبيق المستهلك إنهاء مشاركة الرحلة من خلال إزالة رقم تعريف التتبع وموفِّر الموقع من عرض الخريطة.
إزالة رقم تعريف التتبّع
لمنع مقدّم خدمة الموقع الجغرافي من تتبُّع الشحنة، يجب إزالة رقم تعريف التتبّع. من موفِّر الموقع الجغرافي توضّح الأمثلة التالية كيفية إجراء ذلك.
JavaScript
locationProvider.trackingId = '';
TypeScript
locationProvider.trackingId = '';
إزالة موفر الموقع من عرض الخريطة
يوضح المثال التالي كيفية إزالة مزوّد موقع جغرافي من عرض الخريطة.
JavaScript
mapView.removeLocationProvider(locationProvider);
TypeScript
mapView.removeLocationProvider(locationProvider);
التعامل مع أخطاء تتبُّع الشحن
الأخطاء التي تنشأ بشكل غير متزامن من طلب تشغيل معلومات الشحن error. يوضّح المثال التالي كيفية الاستماع إلى هذه الأحداث للتعامل مع الأخطاء.
JavaScript
locationProvider.addListener('error', e => {
// e.error is the error that triggered the event.
console.error(e.error);
});
TypeScript
locationProvider.addListener('error', (e: google.maps.ErrorEvent) => {
// e.error is the error that triggered the event.
console.error(e.error);
});
ملاحظة: يُرجى التأكّد من إنهاء مكالمات المكتبة في مجموعات try...catch
.
لمعالجة الأخطاء غير المتوقعة.