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

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

نظرة عامة

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

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

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

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

تفويض الخدمات المستندة إلى الموقع الجغرافي

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

  1. فعِّل إمكانات الموقع الجغرافي والخلفية في Xcode:

    1. افتح هدفك في Xcode واختَر علامة التبويب التوقيع والإمكانات. لمعرفة التفاصيل، يُرجى الاطّلاع على دليل Apple حول إضافة إمكانات إلى تطبيقك.
    2. أضِف إمكانات الموقع الجغرافي (دائمًا) والموقع الجغرافي (أثناء الاستخدام). في حقل النص لكل منهما، أضِف شرحًا موجزًا لسبب حاجة تطبيقك إلى خدمات الموقع الجغرافي (على سبيل المثال: "يحتاج هذا التطبيق إلى إذن لاستخدام خدمات الموقع الجغرافي للحصول على اتجاهات مفصّلة ").
    3. أضِف إمكانية أوضاع الخلفية، ثم ضَع علامة في مربّع الاختيار تعديلات الموقع الجغرافي. وبدون هذه الإمكانية، سيتعطّل التطبيق عند بدء التنقّل. لمعرفة التفاصيل، يُرجى الاطّلاع على دليل Apple حول التعامل مع تحديثات الموقع الجغرافي في الخلفية.
  2. لعرض مربّع حوار التفويض، يمكنك استدعاء طريقة requestAlwaysAuthorization() في مثيل مدير الموقع الجغرافي.

Swift

self.locationManager.requestAlwaysAuthorization()

Objective-C

[_locationManager requestAlwaysAuthorization];

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

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

تحتاج حزمة تطوير البرامج (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");
     }
   }];

تفويض أجهزة استشعار الحركة

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

لن تؤثر إضافة هذا المفتاح الآن في السلوك الحالي، ولكنّها تمنع تعطُّل عملية الإعداد عند ترقية حزمة تطوير البرامج (SDK) لاحقًا.

للاستعداد للترقيات المستقبلية لحزمة SDK، اضبط أذونات جهاز استشعار الحركة على النحو التالي:

  1. افتح هدفك في Xcode وانتقِل إلى علامة التبويب Info، أو افتح ملف Info.plist.

  2. أضِف مفتاحًا جديدًا: Privacy - Motion Usage Description (NSMotionUsageDescription).

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

وافِقوا على الأحكام والشروط

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

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 في المتصفّح باستخدام مصفوفة من وجهة واحدة أو أكثر من وجهات 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;

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

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

Swift

self.mapView.navigator?.avoidsTolls = true

Objective-C

_mapView.navigator.avoidsTolls = YES;

ضبط مستوى صوت الإرشادات الصوتية

لضبط مستوى صوت الإرشاد الصوتي، اضبط السمة volumeLevel في المتصفّح على منخفض أو عادي أو مرتفع. يستخدم المتصفّح آخر مستوى صوت تم حفظه، أو يتم ضبطه تلقائيًا على المستوى العادي.

Swift

self.mapView.navigator?.volumeLevel = .low

Objective-C

_mapView.navigator.volumeLevel = GMSNavigationVolumeLevelLow;

أداة البحث عن PlaceID

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

نص عائم

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