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

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

نظرة عامة

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

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

الاطّلاع على الرمز

طلب الإذن من المستخدم

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

تفويض خدمات الموقع الجغرافي

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

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

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

Swift

self.locationManager.requestAlwaysAuthorization()

Objective-C

[_locationManager requestAlwaysAuthorization];

تفويض إشعارات التنبيهات للحصول على إرشادات في الخلفية

يحتاج حِزم تطوير البرامج 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")!)
  destinations.append(GMSNavigationWaypoint.init(placeID:"ChIJJ326ROcSkFQRBfUzOL2DSbo",
                                                 title:"Marina Park")!)

  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"],
    [[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJJ326ROcSkFQRBfUzOL2DSbo"
                                             title:@"Marina Park"]];

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

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

ضبط وضع السفر

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

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

Swift

self.mapView.travelMode = .cycling

Objective-C

_mapView.travelMode = GMSNavigationTravelModeCycling;

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

استخدِم السمتَين avoidsHighways وavoidsTolls BOOL لتجنّب الطرق السريعة و/أو الطرق ذات الرسوم على طول مسار معيّن.

Swift

self.mapView.navigator?.avoidsTolls = true

Objective-C

_mapView.navigator.avoidsTolls = YES;

أداة العثور على رقم تعريف المكان

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

النص العائم

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