پلتفرم مورد نظر را انتخاب کنید: اندروید، iOS

پیکربندی اختلالات در زمان واقعی

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

ویژگی‌های اختلال در زمان واقعی

کیت توسعه نرم‌افزار ناوبری (Navigation SDK) شامل ویژگی‌های اختلال بلادرنگ زیر به عنوان بخشی از تجربه اصلی ناوبری است:

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

هشدارهای تعاملی برای اختلال در مسیرها

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

علائم راهنما در طول مسیرها

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

mapView.navigator.shouldDisplayPrompts = true

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

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

قبل از شروع ناوبری فعال، کارت‌های اطلاعاتی را در نمای کلی مسیر مشخص کنید

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

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

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

mapView.settings.showsIncidentCards = true

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

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

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

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

mapView.navigator.shouldDisplayPrompts = true

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

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

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

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

mapView.navigator.shouldDisplayPrompts = true

گزارش اختلال در طول ناوبری فعال

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

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

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

شما می‌توانید با استفاده از 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.
          }
     }

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

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

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

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

سویفت

// 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;

API قابلیت مشاهده سریع (آزمایشی)

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

سویفت

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