Gelişmiş Yer Arama bileşeni

Yer Arama bileşeninin Advanced sürümü, Yer Arama Essentials ile aynı özellikleri sunar. Ayrıca, bileşenin işlem düğmelerini yapılandırmanıza ve gösterilen yorumlara ve medyaya arama ve filtreleme seçenekleri uygulamanıza olanak tanır.

Gelişmiş Yer Arama yapılandırması

Gelişmiş özelliklere erişmek için AdvancedPlaceSearchView'ı kullanın.

İşlem düğmelerini yapılandırma

İşlem düğmelerini kaldırmak veya özelleştirmek için AdvancedPlaceSearchView yönteminin .cornerActions ve .mainActions yöntemlerini kullanın.

Görsel ilişkilendirme koşulları

Özelleştirilmiş düğmeler içeren AdvancedPlace Search görünümü
Özelleştirilmiş düğmeyle yer arama sonucu

Önemli: Özel işlem düğmesi, kullanıcı bilgilerini Google dışında bir üçüncü tarafla paylaştığında bunu kullanıcılara açıkça belirtmeniz gerekir. Görsel ilişkilendirme koşullarını inceleyin.

Örnekte, kullanıcı bilgilerinin "Altostrat"a gönderileceğini açıkça belirten özel bir resim gösterilmektedir.

Arama ve filtreleme seçeneklerini uygulama

Medya veya yorumlarda arama ve filtrelemeyi etkinleştirmek için AdvancedPlaceSearchView'nin .searchMediaOptions ve .searchReviewOptions yöntemlerini kullanın.

Gelişmiş Yer Arama örnekleri

Ana işlem düğmesi oluşturma ve köşe işlemlerini kaldırma

Bu kod örneği, bir yeri favorilere eklemek veya favorilerden kaldırmak için ana işlem düğmesi oluşturur. Ayrıca, hiçbir köşe işleminin yapılandırılmadığından da emin olunur.

Swift

struct AdvancedPlaceSearchDemoView: View {
  private let configuration = AdvancedPlaceSearchConfiguration(
    content: [.address(), .rating(), .type()],
    preferTruncation: true, // default is false
    theme: PlacesMaterialTheme(),
    attributionPosition: .bottom, // default is top
    mediaSize = .medium, // default is .small
    selectable: true // default is false
  )
  // can also do let placeSearchViewRequest = .searchNearby(...) to  configure a searchNearby request
  @State private var placeSearchViewRequest = .searchByText(
    SearchByTextRequest(
      textQuery: "Googleplex",
      placeProperties: [.all],
      locationBias: CircularCoordinateRegion(
        center: CLLocationCoordinate2D(latitude: 0, longitude: 0),
        radius: 0
      )
    )
  )

  @State private var favoritePlaces: Set<String> = []

  var body: some View {
    AdvancedPlaceSearchView(
      orientation: .horizontal, // default is vertical
      request: placeSearchViewRequest,
      configuration: configuration
    )
    .onLoad { places in
      print("places: \(places)")
    }
    .onRequestError { error in
      print("error: \(error)")
    }
    .onPlaceSelected { place, index in
      print("place: \(place)")
      print("index: \(index)")
    }
    .mainActions { place in
      var actions: [MainPlaceActionElement] = []

      let placeID = place.placeID!
      if self.favoritePlaces.contains(placeID) {
        actions.append(
          .action(
            MainPlaceAction(
              image: Image(systemName: "heart.fill"),
              label: "Unfavorite"
            ) { _ in self.toggleFavorite(placeID) }
          )
        )
      } else {
        actions.append(
          .action(
            MainPlaceAction(
              image: Image(systemName: "heart"),
              label: "Favorite"
            ) { _ in self.toggleFavorite(placeID) }
          )
        )
      }
      actions.append(.actionId(.openMap(style: .primary)))
      return actions
    }
    // Ensures that there are no corner actions.
    .cornerActions { _ in
      return []
    }
  }

  func toggleFavorite(_ placeID: String) {
    if favoritePlaces.contains(placeID) {
      favoritePlaces.remove(placeID)
    } else {
      favoritePlaces.insert(placeID)
    }
  }
}

        

Yorumları ve medyayı filtreleme

Bu kod örneği, arama sonuçlarını yalnızca "kahve" kelimesinin geçtiği medya ve yorumları gösterecek şekilde filtreler.

Swift

struct DemoView: View {
  static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU"

  // Query for loading the place details component.
  @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
    identifier: .placeID(peetsCoffeePlaceID)
  )
  let searchMediaOptions = SearchMediaOptions(query: "coffee", rankPreference: .newest)
  let searchReviewOptions = SearchReviewsOptions(query: "coffee", rankPreference: .newest)

  var body: some View {
    AdvancedPlaceDetailsView(
      query: $query,
      configuration: AdvancedPlaceDetailsConfiguration(
        content: [.media(), .reviews()],
        theme: PlacesMaterialTheme()
      ),
      placeDetailsCallback: { _ in }
    )
    .searchMediaOptions(searchMediaOptions) { results in
      guard let result = results.first else { return }
      switch result {
      case .success(let summary):
        print("Summary: \(summary)")
      case .failure(let error):
        print("Error: \(error)")
      }
    }
    .searchReviewsOptions(searchReviewsOptions) { results in
      guard let result = results.first else { return }
      switch result {
      case .success(let summary):
        print("Summary: \(summary)")
      case .failure(let error):
        print("Error: \(error)")
      }
    }
  }