Platform seçin: Android iOS

Anlık kesintileri yapılandırma

Anlık kesintiler, kullanıcıları rotaları üzerindeki kesintiler konusunda uyaran ve karşılaştıkları kesintileri bildirmelerine ve doğrulamalarına olanak tanıyan bir özellikler topluluğudur. Araç kazaları, trafik sıkışıklığı, polis ve hız kamerası varlığı, inşaat, şerit kapatma ve belirli hava koşulları, aksaklıklara örnek olarak verilebilir. Bu sayfada, özel gezinme kullanıcı arayüzlerini kullanan uygulamalarla ilgili hususlar da dahil olmak üzere anlık kesinti özellikleri ve bunların yapılandırma seçenekleri açıklanmaktadır.

Anlık aksaklık özellikleri

Navigasyon SDK'sı, temel navigasyon deneyiminin bir parçası olarak aşağıdaki anlık aksaklık özelliklerini içerir:

Bu özellikler yapılandırılabilir ve varsayılan olarak etkindir. Aşağıdaki bölümlerde, özellikler ve kullanılabilir yapılandırma seçenekleri hakkında daha fazla bilgi verilmektedir.

Rotalar boyunca etkileşimli aksaklık açıklamaları

Bir uygulama, rotaya genel bakışta veya etkin navigasyon sırasında bir rota gösterdiğinde mevcut tüm aksaklıklar rota boyunca açıklama metinleri olarak görünür. Trafik katmanını etkinleştirdiğinizde rota dışı aksamalar da haritada gösterilir. Açıklama metinlerinde, kesintinin türünü gösteren bir simge bulunur.

Rotalar üzerindeki açıklama metinleri

shouldDisplayPrompts simgesini kullanarak rotalar üzerindeki aksaklık açıklama metinlerinin gösterilmesini kontrol edebilirsiniz. Bu simge, kullanıcı bir aksaklığa yaklaştığında otomatik uyarıların gösterilmesini de kontrol eder.

mapView.navigator.shouldDisplayPrompts = true

Kullanıcı bir açıklama metnine dokunduğunda kesinti ayrıntılarını gösterme

Bir kesinti açıklama metnine dokunduğunuzda daha fazla ayrıntı içeren bir bilgi kartı açılır. Bu durum, hem rota üzerindeki hem de rota dışındaki anonslar için geçerlidir. Ancak rota dışındaki anonslar yalnızca trafik katmanı etkinleştirilmişse gösterilir. Kartta kesinti türü, en son raporlanma zamanı ve bazen de kesintinin devam edip etmediğiyle ilgili oylama seçeneği gösterilir. Bilgi kartı türü ve yapılandırma seçenekleri, kullanıcının etkin gezinme durumunda olup olmamasına göre değişir.

Aktif navigasyonu başlatmadan önce rota genel bakışlarında açıklama metni içeren bilgi kartları

Kullanıcılar, aktif navigasyonu başlatmadan önce haritada veya rotaya genel bakışta rota üzerinde ya da rota dışında bir açıklama balonuna dokunarak bilgi kartını açabilir. Rota dışı uyarılar için trafik katmanının etkinleştirilmesi gerekir. Bilgi kartında kesintiyle ilgili daha fazla ayrıntı yer alır.

Genel bakış bilgi kartı

showsIncidentCards kullanarak kullanıcıların, rota özetlerindeki aksaklık açıklama metinlerine dokunarak daha fazla bilgi görüntüleme özelliğini kontrol edebilirsiniz.

mapView.settings.showsIncidentCards = true

Etkin navigasyon sırasında açıklama metni bilgi kartları

Kullanıcılar, aktif navigasyon sırasında rota üzerinde veya rota dışında bir aksaklık duyurusuna dokunarak bilgi kartını açabilir. Kartta kesinti türü ve son bildirim zamanı gösterilir. Ayrıca, kullanıcıların kesintinin devam edip etmediği konusunda oy kullanabileceği düğmeler bulunur.

Oylama, yol kapanmaları hariç olmak üzere kullanıcının 5 km yakınındaki rota üzerinde ve rota dışındaki aksaklıklar için kullanılabilir. Google, kesintinin gösterilmeye devam edilip edilmeyeceğini belirlemek için bu oyları işler. Oylar, diğer Google Haritalar ve Navigation SDK kullanıcılarının haritasında da görünebilir.

Etkin navigasyon bilgi kartı

