प्लैटफ़ॉर्म चुनें: Android iOS

रीयल-टाइम में होने वाली रुकावटों को कॉन्फ़िगर करना

रीयल-टाइम में होने वाली रुकावटें, सुविधाओं का एक कलेक्शन है. इनकी मदद से, लोगों को उनके रास्ते में आने वाली रुकावटों के बारे में सूचनाएं मिलती हैं. साथ ही, लोग अपने रास्ते में आने वाली रुकावटों की शिकायत कर सकते हैं और उनकी पुष्टि कर सकते हैं. रुकावटों के उदाहरणों में, वाहन दुर्घटनाएं, ट्रैफ़िक जाम, पुलिस और स्पीड कैमरा की मौजूदगी, कंस्ट्रक्शन, लेन बंद होना, और मौसम की कुछ स्थितियां शामिल हैं. इस पेज पर, रीयल-टाइम में होने वाली रुकावटों की सुविधाओं और उन्हें कॉन्फ़िगर करने के विकल्पों के बारे में बताया गया है. इसमें, कस्टम नेविगेशन यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करने वाले ऐप्लिकेशन के लिए ज़रूरी बातों के बारे में भी बताया गया है.

रीयल-टाइम में होने वाली रुकावटों की सुविधाएं

Navigation SDK में, नेविगेशन के मुख्य अनुभव के तहत, रीयल-टाइम में होने वाली रुकावटों की ये सुविधाएं शामिल हैं:

इन सुविधाओं को कॉन्फ़िगर किया जा सकता है. ये डिफ़ॉल्ट रूप से चालू रहती हैं. यहां दिए गए सेक्शन में, इन सुविधाओं और उपलब्ध कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानकारी दी गई है.

रास्तों पर किसी तरह की रुकावट वाले इंटरैक्टिव कॉलआउट

जब कोई ऐप्लिकेशन, रास्ते की जानकारी या नेविगेशन चालू रहने के दौरान कोई रूट दिखाता है, तो उस रूट पर मौजूद मौजूदा रुकावटें, कॉलआउट के तौर पर दिखती हैं. ट्रैफ़िक लेयर चालू करने पर, रूट से बाहर की रुकावटें भी मैप पर दिखती हैं. कॉलआउट में एक आइकॉन शामिल होता है, जिससे रुकावट के टाइप के बारे में पता चलता है.

रास्ते के साथ दिखने वाले कॉलआउट

shouldDisplayPrompts का इस्तेमाल करके, रास्तों पर रुकावटों के कॉलआउट दिखने की सुविधा को कंट्रोल किया जा सकता है. इससे, किसी रुकावट के पास पहुंचने पर, ऑटोमेटेड चेतावनियां दिखने की सुविधा को भी कंट्रोल किया जा सकता है.

mapView.navigator.shouldDisplayPrompts = true

जब कोई व्यक्ति कॉलआउट पर टैप करे, तो रुकावट की ज़्यादा जानकारी दिखाना

रुकावट के कॉलआउट पर टैप करने से, ज़्यादा जानकारी वाला एक जानकारी कार्ड खुलता है. यह सुविधा, रूट पर और रूट से बाहर के कॉलआउट, दोनों पर लागू होती है. हालांकि, रूट से बाहर के कॉलआउट सिर्फ़ तब दिखते हैं, जब ट्रैफ़िक लेयर चालू हो. कार्ड में, रुकावट का टाइप, पिछली बार इसकी शिकायत कब की गई थी, और कभी-कभी यह वोट करने का विकल्प दिखता है कि रुकावट अब भी मौजूद है या नहीं. जानकारी कार्ड का टाइप और इसे कॉन्फ़िगर करने के विकल्प, इस बात पर निर्भर करते हैं कि उपयोगकर्ता नेविगेशन चालू करके गाड़ी चला रहा है या नहीं.

नेविगेशन चालू करने से पहले, रूट की खास जानकारी में कॉलआउट के सूचना कार्ड

नेविगेशन चालू करने से पहले, लोग मैप या रास्ते की जानकारी में, रूट पर या रूट से बाहर के कॉलआउट पर टैप करके, जानकारी कार्ड खोल सकते हैं. रूट से बाहर के कॉलआउट के लिए, ट्रैफ़िक लेयर चालू होनी चाहिए. जानकारी कार्ड में, रुकावट के बारे में ज़्यादा जानकारी मिलती है.

खास जानकारी वाला कार्ड

`showsIncidentCards` का इस्तेमाल करके, रूट की खास जानकारी में रुकावटों के कॉलआउट पर टैप करके ज़्यादा जानकारी देखने की सुविधा को कंट्रोल किया जा सकता है.

