مكوِّن "البحث المتقدّم عن الأماكن"
يوفّر الإصدار المتقدّم من مكوِّن "البحث عن الأماكن" الميزات نفسها التي يوفّرها الإصدار Place Search Essentials. ويتيح لك أيضًا ضبط أزرار الإجراءات في المكوِّن وتطبيق خيارات البحث والفلترة على المراجعات والوسائط التي تظهر.
إعداد مكوِّن "البحث المتقدّم عن الأماكن"
استخدِمAdvancedPlaceSearchView للوصول إلى الميزات المتقدّمة.
ضبط أزرار الإجراءات
استخدِم الطريقتَين .cornerActions و.mainActions في AdvancedPlaceSearchView لإزالة أزرار الإجراءات أو تخصيصها.
متطلبات تحديد المصدر المرئي
ملاحظة مهمة: يجب أن توضّح للمستخدمين متى سيشارك زر إجراء مخصّص معلومات المستخدم مع جهة خارجية غير Google. يمكنك الاطّلاع على متطلبات تحديد المصدر المرئي.
يعرض المثال صورة مخصّصة توضّح أنّه سيتم إرسال معلومات المستخدم إلى "Altostrat".
تطبيق خيارات البحث والفلترة
استخدِم الطريقتَين .searchMediaOptions و.searchReviewOptions في AdvancedPlaceSearchView لتفعيل البحث عن الوسائط أو المراجعات وفلترتها.
أمثلة على مكوِّن "البحث المتقدّم عن الأماكن"
إنشاء زر إجراء رئيسي وإزالة الإجراءات الجانبية
ينشئ نموذج الرمز البرمجي هذا زر إجراء رئيسي لإضافة مكان إلى الأماكن المفضّلة أو إزالته منها. ويضمن أيضًا عدم ضبط أي إجراءات جانبية.
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) } } }
فلترة المراجعات والوسائط
يُفلتر نموذج الرمز البرمجي هذا نتائج البحث لعرض الوسائط والمراجعات التي تتضمّن كلمة "قهوة" فقط.
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)") } } }