التنقل في مسار

اتّبِع هذا الدليل لرسم مسار داخل تطبيقك إلى وجهة واحدة باستخدام حزمة Navigation SDK لنظام التشغيل iOS.

نظرة عامة

  1. يمكنك دمج حزمة Navigation SDK في تطبيقك، كما هو موضّح في قسم إعداد مشروعك.
  2. يمكنك ضبط GMSMapView.
  3. يمكنك مطالبة المستخدم بقبول الأحكام والشروط، والسماح بخدمات الموقع الجغرافي والإشعارات في الخلفية.
  4. يمكنك إنشاء مصفوفة تحتوي على وجهة واحدة أو أكثر.
  5. يمكنك تحديد GMSNavigator للتحكّم في التنقّل باتّجاهات مفصّلة.

    • يمكنك إضافة الوجهات باستخدام setDestinations.
    • يمكنك ضبط isGuidanceActive على true لبدء التنقّل.
    • يمكنك استخدام simulateLocationsAlongExistingRoute لمحاكاة تقدّم المركبة على طول المسار، وذلك لاختبار تطبيقك وتحديد المشاكل فيه وعرضه.

عرض الرمز

مطالبة المستخدم بالحصول على الأذونات اللازمة

قبل استخدام حزمة Navigation SDK، يجب أن يوافق المستخدم على الأحكام والشروط، ويسمح باستخدام خدمات الموقع الجغرافي المطلوبة للتنقّل. إذا كان تطبيقك سيعمل في الخلفية، يجب أيضًا أن يطلب من المستخدم السماح بالإشعارات التنبيهية للإرشادات. يوضّح هذا القسم كيفية عرض طلبات الحصول على الأذونات المطلوبة.

السماح بخدمات الموقع الجغرافي

تستخدم حزمة Navigation SDK خدمات الموقع الجغرافي، التي تتطلّب الحصول على إذن من المستخدم. لتفعيل خدمات الموقع الجغرافي وعرض مربّع حوار الحصول على الإذن، اتّبِع الخطوات التالية:

  1. أضِف المفتاحَين NSLocationWhenInUseUsageDescription وNSLocationAlwaysAndWhenInUseUsage إلى Info.plist.
  2. بالنسبة إلى القيمة، أضِف شرحًا موجزًا عن سبب حاجة تطبيقك إلى خدمات الموقع الجغرافي. على سبيل المثال: "يحتاج هذا التطبيق إلى إذن لاستخدام خدمات الموقع الجغرافي للتنقّل باتّجاهات مفصّلة".

  3. لعرض مربّع حوار الحصول على الإذن، استدعِ الـ requestAlwaysAuthorization() لمثيل مدير الموقع الجغرافي.

Swift

self.locationManager.requestAlwaysAuthorization()

Objective-C

[_locationManager requestAlwaysAuthorization];

يمكنك الاطّلاع على مستندات Apple الكاملة بشأن الحصول على إذن خدمة الموقع الجغرافي.

السماح بالإشعارات التنبيهية للإرشادات في الخلفية

تحتاج حزمة Navigation SDK إلى إذن المستخدم لتقديم إشعارات تنبيهية عندما يكون التطبيق قيد التشغيل في الخلفية. أضِف الرمز التالي لمطالبة المستخدم بالإذن بعرض هذه الإشعارات:

Swift

UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
  granted, error in
    // Handle denied authorization to display notifications.
    if !granted || error != nil {
      print("User rejected request to display notifications.")
    }
}

Objective-C

// Request authorization for alert notifications.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert;
[center requestAuthorizationWithOptions:options
                      completionHandler:
 ^(
   BOOL granted,
   NSError *_Nullable error) {
     if (!error && granted) {
       NSLog(@"iOS Notification Permission: newly Granted");
     } else {
       NSLog(@"iOS Notification Permission: Failed or Denied");
     }
   }];

قبول الأحكام والشروط

استخدِم الرمز التالي لعرض مربّع حوار الأحكام والشروط، وتفعيل التنقّل عندما يقبل المستخدم الأحكام. يُرجى العِلم أنّ هذا المثال يتضمّن الرمز الخاص بخدمات الموقع الجغرافي والإشعارات التنبيهية للإرشادات (الموضّحة سابقًا).

Swift

  let termsAndConditionsOptions = GMSNavigationTermsAndConditionsOptions(companyName: "Ride Sharing Co.")

  GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(
    with: termsAndConditionsOptions) { termsAccepted in
    if termsAccepted {
      // Enable navigation if the user accepts the terms.
      self.mapView.isNavigationEnabled = true
      self.mapView.settings.compassButton = true

      // Request authorization to use location services.
      self.locationManager.requestAlwaysAuthorization()

      // Request authorization for alert notifications which deliver guidance instructions
      // in the background.
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
      granted, error in
        // Handle rejection of notification authorization.
        if !granted || error != nil {
          print("Authorization to deliver notifications was rejected.")
        }
      }
    } else {
      // Handle rejection of terms and conditions.
    }
  }

Objective-C

