مسیری را پیمایش کنید

برای ترسیم یک مسیر درون برنامه خود به یک مقصد واحد، با استفاده از Navigation 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() از نمونه‌ی location manager فراخوانی کنید.

سویفت

self.locationManager.requestAlwaysAuthorization()

هدف-سی

[_locationManager requestAlwaysAuthorization];

اعلان‌های هشدار را برای راهنمایی در پس‌زمینه مجاز کنید

کیت توسعه نرم‌افزار ناوبری (Navigation SDK) برای نمایش اعلان‌های هشدار در هنگام اجرای برنامه در پس‌زمینه، به اجازه کاربر نیاز دارد. کد زیر را اضافه کنید تا از کاربر اجازه نمایش این اعلان‌ها را بگیرد:

سویفت

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.")
    }
}

هدف-سی

// 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");
     }
   }];

شرایط و ضوابط را بپذیرید

از کد زیر برای نمایش پنجره‌ی شرایط و ضوابط و فعال کردن ناوبری پس از پذیرش شرایط توسط کاربر استفاده کنید. توجه داشته باشید که این مثال شامل کد مربوط به سرویس‌های موقعیت مکانی و اعلان‌های هشدار راهنمایی (که قبلاً نشان داده شده است) نیز می‌شود.

سویفت

  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.
    }
  }

هدف-سی

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 تنظیم کنید.

مثال زیر نشان می‌دهد:

  • ایجاد یک مسیر جدید با دو مقصد.
  • راهنمایی اولیه.
  • فعال کردن اعلان‌های راهنمای پس‌زمینه.
  • شبیه‌سازی سفر در طول مسیر (اختیاری).
  • تنظیم حالت دوربین روی «دنبال کردن» (اختیاری).

سویفت

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
  }
}

هدف-سی

- (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;
                             }];
}

برای آشنایی با شناسه‌های مکان، لطفاً به شناسه‌های مکان مراجعه کنید.

سناریوهای چند مرحله‌ای

متد setDestinations از سفرهای چند توقفه پشتیبانی نمی‌کند. برای پیشبرد نقطه‌ی مسیر به مرحله‌ی بعدی سفر، از continueToNextDestination() استفاده کنید.

تنظیم حالت سفر

حالت سفر، نوع مسیری که دریافت می‌شود و نحوه‌ی تعیین مسیر کاربر را تعیین می‌کند. می‌توانید یکی از چهار حالت سفر را برای یک مسیر تنظیم کنید: رانندگی، دوچرخه‌سواری، پیاده‌روی و تاکسی. در حالت رانندگی و تاکسی، مسیر کاربر بر اساس جهت سفر تعیین می‌شود؛ در حالت دوچرخه‌سواری و پیاده‌روی، مسیر با جهتی که دستگاه رو به آن است (به سمت بالای دستگاه در حالت افقی) نمایش داده می‌شود.

ویژگی travelMode مربوط به نمای نقشه را همانطور که در مثال زیر نشان داده شده است، تنظیم کنید:

سویفت

self.mapView.travelMode = .cycling

هدف-سی

_mapView.travelMode = GMSNavigationTravelModeCycling;

جاده‌هایی را برای اجتناب تعیین کنید

برای جلوگیری از بزرگراه‌ها و/یا جاده‌های دارای عوارض در طول یک مسیر، از ویژگی‌های avoidsHighways و avoidsTolls BOOL استفاده کنید.

سویفت

self.mapView.navigator?.avoidsTolls = true

هدف-سی

_mapView.navigator.avoidsTolls = YES;

یابنده شناسه مکان

شما می‌توانید از PlaceID Finder برای یافتن شناسه‌های مکان جهت استفاده در مقاصد مسیر استفاده کنید. با استفاده از GMSNavigationWaypoint یک مقصد را از یک placeID اضافه کنید.

متن شناور

شما می‌توانید متن شناور را در هر کجای برنامه خود اضافه کنید، تا زمانی که از انتساب گوگل پشتیبانی نشود. SDK ناوبری از اتصال متن به عرض/طول جغرافیایی روی نقشه یا به یک برچسب پشتیبانی نمی‌کند. برای اطلاعات بیشتر، به پنجره‌های اطلاعات مراجعه کنید.