انتخاب پلاتفرم: Android iOS

پیکربندی اختلال‌های هم‌زمان

اختلالات هم‌زمان مجموعه‌ای از ویژگی‌ها است که به کاربران درباره اختلالات درطول مسیرشان هشدار می‌دهد و به کاربران امکان می‌دهد اختلالاتی را که با آن‌ها مواجه می‌شوند گزارش و تأیید کنند. نمونه‌هایی از اختلالات شامل تصادفات خودرو، ازدحام ترافیک، حضور پلیس و دوربین‌های سرعت، ساخت‌وساز، بسته شدن خطوط، و شرایط آب‌وهوایی خاص است. این صفحه ویژگی‌های اختلال هم‌زمان و گزینه‌های پیکربندی آن‌ها را توضیح می‌دهد، ازجمله ملاحظات مربوط به برنامه‌هایی که از واسط‌های کاربر ناوبری سفارشی استفاده می‌کنند.

ویژگی‌های اختلال هم‌زمان

کیت توسعه نرم‌افزار پیمایش شامل ویژگی‌های اختلال هم‌زمان زیر به‌عنوان بخشی از تجربه پیمایش اصلی است:

این ویژگی‌ها قابل‌پیکربندی هستند و به‌طور پیش‌فرض فعال‌اند. بخش‌های زیر اطلاعات بیشتری درباره ویژگی‌ها و گزینه‌های پیکربندی دردسترس ارائه می‌دهد.

نوشته‌های راهنمای تعاملی اختلال درطول مسیرها

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

نوشته‌های راهنما درطول مسیرها

بااستفاده از shouldDisplayPrompts می‌توانید نمایش پیام‌های تماس اختلال را درطول مسیرها کنترل کنید. این تنظیم همچنین نمایش هشدارهای خودکارسازی‌شده را وقتی کاربر به اختلال نزدیک می‌شود کنترل می‌کند.

mapView.navigator.shouldDisplayPrompts = true

نمایش جزئیات اختلال وقتی کاربر روی یک نوشته راهنما ضربه می‌زند

با تک‌ضرب زدن روی توضیحات اختلال، کارت اطلاعاتی با جزئیات بیشتر باز می‌شود. این تنظیم هم برای نوشته‌های راهنمای مسیر و هم برای نوشته‌های راهنمای خارج از مسیر اعمال می‌شود، هرچند نوشته‌های راهنمای خارج از مسیر فقط درصورتی نشان داده می‌شود که لایه ترافیک فعال باشد. این کارت نوع اختلال، زمان آخرین گزارش آن، و گاهی اوقات گزینه‌ای برای رأی دادن درباره اینکه آیا اختلال هنوز وجود دارد یا نه را نمایش می‌دهد. نوع کارت اطلاعات و گزینه‌های پیکربندی آن بسته به اینکه کاربر درحال پیمایش فعال باشد یا نه متفاوت است.

کارت‌های اطلاعاتی توضیحی در نمای کلی مسیر، پیش‌از شروع ناوبری فعال

قبل‌از شروع ناوبری فعال، کاربران می‌توانند روی توضیحات درون‌مسیر یا برون‌مسیر در نقشه یا نمای کلی مسیر تک‌ضرب بزنند تا کارت اطلاعات باز شود. برای دریافت پیام‌های صوتی خارج از مسیر، لایه ترافیک باید فعال باشد. کارت اطلاعات جزئیات بیشتری درباره اختلال ارائه می‌دهد.

کارت اطلاعات نمای کلی

بااستفاده از showsIncidentCards می‌توانید توانایی کاربران را برای تک‌ضرب زدن روی برچسب‌های تماس اختلال در نمای کلی مسیر برای نمایش اطلاعات بیشتر کنترل کنید.

mapView.settings.showsIncidentCards = true

کارت‌های اطلاعاتی نوشته راهنما درطول پیمایش فعال

درطول پیمایش فعال، کاربران می‌توانند روی توضیحات اختلال در مسیر یا خارج از مسیر تک‌ضرب بزنند تا کارت اطلاعات باز شود. این کارت نوع اختلال و آخرین زمان گزارش‌شده را نشان می‌دهد و شامل دکمه‌هایی برای کاربران است تا رأی دهند که آیا اختلال هنوز وجود دارد یا خیر.

رأی‌گیری برای اختلالات در مسیر و خارج از مسیر در فاصله ۵ کیلومتری کاربر دردسترس است، به‌جز راه‌بندان‌ها. ‫Google این رأی‌ها را پردازش می‌کند تا به تعیین اینکه آیا نمایش اختلال ادامه یابد یا نه کمک کند. رأی‌ها ممکن است در نقشه برای دیگر کاربران «کیت توسعه نرم‌افزار Google Maps» و «کیت توسعه نرم‌افزار ناوبری» نیز نشان داده شود.