shouldDisplayPrompts simgesini kullanarak aktif navigasyon sırasında aksaklık açıklama metinlerinin gösterilmesini ve bunlara dokunulabilmesini kontrol edebilirsiniz. Bu simge, rotalar boyunca açıklama metinlerinin gösterilmesini ve kullanıcı bir aksaklığa yaklaştığında otomatik uyarıların gösterilmesini de kontrol eder.

mapView.navigator.shouldDisplayPrompts = true

Etkin navigasyon sırasında oylama özelliğiyle otomatik aksaklık uyarıları

Etkin gezinme sırasında, bir kullanıcı rotadaki bir aksaklığa yaklaştığında aksaklıkla ilgili bilgilerin yer aldığı bir istem ve aksaklığın hâlâ devam edip etmediğiyle ilgili oylama düğmeleri gösterilir. Kullanıcılar tarafından gönderilen oylar Google tarafından işlenir ve diğer Google Haritalar ve Navigation SDK kullanıcıları için haritada gösterilebilir. Ayrıca, kesintinin gösterilmeye devam edilip edilmeyeceğini belirlemek için de kullanılabilir.

Etkin navigasyon bilgi kartı

Etkin gezinme sırasında uyarı istemlerinin gösterilmesini shouldDisplayPrompts ile yapılandırabilirsiniz. Bu ayar, rotalar üzerindeki açıklama metinlerinin gösterilmesini de kontrol eder.

mapView.navigator.shouldDisplayPrompts = true

Etkin navigasyon sırasında aksaklık bildirme

Etkin gezinme modunda, gezinme kullanıcı arayüzünde bir düğme görünür. Bu düğme, kullanıcıların rotaları üzerindeki yeni aksaklıkları bildirmesine olanak tanır. Kullanıcı düğmeye dokunduğunda, bildirilebilecek kesinti türlerinin yer aldığı bir menü gösterilir. Kullanıcıların gönderdiği raporlar Google tarafından işlenir ve diğer Google Haritalar ve Navigasyon SDK'sı kullanıcıları için haritada gösterilebilir.

Bildirme düğmesi Raporlama menüsü

Standart raporlama düğmesini gösterme veya gizleme

navigationReportIncidentButtonEnabled simgesini kullanarak etkin gezinme sırasında standart raporlama düğmesinin görünürlüğünü yapılandırabilirsiniz.

// Enables the incident reporting FAB to show in situations where incident
// reporting is possible.
mapView.settings.navigationReportIncidentButtonEnabled = true

Özel raporlama düğmesi ekleme

Standart kesinti raporlama düğmesi yerine gezinme kullanıcı arayüzüne özel bir raporlama düğmesi ekleyebilirsiniz. Kullanıcı özel düğmeyi tıkladığında presentReportIncidentsPanel yöntemini çağırarak raporlama menüsünün gösterilmesini tetikleyebilirsiniz. Özel bir raporlama düğmesi eklemeden önce, reportIncidentsAvailable işlevini çağırarak uygulamanın etkin gezinmede olduğunu ve kullanıcının raporlamanın etkin olduğu bir ülkede bulunduğunu doğrulayın. Bu koşullardan biri karşılanmıyorsa raporlama menüsü görünmez.

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

Özel gezinme kullanıcı arayüzleriyle çalışma

Navigasyon SDK'sını uygulamanızda özel kullanıcı arayüzü öğeleri varsa çakışmaları önlemek için gerçek zamanlı kesinti öğelerini göz önünde bulundurmanız gerekir.

Bildirme düğmesinin konumu

Aksaklık bildirme düğmesi varsayılan olarak haritanın alt ucunda/son köşesinde bulunur. Soldan sağa okunan dillerde sağ tarafta, sağdan sola okunan dillerde ise sol taraftadır. Özel kullanıcı arayüzü öğelerine yer açmak için raporlama düğmesini taşımanız gerekiyorsa bottomTrailingButtonsLayoutGuide kullanın.

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 (Deneysel)

İstem Görünürlüğü API'si, bir Navigation SDK kullanıcı arayüzü öğesi görünmeden önce ve öğe kaldırılır kaldırılmaz geri çağırma almak için bir dinleyici ekleyerek Navigation SDK tarafından oluşturulan kullanıcı arayüzü öğeleri ile kendi özel kullanıcı arayüzü öğeleriniz arasındaki çakışmaları önlemenize yardımcı olur. Bilgi kartları, istemler ve aksaklık raporlama menüsü gibi anlık aksaklık öğeleriyle ilgili geri aramaların yanı sıra Navigation SDK tarafından oluşturulan diğer bildirimler için de geri arama alabilirsiniz.

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