जगह की जानकारी देने वाला ऐडवांस कॉम्पोनेंट

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

जगह की जानकारी के ऐडवांस कॉन्फ़िगरेशन

ऐडवांस सुविधाओं का ऐक्सेस पाने के लिए, AdvancedPlaceDetailsView या AdvancedPlaceDetailsCompactView का इस्तेमाल करें.

कॉन्टेंट दिखाने के विकल्प

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

ऐक्शन बटन कॉन्फ़िगर करना

कार्रवाई वाले बटन हटाने या उन्हें पसंद के मुताबिक बनाने के लिए, AdvancedPlaceDetailsView या AdvancedPlaceDetailsCompactView के .cornerActions और .mainActions तरीकों का इस्तेमाल करें.

विज़ुअल एट्रिब्यूशन से जुड़ी ज़रूरी शर्तें

जगह की जानकारी वाला कंपैक्ट व्यू, जिसमें पसंद के मुताबिक बनाए गए बटन शामिल हैं
ऐडवांस Place Details कंपैक्ट व्यू में, पसंद के मुताबिक बनाया गया बटन

अहम जानकारी: आपको यह साफ़ तौर पर बताना होगा कि कस्टम ऐक्शन बटन, Google के अलावा किसी तीसरे पक्ष के साथ उपयोगकर्ता की जानकारी कब शेयर करेगा. विज़ुअल एट्रिब्यूशन की ज़रूरी शर्तें देखें.

दाईं ओर दिए गए उदाहरण में, एक कस्टम इमेज दिखाई गई है. इससे पता चलता है कि उपयोगकर्ता की जानकारी "Altostrat" को भेजी जाएगी.

खोज और फ़िल्टर करने के विकल्प लागू करना

मीडिया या समीक्षाओं को खोजने और फ़िल्टर करने की सुविधा चालू करने के लिए, AdvancedPlaceDetailsView या AdvancedPlaceDetailsCompactView के .searchMediaOptions और .searchReviewOptions तरीकों का इस्तेमाल करें.

पसंद के मुताबिक कॉन्टेंट स्लॉट बनाना

कॉन्टेंट स्लॉट को पसंद के मुताबिक प्लेस करने के विकल्प

कस्टम कॉन्टेंट स्लॉट की मदद से, अपने कॉन्टेंट को सीधे तौर पर पहले से तय किए गए लेआउट ज़ोन में जोड़ा जा सकता है. जैसे, एआई से बनाया गया कॉन्टेंट की खास जानकारी, यात्रा की योजना के टाइमस्टैंप या कस्टम बैज.

अपनी पसंद के मुताबिक कॉन्टेंट जोड़ने के लिए, AdvancedPlaceDetailsCompactView के .placeDetailsCompactContentSlot तरीके का इस्तेमाल करें. .basicSectionTop और .basicSectionBottom के लिए विज्ञापन उपलब्ध हैं.

कॉन्टेंट स्लॉट के लिए एट्रिब्यूशन से जुड़ी ज़रूरी शर्तें और कॉन्टेंट के सुझाव

कस्टम कॉन्टेंट स्लॉट को माउंट करने पर, डिसक्लोज़र अपने-आप अपडेट हो जाता है. इससे यह साफ़ तौर पर पता चलता है कि कौनसा कॉन्टेंट Google ने उपलब्ध कराया है और कौनसा कॉन्टेंट तीसरे पक्ष ने उपलब्ध कराया है.

ऐसा करें

Google Place की जानकारी और कस्टम कॉन्टेंट के बीच, विज़ुअल हैरारकी को साफ़ तौर पर बनाए रखें. इससे जानकारी के सोर्स के बारे में कोई भ्रम नहीं होगा.

जानकारी के सोर्स के बारे में अस्पष्टता को रोकना

ऐसा करें

अपने उपयोगकर्ताओं के मौजूदा लक्ष्यों के हिसाब से, स्थानीय और अहम जानकारी दें. उपयोगकर्ताओं को उनकी ज़रूरत के हिसाब से कॉन्टेंट उपलब्ध कराएं. जैसे, बुकिंग की रीयल-टाइम जानकारी या कमरों की मौजूदा उपलब्धता. इससे उपयोगकर्ताओं को तुरंत और बेहतर फ़ैसले लेने में मदद मिलती है.

काम की अहम जानकारी देना

क्या न करें

Google Places पर मौजूद जानकारी को डुप्लीकेट न करें. जैसे, रेटिंग, समीक्षाएं या कारोबार के खुले होने का समय. भले ही, आपने Google से मिले कॉन्टेंट को छिपा दिया हो. ऐसा करने से, लोगों को कॉन्टेंट के सोर्स के बारे में भ्रम हो सकता है. साथ ही, उन्हें यह पता नहीं चल पाएगा कि कॉन्टेंट Google से मिला है या किसी तीसरे पक्ष से.

Google पर मौजूद जगह की जानकारी को डुप्लीकेट न करें

क्या न करें

ऐसे दावे या बैज (उदाहरण के लिए, "सबसे अच्छा सुझाव!") न दिखाएं जिनके बारे में यह न बताया गया हो कि वे किसने किए हैं. ऐसा हो सकता है कि लोग उन्हें Google के आधिकारिक तौर पर किए गए प्रमोशन समझ लें. कस्टम कॉन्टेंट में, उसके सोर्स की जानकारी साफ़ तौर पर दी जानी चाहिए.

बिना एट्रिब्यूशन वाले दावे या बैज न दिखाएं

