پیکربندی اختلالات در زمان واقعی
اختلالات آنی مجموعهای از ویژگیها هستند که به کاربران در مورد اختلالات در طول مسیرشان هشدار میدهند و به کاربران امکان میدهند اختلالاتی را که با آنها مواجه میشوند گزارش و تأیید کنند. نمونههایی از اختلالات شامل تصادفات وسایل نقلیه، ازدحام ترافیک، حضور پلیس و دوربینهای کنترل سرعت، ساخت و ساز، بسته شدن خطوط و شرایط خاص آب و هوایی است. این صفحه ویژگیهای اختلالات آنی و گزینههای پیکربندی آنها، از جمله ملاحظات مربوط به برنامههایی که از رابطهای کاربری ناوبری سفارشی استفاده میکنند، را توضیح میدهد.
ویژگیهای اختلال در زمان واقعی
کیت توسعه نرمافزار ناوبری (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. } ...