Platform seçin: Android iOS

Gerçek zamanlı kesintileri yapılandırma

Gerçek zamanlı aksaklıklar, kullanıcıları rotalarındaki aksaklıklar konusunda uyaran ve karşılaştıkları aksaklıkları bildirmelerine ve doğrulamalarına olanak tanıyan bir dizi özelliktir. Araç kazaları, trafik sıkışıklığı, polis ve hız kamerası varlığı, inşaat, şerit kapatma ve belirli hava koşulları, aksamalara örnek olarak verilebilir. Bu sayfada, anlık aksaklık özellikleri ve bunların yapılandırma seçenekleri (özel navigasyon kullanıcı arayüzleri kullanan uygulamalarla ilgili dikkat edilmesi gereken noktalar dahil) açıklanmaktadır.

Gerçek zamanlı aksaklık özellikleri

Navigation SDK, temel navigasyon deneyiminin bir parçası olarak aşağıdaki anlık kesinti ö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 aksama açıklama metinleri

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

Rota üzerindeki açıklama metinleri

shouldDisplayPrompts kullanarak rotalar boyunca aksama açıklama metinlerinin gösterilmesini kontrol edebilirsiniz. Bu, kullanıcı bir aksamaya 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

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 açıklama metinleri için geçerlidir. Ancak rota dışındaki açıklama metinleri yalnızca trafik katmanı etkinleştirildiğinde görünür. Kartta aksaklığın türü, en son bildirildiği zaman ve bazen aksaklığın devam edip etmediğiyle ilgili oy verme seçeneği gösterilir. Bilgi kartı türü ve yapılandırma seçenekleri, kullanıcının aktif navigasyonda olup olmadığına bağlı olarak değişir.

Etkin navigasyonu başlatmadan önce rotaya genel bakışlarda açıklama bilgi kartları

Kullanıcılar, aktif navigasyonu başlatmadan önce haritada veya rotaya genel bakışta rota üzerindeki ya da rota dışındaki bir açıklama metnine dokunarak bilgi kartı açabilir. Rota dışı açıklama metinleri 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ı

Kullanıcıların rotaya genel bakışlarda aksama açıklama metinlerine dokunarak daha fazla bilgi görüntüleme özelliğini showsIncidentCards kullanarak kontrol edebilirsiniz.

mapView.settings.showsIncidentCards = true

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

Navigasyon etkin durumdayken kullanıcılar, rota üzerindeki veya rota dışındaki bir aksaklık açıklama metnine dokunarak bilgi kartı açabilir. Kartta kesinti türü ve en son bildirilen zaman gösterilir. Ayrıca kullanıcıların kesintinin devam edip etmediği konusunda oy kullanabileceği düğmeler bulunur.

Kullanıcılar, kapalı yollar hariç olmak üzere rota üzerindeki ve rota dışındaki 5 km mesafedeki aksaklıklar için oy kullanabilir. Google, kesintiyi göstermeye devam edip etmeyeceğini belirlemek için bu oyları işler. Oylar, diğer Google Haritalar ve Navigasyon SDK'sı kullanıcıları için haritada da gösterilebilir.

Etkin navigasyon bilgi kartı

shouldDisplayPrompts kullanarak aktif navigasyon sırasında aksama açıklama metinlerinin görüntülenmesini ve dokunulabilirliğini kontrol edebilirsiniz. Bu yöntem, rotalar boyunca açıklama metinlerinin görüntülenmesini ve kullanıcı bir aksamaya yaklaştığında otomatik uyarıların görüntülenmesini de kontrol eder.

mapView.navigator.shouldDisplayPrompts = true

Etkin navigasyon sırasında oylama ile otomatik aksaklık uyarıları

Aktif navigasyon sırasında, kullanıcı rota üzerindeki bir aksamaya yaklaştığında aksamayla ilgili bilgilerin ve aksamanın devam edip etmediğiyle ilgili oylama düğmelerinin yer aldığı bir istem gösterilir. Kullanıcılar tarafından gönderilen oylar Google tarafından işlenir ve diğer Google Haritalar ve Navigasyon SDK'sı kullanıcıları için haritada gösterilebilir. Ayrıca, aksaklığın gösterilmeye devam edip etmeyeceğini belirlemek için de kullanılabilir.

Etkin navigasyon bilgi kartı

Etkin navigasyon sırasında uyarı istemlerinin gösterimini shouldDisplayPrompts kullanarak yapılandırabilirsiniz. Bu, rotalar boyunca açıklama metinlerinin gösterimini de kontrol eder.

mapView.navigator.shouldDisplayPrompts = true

Etkin navigasyon sırasında aksaklık bildirme

Etkin gezinme modu sırasında, gezinme kullanıcı arayüzünde kullanıcıların rotaları boyunca yeni aksaklıkları bildirmelerine olanak tanıyan bir düğme görünür. Kullanıcı düğmeye dokunduğunda, bildirilebilecek aksama türlerini içeren 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.

Raporlama düğmesi Raporlama menüsü

Standart raporlama düğmesini gösterme veya gizleme

navigationReportIncidentButtonEnabled kullanarak etkin navigasyon 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 aksaklık bildirme düğmesi yerine, gezinme kullanıcı arayüzüne özel bir bildirme 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 raporlama düğmesi eklemeden önce, reportIncidentsAvailable yöntemini çağırarak uygulamanın etkin navigasyonda olduğunu ve kullanıcının raporlamanın etkin olduğu bir ülkede bulunduğunu doğrulayın. Bunlardan herhangi biri doğru değilse 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 navigasyon kullanıcı arayüzleriyle çalışma

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

Bildirme düğmesinin konumu

Varsayılan olarak, aksaklık bildirme düğmesi haritanın alt ucunda/arka köşesinde (soldan sağa diller için sağ tarafta, sağdan sola diller için sol tarafta) bulunur. Ö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)

Prompt Visibility API, 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. Bunun için, Navigation SDK kullanıcı arayüzü öğesi görünmeden hemen önce ve öğe kaldırılır kaldırılmaz geri çağırma almak üzere bir dinleyici ekler. Bilgi kartları, istemler ve aksama raporlama menüsü gibi gerçek zamanlı aksama öğelerinin yanı sıra Navigasyon SDK'sı tarafından oluşturulan diğer bildirimler için geri çağırmalar 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.
}
...