کارت اطلاعات ناوبری فعال

می‌توانید نمایش و قابلیت تک‌ضرب زدن بر روی نوشته‌های راهنمای اختلال را درطول پیمایش فعال بااستفاده از shouldDisplayPrompts کنترل کنید، که همچنین نمایش نوشته‌های راهنما درطول مسیرها و نمایش هشدارهای خودکار وقتی کاربر به اختلال نزدیک می‌شود را کنترل می‌کند.

mapView.navigator.shouldDisplayPrompts = true

هشدارهای اختلال خودکار با رأی‌گیری درطول ناوبری فعال

درطول ناوبری فعال، وقتی کاربر به اختلالی درطول مسیر نزدیک می‌شود، پیام‌واره‌ای با اطلاعات مربوط به اختلال و دکمه‌هایی برای رأی دادن درباره اینکه آیا اختلال هنوز وجود دارد یا نه ظاهر می‌شود. رأی‌های ارسال‌شده توسط کاربران توسط Google پردازش می‌شود و ممکن است برای سایر کاربران «کیت توسعه نرم‌افزار Google Maps و ناوبری» در نقشه نشان داده شود، و همچنین برای تعیین اینکه آیا اختلال همچنان نشان داده شود یا نه استفاده می‌شود.

کارت اطلاعات ناوبری فعال

بااستفاده از shouldDisplayPrompts می‌توانید نمایش پیام‌واره‌های هشدار را درحین پیمایش فعال پیکربندی کنید. این تنظیم همچنین نمایش راهنماهای کنار مسیر را کنترل می‌کند.

mapView.navigator.shouldDisplayPrompts = true

گزارش اختلال درحین پیمایش فعال

درطول حالت پیمایش فعال، دکمه‌ای در میانای کاربری پیمایش ظاهر می‌شود که به کاربران امکان می‌دهد اختلالات جدید را درطول مسیرشان گزارش کنند. وقتی کاربر روی دکمه تک‌ضرب می‌زند، منویی با انواع اختلالات دردسترس برای گزارش کردن ظاهر می‌شود. گزارش‌هایی که کاربران ارسال می‌کنند توسط Google پردازش می‌شود و ممکن است در نقشه برای سایر کاربران «کیت توسعه نرم‌افزار Google Maps و ناوبری» نمایش داده شود.

دکمه گزارش کردن منو گزارش‌دهی

نمایش دادن یا پنهان کردن دکمه گزارش استاندارد

می‌توانید نمایان بودن دکمه گزارش استاندارد را درطول پیمایش فعال بااستفاده از navigationReportIncidentButtonEnabled پیکربندی کنید.

// Enables the incident reporting FAB to show in situations where incident
// reporting is possible.
mapView.settings.navigationReportIncidentButtonEnabled = true

افزودن دکمه گزارش‌دهی سفارشی

به‌جای دکمه گزارش اختلال استاندارد، می‌توانید دکمه گزارش سفارشی به میانای پیمایش اضافه کنید. وقتی کاربر روی دکمه سفارشی کلیک می‌کند، می‌توانید با فراخوانی روش presentReportIncidentsPanel ، نمایش منو گزارش‌دهی را راه‌اندازی کنید. قبل‌از افزودن دکمه گزارش‌دهی سفارشی، با فراخوانی reportIncidentsAvailable، تأیید کنید که برنامه در ناوبری فعال است و کاربر در کشوری است که گزارش‌دهی در آن فعال است. اگر هریک از این موارد درست نباشد، منو گزارش‌دهی ظاهر نخواهد شد.

  // Check if reporting is available before displaying your button
  let isReportingAvailable = mapview.isIncidentReportingAvailable()
  customReportingIncidentButton.isHidden = !isReportingAvailable
  customReportingIncidentButton.addTarget(self, action: #selector(didTapReportIncidentButton), for: .touchUpInside)
  
  // Trigger the reporting flow if the button is clicked
  func didTapReportIncidentButton() {
          mapView.presentReportIncidentsPanel(self) { [weak self] error in
              guard let self = self else { return }
              if let error = error as NSError? {
                  if error.domain == GMSMapViewPresentReportIncidentPanelErrorDomain {
                      let errorCode = GMSMapViewPresentReportIncidentPanelErrorCode(rawValue: error.code)
                      
                      switch errorCode {
                      case .internal:
                          self.showErrorMessage(
                              title: "Error Presenting Report Incident Panel",
                              message: "An internal error occurred."
                          )
                      case .reportingNotAvailable:
                          self.showErrorMessage(
                              title: "Error Presenting Report Incident Panel",
                              message: "Reporting is not available."
                          )
                      case .none:
                          self.showErrorMessage(
                              title: "Error Presenting Report Incident Panel",
                              message: "An unknown error occurred."
                          )
                      }
                  } else {
                      // Handle other potential errors (e.g., network errors)
                      self.showErrorMessage(
                          title: "Error Presenting Report Incident Panel",
                          message: "An unexpected error occurred: \(error.localizedDescription)"
                      )
                  }
              }
              // If error is nil, the panel was presented successfully. You can add any extra logic here.
          }
     }

کار با واسط‌های کاربر پیمایش سفارشی

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

موقعیت دکمه گزارش کردن

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

Swift

// Create a new layout guide
let topRightLayoutGuide = UILayoutGuide()
self.view.addLayoutGuide(topRightLayoutGuide)

// Activate constraints using fixed constants here as an example
// assuming the current reporting button is of fixed height
topRightLayoutGuide.topAnchor.constraint(equalTo: _mapView.navigationHeaderLayoutGuide.bottomAnchor, constant: 50).isActive = true
topRightLayoutGuide.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -14).isActive = true