mapView.settings.showsIncidentCards = true

नेविगेशन चालू रहने के दौरान, कॉलआउट के सूचना कार्ड

नेविगेशन चालू रहने के दौरान, लोग रूट पर या रूट से बाहर की रुकावट के कॉलआउट पर टैप करके, जानकारी कार्ड खोल सकते हैं. कार्ड में, रुकावट का टाइप और पिछली बार इसकी शिकायत कब की गई थी, यह जानकारी दिखती है. साथ ही, इसमें ऐसे बटन शामिल होते हैं जिनकी मदद से लोग यह वोट कर सकते हैं कि रुकावट अब भी मौजूद है या नहीं.

वोटिंग की सुविधा, रूट पर और रूट से बाहर की उन रुकावटों के लिए उपलब्ध है जो उपयोगकर्ता से 5 किलोमीटर की दूरी पर हैं. इसमें, सड़क बंद होने की जानकारी शामिल नहीं है. Google इन वोटों को प्रोसेस करता है, ताकि यह तय किया जा सके कि रुकावट की जानकारी दिखानी है या नहीं. वोट, Google Maps और Navigation SDK का इस्तेमाल करने वाले अन्य लोगों को भी मैप पर दिख सकते हैं.

नेविगेशन की जानकारी देने वाला ऐक्टिव कार्ड

shouldDisplayPrompts का इस्तेमाल करके, नेविगेशन चालू रहने के दौरान, रुकावटों के कॉलआउट दिखने और उन पर टैप करने की सुविधा को कंट्रोल किया जा सकता है. इससे, रास्तों पर कॉलआउट दिखने की सुविधा और किसी रुकावट के पास पहुंचने पर, ऑटोमेटेड चेतावनियां दिखने की सुविधा को भी कंट्रोल किया जा सकता है.

mapView.navigator.shouldDisplayPrompts = true

नेविगेशन चालू रहने के दौरान, वोटिंग के साथ रुकावटों के बारे में ऑटोमेटेड सूचनाएं

नेविगेशन चालू रहने के दौरान, जब कोई व्यक्ति किसी रूट पर मौजूद रुकावट के पास पहुंचता है, तो एक प्रॉम्प्ट दिखता है. इसमें, रुकावट के बारे में जानकारी और यह वोट करने के लिए बटन होते हैं कि रुकावट अब भी मौजूद है या नहीं. लोगों के सबमिट किए गए वोटों को Google प्रोसेस करता है. साथ ही, ये वोट, Google Maps और Navigation SDK का इस्तेमाल करने वाले अन्य लोगों को मैप पर दिख सकते हैं. इसके अलावा, इनका इस्तेमाल यह तय करने के लिए किया जा सकता है कि रुकावट की जानकारी दिखानी है या नहीं.

नेविगेशन की जानकारी देने वाला ऐक्टिव कार्ड

`shouldDisplayPrompts` का इस्तेमाल करके, नेविगेशन चालू रहने के दौरान, चेतावनियों के प्रॉम्प्ट दिखने की सुविधा को कॉन्फ़िगर किया जा सकता है. इससे, रास्तों पर कॉलआउट दिखने की सुविधा को भी कंट्रोल किया जा सकता है.shouldDisplayPrompts

mapView.navigator.shouldDisplayPrompts = true

नेविगेशन चालू रहने के दौरान, रुकावटों की शिकायत करना

नेविगेशन मोड चालू रहने के दौरान, नेविगेशन यूज़र इंटरफ़ेस (यूआई) पर एक बटन दिखता है. इसकी मदद से, लोग अपने रूट पर मौजूद नई रुकावटों की शिकायत कर सकते हैं. जब कोई व्यक्ति बटन पर टैप करता है, तो शिकायत करने के लिए, उपलब्ध रुकावटों के टाइप वाला एक मेन्यू दिखता है. लोगों की सबमिट की गई शिकायतों को Google प्रोसेस करता है. साथ ही, ये शिकायतें, 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 का इस्तेमाल करें.

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

Objective-C

// 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 का यूज़र इंटरफ़ेस (यूआई) एलिमेंट दिखने से पहले और एलिमेंट के हटाए जाने के तुरंत बाद, कॉलबैक मिलता है. आपको रीयल-टाइम में होने वाली रुकावटों के एलिमेंट के लिए कॉलबैक मिल सकते हैं. इनमें सूचना कार्ड, प्रॉम्प्ट, और रुकावटों की शिकायत करने वाला मेन्यू शामिल है. साथ ही, 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.
}
...

Objective-C

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