استخدِم هذا الدليل لتفعيل تطبيقك للاستماع إلى مجموعة متنوعة من الأحداث والاستجابة لها والتي تتغيّر أثناء تنقّل المستخدم على طول مسار معيّن. لا يتناول هذا الدليل تحديد مسار، بل يتناول فقط الاستجابة للأحداث على طول مسار.
نظرة عامة
تقدّم لك حزمة تطوير البرامج (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
على true:
Swift
mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true
Objective-C
_mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;
رصد أحداث الوصول
يستخدم تطبيقك الحدث didArriveAtWaypoint
لرصد الحالات التي يتم فيها الوصول
إلى وجهة معيّنة. يمكنك استئناف التوجيه والانتقال إلى نقطة الالتفاف التالية من خلال
الضغط على continueToNextDestination()
، ثم إعادة تفعيل التوجيه. يجب أن يعيد تطبيقك تفعيل الإرشادات بعد الاتصال بالرقم continueToNextDestination()
.
بعد أن يطلب التطبيق continueToNextDestination
، لن يتوفّر لدى المخطِّط
بيانات عن الوجهة السابقة. إذا كنت تريد تحليل معلومات عن رحلة في مسار معيّن، عليك استرداد هذه المعلومات من المخطِّط قبل الاتصال بـ
continueToNextDestination()
.
يعرض مثال الرمز البرمجي التالي طريقة للتعامل مع الحدث didArriveAtWaypoint
:
Swift
func navigator(_ navigator: GMSNavigator, didArriveAt waypoint:
GMSNavigationWaypoint) { print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestination()
mapView.navigator?.isGuidanceActive = true }
Objective-C
- (void)navigator:(GMSNavigator *)navigator
didArriveAtWaypoint:(GMSNavigationWaypoint *)waypoint { NSLog(@"You have
arrived at: %@", waypoint.title); [_mapView.navigator
continueToNextDestination]; _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); }
تغيير وضع الإضاءة المقترَح
لتلقّي إشعارات بالتغييرات المقدَّرة في الإضاءة، أنشئ طريقة للتعامل مع حدث didChangeSuggestedLightingMode
.
Swift
// 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
// 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; }