// Assign the layout guide
_mapView.bottomTrailingButtonsLayoutGuide = topRightLayoutGuide

// Create an alternate layout guide to use when the header and the footer are not full width
let topRightAlternateLayoutGuide = UILayoutGuide()
self.view.addLayoutGuide(topRightAlternateLayoutGuide)

// Activate constraints using fixed constants here as an example
// assuming the current RTD button is of fixed height
topRightAlternateLayoutGuide.topAnchor.constraint(equalTo: _mapView.navigationHeaderLayoutGuide.bottomAnchor, constant: 20).isActive = true
topRightAlternateLayoutGuide.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -10).isActive = true

// Assign the layout guide
_mapView.bottomTrailingButtonsAlternateLayoutGuide = topRightAlternateLayoutGuide

آبجکتیو-سی

// Create a new layout guide
UILayoutGuide *topRightLayoutGuide = [[UILayoutGuide alloc] init];
[self.view addLayoutGuide:topRightLayoutGuide];

// Activate constraints using fixed constants here as an example
// assuming the current RTD button is of fixed height
[[topRightLayoutGuide.topAnchor
    constraintEqualToAnchor:_mapView.navigationHeaderLayoutGuide.bottomAnchor
                   constant:50]
    setActive:YES];

[[topRightLayoutGuide.trailingAnchor
    constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor
                   constant:-14]
    setActive:YES];

// Assign the layout guide
_mapView.bottomTrailingButtonsLayoutGuide = topRightLayoutGuide;

// Create an alternate layout guide to use when the header and the footer are not full width
UILayoutGuide *topRightAlternateLayoutGuide = [[UILayoutGuide alloc] init];
[self.view addLayoutGuide:topRightAlternateLayoutGuide];

// Activate constraints using fixed constants here as an example
// assuming the current RTD button is of fixed height
[[topRightAlternateLayoutGuide.topAnchor
    constraintEqualToAnchor:_mapView.navigationHeaderLayoutGuide.bottomAnchor
                   constant:50]
    setActive:YES];

[[topRightAlternateLayoutGuide.trailingAnchor
    constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor
                   constant:-14]
    setActive:YES];

// Assign the layout guide
_mapView.bottomTrailingButtonsAlternateLayoutGuide = topRightAlternateLayoutGuide;

Prompt Visibility API (آزمایشی)

‫Prompt Visibility API با افزودن شنونده‌ای برای دریافت فراخوانی برگشتی قبل‌از اینکه عنصر میانای کاربر Navigation SDK ظاهر شود و به‌محض اینکه عنصر برداشته می‌شود، به شما کمک می‌کند از تداخل بین عناصر میانای کاربر تولیدشده توسط Navigation SDK و عناصر میانای کاربر سفارشی خودتان جلوگیری کنید. می‌توانید برای عناصر اختلال هم‌زمان، ازجمله کارت‌های اطلاعات، پیام‌واره‌ها، و منو گزارش اختلال، و همچنین برای اعلان‌های دیگری که «کیت توسعه نرم‌افزار پیمایش» تولید می‌کند، درخواست برگشتی دریافت کنید.

Swift

// Additional methods added to GMSNavigatorListener
...
func navigatorWillPresentPrompt(_ navigator: GMSNavigator) {
  // Hide any sort of custom UI element.
}

func navigatorDidDismissPrompt(_ navigator: GMSNavigator) {
  // Show any sort of custom UI element.
}
...

آبجکتیو-سی

// Additional methods added to GMSNavigatorListener
...
- (void)navigatorWillPresentPrompt:(GMSNavigator *)navigator {
  // Hide any sort of custom UI element.
}

- (void)navigatorDidDismissPrompt:(GMSNavigator *)navigator {
  // Show any sort of custom UI element.
}
...