GMSNavigationTermsAndConditionsOptions *termsAndConditionsOptions = [[GMSNavigationTermsAndConditionsOptions alloc] initWithCompanyName:@"Ride Sharing Co."];

[GMSNavigationServices
  showTermsAndConditionsDialogIfNeededWithOptions:termsAndConditionsOptions
  callback:^(BOOL termsAccepted) {
   if (termsAccepted) {
     // Enable navigation if the user accepts the terms.
     _mapView.navigationEnabled = YES;
     _mapView.settings.compassButton = YES;

     // Request authorization to use the current device location.
     [_locationManager requestAlwaysAuthorization];

     // Request authorization for alert notifications which deliver guidance instructions
     // in the background.
     UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
     UNAuthorizationOptions options = UNAuthorizationOptionAlert;
     [center requestAuthorizationWithOptions:options
                           completionHandler:
     ^(
       BOOL granted,
       NSError *_Nullable error) {
         if (!error && granted) {
           NSLog(@"iOS Notification Permission: newly Granted");
         } else {
           NSLog(@"iOS Notification Permission: Failed or Denied");
         }
       }];
   } else {
     // Handle rejection of the terms and conditions.
   }
 }];

إنشاء مسار وبدء الإرشادات

لرسم مسار، استدعِ طريقة setDestinations() في Navigator باستخدام مصفوفة تحتوي على وجهة واحدة أو أكثر (GMSNavigationWaypoint) تريد زيارتها. إذا تم احتساب المسار بنجاح، سيظهر على الخريطة. لبدء الإرشادات على طول المسار، اضبط isGuidanceActive على true في معاودة الاتصال.

يوضّح المثال التالي ما يلي:

  • إنشاء مسار جديد بوجهة واحدة
  • بدء الإرشادات
  • تفعيل الإشعارات التنبيهية للإرشادات في الخلفية
  • محاكاة السفر على طول المسار (اختياري)
  • ضبط وضع الكاميرا على "تتبُّع" (اختياري)

Swift

func startNav() {
  var destinations = [GMSNavigationWaypoint]()
  destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
                                                 title: "PCC Natural Market")!)

  mapView.navigator?.setDestinations(destinations) { routeStatus in
    self.mapView.navigator?.isGuidanceActive = true
    self.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()
    self.mapView.cameraMode = .following
  }
}

Objective-C

- (void)startNav {
  NSArray<GMSNavigationWaypoint *> *destinations =
  @[[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJnUYTpNASkFQR_gSty5kyoUk"
                                             title:@"PCC Natural Market"],

  [_mapView.navigator setDestinations:destinations
                             callback:^(GMSRouteStatus routeStatus){
                               [_mapView.locationSimulator simulateLocationsAlongExistingRoute];
                               _mapView.navigator.guidanceActive = YES;
                               _mapView.cameraMode = GMSNavigationCameraModeFollowing;
                             }];
}

للتعرّف على معرّفات الأماكن، يُرجى الرجوع إلى معرّفات الأماكن.

سيناريوهات متعدّدة المحطات

يمكنك ضبط ما يصل إلى 25 نقطة مرور.

لا تتيح طريقة setDestinations الرحلات المتعدّدة المحطات. استخدِم continueToNextDestinationWithCompletion() لنقل نقطة المرور إلى المرحلة التالية من الرحلة.

تحديد وضع السفر

يحدّد وضع السفر نوع المسار الذي سيتم جلبه، والطريقة التي يتم بها تحديد مسار المستخدم. يمكنك ضبط أحد أوضاع السفر الأربعة لمسار معيّن: القيادة وركوب الدراجات والمشي وسيارات الأجرة. في وضعَي القيادة وسيارات الأجرة، يستند مسار المستخدم إلى اتجاه السفر، بينما في وضعَي ركوب الدراجات والمشي، يتم تمثيل المسار بالاتجاه الذي يشير إليه الجهاز (نحو أعلى الجهاز في الوضع الأفقي).

اضبط السمة travelMode لعرض الخريطة، كما هو موضّح في المثال التالي:

Swift

self.mapView.travelMode = .cycling

Objective-C

_mapView.travelMode = GMSNavigationTravelModeCycling;

تحديد الطرق التي يجب تجنُّبها

استخدِم سمتَي BOOLavoidsHighways وavoidsTolls لتجنُّب الطرق السريعة و/أو الطرق التي يتم تحصيل رسوم مرور عليها على طول مسار معيّن.

Swift

self.mapView.navigator?.avoidsTolls = true

Objective-C

_mapView.navigator.avoidsTolls = YES;

أداة البحث عن معرّف المكان

يمكنك استخدام أداة البحث عن معرّف المكان للعثور على معرّفات الأماكن لاستخدامها في وجهات المسار. أضِف وجهة من placeID باستخدام GMSNavigationWaypoint.

نص عائم

يمكنك إضافة نص عائم في أي مكان في تطبيقك، طالما لم يتم تغطية إسناد Google. لا تتيح حزمة Navigation SDK ربط النص بخط العرض/خط الطول على الخريطة أو بتصنيف. لمزيد من المعلومات، يُرجى الاطّلاع على النوافذ المنبثقة.