क्या न करें

कस्टम प्लेस कंटेनर में विज्ञापन, मार्केटिंग कॉपी, प्रमोशन वाले छूट या सदस्यता के प्रॉम्प्ट शामिल न करें.

विज्ञापन, मार्केटिंग कॉपी, प्रमोशन वाली छूट या सदस्यता के प्रॉम्प्ट शामिल न करें

जगह की ज़्यादा जानकारी के उदाहरण

जगह का नाम शामिल न करें

जगह का नाम शामिल न करने के लिए, AdvancedPlaceDetailsConfiguration के content पैरामीटर में .name शामिल न करें.

Swift

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

  // Query for loading the place details component.
  @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
    identifier: .placeID(peetsCoffeePlaceID)
  )
  @State private var favoritePlaces: Set<String> = []

  var body: some View {
    AdvancedPlaceDetailsView(
      query: $query,
      configuration: AdvancedPlaceDetailsConfiguration(
        content:[.address()],
        theme: PlacesMaterialTheme()
      ),
      placeDetailsCallback: { result in
        if let place = result.place {
          print("Place: \(place.description)")
        } else {
          print("Error: \(String(describing: result.error))")
        }
      }
    )
  }
}

ऐक्शन बटन हटाना

Swift

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

  @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
    identifier: .placeID(peetsCoffeePlaceID)
  )

  var body: some View {
    AdvancedPlaceDetailsView(
      query: $query,
      configuration: AdvancedPlaceDetailsConfiguration(
        content: AdvancedPlaceDetailsView.allContent,
        theme: PlacesMaterialTheme()
      ),
      placeDetailsCallback: { result in
        if let place = result.place {
          print("Place: \(place.description)")
        } else {
          print("Error: \(String(describing: result.error))")
        }
      }
    )
    .mainActions{ _ in
      return []
    }
  }
}

कस्टम और पहले से तय की गई कार्रवाइयां जोड़ना

इस सैंपल में, उपयोगकर्ता के लिए किसी जगह को पसंदीदा के तौर पर मार्क करने या अनमार्क करने का विकल्प जोड़ा गया है. साथ ही, इसमें पहले से तय की गई Maps में खोलें कार्रवाई भी शामिल है.

Swift

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

  @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
    identifier: .placeID(peetsCoffeePlaceID)
  )
  
  @State var favoritePlaces: Set<String> = []

  var body: some View {
    AdvancedPlaceDetailsView(
      query: $query,
      configuration: AdvancedPlaceDetailsConfiguration(
        content: AdvancedPlaceDetailsView.allContent,
        theme: PlacesMaterialTheme()
      ),
      placeDetailsCallback: { result in
        if let place = result.place {
          print("Place: \(place.description)")
        } else {
          print("Error: \(String(describing: result.error))")
        }
      }
    )
    .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
    }
    .cornerActions { place in
      var actions: [CornerPlaceActionElement] = []
      let placeID = place.placeID!
      if self.favoritePlaces.contains(placeID) {
        actions.append(
          .action(
            CornerPlaceAction(
              image: Image(systemName: "heart.fill"),
              accessibilityLabel: "Unfavorite",
            ) { _ in self.toggleFavorite(placeID) }
          )
        )
      } else {
        actions.append(
          .action(
            CornerPlaceAction(
              image: Image(systemName: "heart"),
              accessibilityLabel: "Favorite",
            ) { _ in self.toggleFavorite(placeID) }
          )
        )
      }
      actions.append(.actionId(.openMap(style: .primary)))
      return actions
    }
  }

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

समीक्षाओं और मीडिया को फ़िल्टर करना

इस कोड सैंपल में, सिर्फ़ ऐसी मीडिया और समीक्षाएं दिखती हैं जिनमें "कॉफ़ी" का ज़िक्र किया गया है.

Swift

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

  @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
    identifier: .placeID(peetsCoffeePlaceID)
  )
  let searchMediaOptions = SearchMediaOptions(query: "coffee")
  let searchReviewsOptions = SearchReviewsOptions(query: "coffee")

  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)")
      }
    }
  }
}

कॉन्टेंट स्लॉट बनाना

इस सैंपल में, basicSectionTop और basicSectionBottom स्लॉट में कॉन्टेंट जोड़ा गया है.

Swift

import SwiftUI
import PlacesSwift

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

    @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
      identifier: .placeID(peetsCoffeePlaceID)
    )

    var body: some View {
      AdvancedPlaceDetailsCompactView(
        orientation: .vertical,
        query: $query,
        configuration: AdvancedPlaceDetailsCompactConfiguration(
          content: AdvancedPlaceDetailsCompactView.allContent,
          theme: PlacesMaterialTheme()
        ),
        placeDetailsCallback: { _ in }
      )
      .placeDetailsCompactContentSlot(position: .basicSectionTop) { place in
        Text("Day 2 • 2:30 PM")
          .font(.caption)
          .fontWeight(.bold)
          .foregroundColor(.accentColor)
      }
      .placeDetailsCompactContentSlot(position: .basicSectionBottom) { place in
        VStack(alignment: .leading, spacing: 4) {
          Text("AI Notes")
            .font(.caption)
            .bold()
          Text("Great quiet atmosphere for morning meetings. Famous for house-roasted pour-overs.")
            .font(.footnote)
            .foregroundColor(.secondary)
        }
        .padding(8)
        .background(Color(.systemGray6))
        .cornerRadius(8)
      }
    }
}