प्लैटफ़ॉर्म चुनें: 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 का इस्तेमाल करके, नेविगेशन के दौरान सूचना देने वाले प्रॉम्प्ट के डिसप्ले को कॉन्फ़िगर किया जा सकता है. इससे रास्तों पर कॉलआउट के डिसप्ले को भी कंट्रोल किया जा सकता है.

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

कस्टम नेविगेशन यूज़र इंटरफ़ेस (यूआई) के साथ काम करना

अगर नेविगेशन 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.
}
...