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