استخدِم هذا الدليل لتمكين تطبيقك من الاستماع إلى مجموعة متنوعة من الأحداث التي تتغيّر أثناء تنقّل المستخدم على طول المسار والاستجابة لها. لا يتناول هذا الدليل تحديد المسار، بل يتناول فقط الاستجابة للأحداث على طول المسار.
نظرة عامة
توفّر لك حزمة تطوير البرامج (SDK) للتنقّل في نظام التشغيل iOS أدوات استماع مرتبطة بالموقع الجغرافي للمستخدم والظروف على طول المسار وبيانات الوقت والمسافة المهمة. في وحدة التحكّم في عرض الخريطة، يحتاج تطبيقك
إلى اعتماد البروتوكولات لهؤلاء المستمعين:
GMSRoadSnappedLocationProviderListener
و
GMSNavigatorListener.
تعرض هذه القائمة طرق الاستماع المتاحة لأحداث التنقّل:
GMSNavigatorListener.didArriveAtWaypoint، يتم تشغيله عند الوصول إلى وجهة.GMSNavigatorListener.navigatorDidChangeRoute، يتم تشغيله عند تغيير المسار.GMSNavigatorListener.didUpdateRemainingTime، يتم استدعاؤها بشكل متكرر مع تغيُّر الوقت المتبقي للوصول إلى الوجهة التالية، أثناء تفعيل الإرشاد.GMSNavigatorListener.didUpdateRemainingDistance، يتم استدعاؤها بشكل متكرر مع تغيُّر المسافة إلى الوجهة التالية، أثناء تفعيل الإرشاد.GMSNavigatorListener.didUpdateDelayCategory، يتم استدعاؤها عندما تتغيّر فئة التأخير إلى الوجهة التالية، بينما تكون الإرشادات نشطة.GMSNavigatorListener.didChangeSuggestedLightingMode، يتم تشغيله عند تعديل ظروف الإضاءة المقدَّرة. على سبيل المثال، عندما يحلّ الليل في الموقع الجغرافي الحالي للمستخدم، تتغيّر الإضاءة.-
GMSNavigatorListener.didUpdateSpeedingPercentage، يتم تشغيله عندما يتجاوز السائق الحدّ الأقصى للسرعة. GMSRoadSnappedLocationProviderListener.didUpdateLocation، يتم استدعاؤها بشكل متكرر عند تغيُّر الموقع الجغرافي للمستخدم.
الاطّلاع على الرمز
الإعلان عن التوافق مع البروتوكولات المطلوبة
قبل تنفيذ طرق التنقّل، يجب أن تلتزم وحدة التحكّم في العرض بالبروتوكولات التالية:
Swift
class ViewController:
UIViewController,
GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener
{
}
Objective-C
@interface ViewController () <GMSNavigatorListener, GMSRoadSnappedLocationProviderListener>
@end
بعد اعتماد بروتوكولات التنقّل، اضبط المستمعين على وحدة التحكّم في العرض. على سبيل المثال، يمكنك إضافة الرمز التالي إلى طريقة viewDidLoad().
Swift
mapView.navigator?.add(self)
mapView.roadSnappedLocationProvider?.add(self)
Objective-C
[_mapView.navigator addListener:self];
[_mapView.roadSnappedLocationProvider addListener:self];
تلقّي إشعارات بشأن الموقع الجغرافي أو إيقافها
يجب تفعيل الإشعارات بشأن الموقع الجغرافي لعرض مستوى تقدّم المستخدم على الخريطة.
يعرض مثيل location السمات التالية:
| سمة الموقع الجغرافي | الوصف |
|---|---|
| الارتفاع | الارتفاع الحالي |
| coordinate.latitude | إحداثيات خط العرض الحالي الذي تم تثبيته على الطريق |
| coordinate.longitude | إحداثيات خط الطول الحالي الذي تم تثبيته على الطريق |
| دورة | الاتجاه الحالي بالدرجات |
| السرعة | السرعة الحالية |
| timestamp | تاريخ/وقت القراءة الحالية |
لتلقّي إشعارات مستمرة بشأن الموقع الجغرافي، يمكنك استدعاء
mapView.roadSnappedLocationProvider.startUpdatingLocation واستخدام
GMSRoadSnappedLocationProviderListener لمعالجة الحدث didUpdateLocation.
يوضّح المثال التالي كيفية استدعاء startUpdatingLocation:
Swift
mapView.roadSnappedLocationProvider.startUpdatingLocation()
Objective-C
[_mapView.roadSnappedLocationProvider startUpdatingLocation];
تنشئ التعليمة البرمجية التالية GMSRoadSnappedLocationProviderListener
يتعامل مع الحدث didUpdateLocation.
Swift
func locationProvider(_ locationProvider: GMSRoadSnappedLocationProvider,
didUpdate location: CLLocation) {
print("Location: \(location.description)")
}
Objective-C
- (void)locationProvider:(GMSRoadSnappedLocationProvider *)locationProvider
didUpdateLocation:(CLLocation *)location {
NSLog(@"Location: %@", location.description);
}
لتلقّي إشعارات بشأن الموقع الجغرافي عندما يكون التطبيق في الخلفية، اضبط
allowsBackgroundLocationUpdates على "صحيح":
Swift
mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true
Objective-C
_mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;
رصد أحداث الوصول
يستخدم تطبيقك الحدث didArriveAtWaypoint لرصد وقت الوصول إلى الوجهة. يمكنك استئناف الإرشادات والانتقال إلى النقطة التالية على المسار من خلال
الاتصال بالرقم continueToNextDestinationWithCompletion()، ثم إعادة تفعيل
الإرشادات. يجب أن يعيد تطبيقك تفعيل الإرشادات بعد استدعاء
continueToNextDestinationWithCompletion().
بعد أن يستدعي التطبيق continueToNextDestinationWithCompletion، لن يتوفّر لدى المتصفّح بيانات عن الوجهة السابقة. إذا أردت تحليل معلومات حول جزء من المسار، عليك استردادها من أداة التنقّل قبل طلب continueToNextDestinationWithCompletion().
يوضّح مثال الرمز البرمجي التالي طريقة لمعالجة الحدث didArriveAtWaypoint:
Swift
func navigator(_ navigator: GMSNavigator, didArriveAt waypoint: GMSNavigationWaypoint) {
print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestinationWithCompletion { _, _ in }
mapView.navigator?.isGuidanceActive = true
}
Objective-C
- (void)navigator:(GMSNavigator *)navigator didArriveAtWaypoint:(GMSNavigationWaypoint *)waypoint {
NSLog(@"You have arrived at: %@", waypoint.title);
[_mapView.navigator continueToNextDestinationWithCompletion:^(GMSNavigationWaypoint *waypoint,
GMSRouteStatus status){
}];
_mapView.navigator.guidanceActive = YES;
}
تلقّي إشعارات بشأن تغيير المسار
لتلقّي إشعار عند تغيير المسار، أنشِئ طريقة لمعالجة الحدث navigatorDidChangeRoute. يمكنك الوصول إلى المسار الجديد باستخدام السمتَين routeLegs وcurrentRouteLeg في GMSNavigator.
Swift
func navigatorDidChangeRoute(_ navigator: GMSNavigator) {
print("The route has changed.")
}
Objective-C
- (void)navigatorDidChangeRoute:(GMSNavigator *)navigator {
NSLog(@"The route has changed.");
}
تلقّي آخر المعلومات عن الوقت المتبقّي للوصول إلى الوجهة
لتلقّي تحديثات مستمرة حول الوقت المتبقي للوصول إلى الوجهة، أنشئ طريقة لمعالجة الحدث didUpdateRemainingTime. توفّر المَعلمة time الوقت المقدَّر بالثواني حتى الوصول إلى الوجهة التالية.
Swift
func navigator(_ navigator: GMSNavigator, didUpdateRemainingTime time: TimeInterval) {
print("Time to next destination: \(time)")
}
Objective-C
- (void)navigator:(GMSNavigator *)navigator didUpdateRemainingTime:(NSTimeInterval)time {
NSLog(@"Time to next destination: %f", time);
}
لضبط الحدّ الأدنى للتغيير في الوقت المقدَّر للوصول إلى الوجهة التالية، اضبط السمة timeUpdateThreshold على GMSNavigator. يتم تحديد القيمة بالثواني. في حال عدم ضبط هذه السمة، تستخدم الخدمات القيمة التلقائية التي تبلغ ثانية واحدة.
Swift
navigator?.timeUpdateThreshold = 10
Objective-C
navigator.timeUpdateThreshold = 10;
تلقّي آخر المعلومات حول المسافة إلى الوجهة
لتلقّي آخر المعلومات باستمرار حول المسافة المتبقية للوصول إلى الوجهة، عليك إنشاء طريقة لمعالجة الحدث didUpdateRemainingDistance. توفّر المَعلمة distance المسافة المقدَّرة، بالأمتار، إلى الوجهة التالية.
Swift
func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance distance: CLLocationDistance)
{
let miles = distance * 0.00062137
print("Distance to next destination: \(miles) miles.")
}
Objective-C
- (void)navigator:(GMSNavigator *)navigator
didUpdateRemainingDistance:(CLLocationDistance)distance {
double miles = distance * 0.00062137;
NSLog(@"%@", [NSString stringWithFormat:@"Distance to next destination: %.2f.", miles]);
}
لضبط الحدّ الأدنى للتغيير في المسافة المقدَّرة إلى الوجهة التالية، اضبط السمة
distanceUpdateThreshold على GMSNavigator (يتم تحديد القيمة
بالأمتار). إذا لم يتم ضبط هذه السمة، تستخدم الخدمات القيمة التلقائية التي تبلغ مترًا واحدًا.
Swift
navigator?.distanceUpdateThreshold = 100
Objective-C
navigator.distanceUpdateThreshold = 100;
تلقّي آخر المعلومات عن حركة المرور
لتلقّي تحديثات مستمرة عن تدفق حركة المرور للمسار المتبقي،
أنشئ طريقة للتعامل مع الحدث didUpdateDelayCategory. يؤدي استدعاء
delayCategoryToNextDestination إلى عرض GMSNavigationDelayCategory التي
توفّر قيمة من 0 إلى 3. تستند التحديثات إلى الفئة إلى الموضع
الحالي لمستخدم التطبيق. إذا لم تكن بيانات عدد الزيارات متاحة،
تعرض الدالة GMSNavigationDelayCategory القيمة 0. تشير الأرقام من 1 إلى 3 إلى زيادة
التدفق من الخفيف إلى الغزير.
Swift
func navigator(_ navigator: GMSNavigator,
didUpdate delayCategory: GMSNavigationDelayCategory)
{
print("Traffic flow to next destination: \(delayCategory)")
}
Objective-C
- (void)navigator:(GMSNavigator *)navigator
didUpdateDelayCategory:(GMSNavigationDelayCategory)delayCategory {
NSLog(@"Traffic flow to next destination: %ld", (long)delayCategory);
}
تعرض السمة GMSNavigationDelayCategory مستويات التأخير التالية:
| فئة التأخير | الوصف |
|---|---|
| GMSNavigationDelayCategoryNoData | 0 - غير متاح، ما مِن بيانات عن عدد الزيارات أو : |
| المسار. | |
| GMSNavigationDelayCategoryHeavy | 1 - كثيف |
| GMSNavigationDelayCategoryMedium | 2 - متوسط: |
| GMSNavigationDelayCategoryLight | 3 - خفيف |
تلقّي إشعارات بشأن تجاوز السرعة
لتلقّي إشعارات عندما يتجاوز السائق الحدّ الأقصى للسرعة، أنشئ طريقة
للتعامل مع الحدث didUpdateSpeedingPercentage.
Swift
// Listener to handle speeding events.
func navigator(_ navigator: GMSNavigator,
didUpdateSpeedingPercentage percentageAboveLimit: CGFloat)
{
print("Speed is \(percentageAboveLimit) above the limit.")
}
Objective-C
// Listener to handle speeding events.
- (void)navigator:(GMSNavigator *)navigator
didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit {
NSLog(@"Speed is %f percent above the limit.", percentageAboveLimit);
}
جارٍ تغيير وضع الإضاءة المقترَح
يحتسب GMSNavigator وضع الإضاءة المقترَح استنادًا إلى الوقت من اليوم والموقع الجغرافي للجهاز، ويستدعي الإجراء didChangeSuggestedLightingMode الخاص بالمستمع فقط عند تغيُّر الوضع المقترَح (مثل شروق الشمس أو غروبها). لضمان بدء الخريطة بوضع الإضاءة المناسب عندما
يفتح المستخدم تطبيقك، اضبط
mapView.lightingMode
على
suggestedLightingMode
للمتصفّح أثناء الإعداد، ونفِّذ
didChangeSuggestedLightingMode
للتعامل مع التغييرات اللاحقة.
يوضّح المثال التالي كيفية ضبط وضع الإضاءة الأوّلي والاستماع إلى التغييرات المقترَحة في وضع الإضاءة:
Swift
// Set the initial lighting mode on launch or setup.
mapView.lightingMode = mapView.navigator?.suggestedLightingMode ?? .normal
// Define a listener for suggested changes to lighting mode.
func navigator(_ navigator: GMSNavigator,
didChangeSuggestedLightingMode lightingMode: GMSNavigationLightingMode)
{
print("Suggested lighting mode has changed: \(String(describing: lightingMode))")
// Make the suggested change.
mapView.lightingMode = lightingMode
}
Objective-C
// Set the initial lighting mode on launch or setup.
_mapView.lightingMode = _mapView.navigator.suggestedLightingMode;
// Define a listener for suggested changes to lighting mode.
- (void)navigator:(GMSNavigator *)navigator
didChangeSuggestedLightingMode:(GMSNavigationLightingMode)lightingMode {
NSLog(@"Suggested lighting mode has changed: %ld", (long)lightingMode);
// Make the suggested change.
_mapView.lightingMode = lightingMode;
}
لمزيد من المعلومات حول ضبط وضع الإضاءة التلقائي واليدوي، يُرجى الاطّلاع على ضبط وضعَي الإضاءة العادية والمنخفضة.