บริการเติมข้อความอัตโนมัติใน Places SDK สำหรับ Android จะแสดงการคาดคะเนสถานที่เพื่อตอบสนองข้อความค้นหาของผู้ใช้ เมื่อผู้ใช้พิมพ์ บริการเติมข้อความอัตโนมัติจะแสดงคำแนะนำสำหรับสถานที่ เช่น ธุรกิจ ที่อยู่ เครื่องหมายบวก และจุดสนใจ
คุณเพิ่มการเติมข้อความอัตโนมัติลงในแอปได้ด้วยวิธีต่อไปนี้
- เพิ่มวิดเจ็ตเติมข้อความอัตโนมัติเพื่อประหยัดเวลาในการพัฒนาและให้ผู้ใช้ได้รับประสบการณ์ที่สอดคล้องกัน
- รับการคาดการณ์สถานที่โดยใช้โปรแกรมเพื่อสร้างประสบการณ์ของผู้ใช้ที่กำหนดเอง
เพิ่มวิดเจ็ตการเติมข้อความอัตโนมัติ
วิดเจ็ตเติมข้อความอัตโนมัติเป็นกล่องโต้ตอบการค้นหาที่มีฟังก์ชันการเติมข้อความอัตโนมัติในตัว เมื่อผู้ใช้ป้อนข้อความค้นหา วิดเจ็ตจะแสดงรายการสถานที่ที่คาดคะเน ให้เลือก เมื่อผู้ใช้เลือกแล้ว ระบบจะแสดงผลอินสแตนซ์ Place
ซึ่งจากนั้นแอปจะใช้ดูรายละเอียดเกี่ยวกับสถานที่ที่เลือกได้
การเพิ่มวิดเจ็ตเติมข้อความอัตโนมัติลงในแอปสามารถทำได้ 2 วิธีดังนี้
- ตัวเลือกที่ 1: ฝัง
AutocompleteSupportFragment
- ตัวเลือกที่ 2: ใช้ Intent เพื่อเปิดกิจกรรมการเติมข้อความอัตโนมัติ
ตัวเลือกที่ 1: ฝัง AutocompleteSupportFragment
หากต้องการเพิ่ม AutocompleteSupportFragment
ลงในแอป ให้ทำตามขั้นตอนต่อไปนี้
- เพิ่มส่วนย่อยในเลย์เอาต์ XML ของกิจกรรม
- เพิ่ม Listener ในกิจกรรมหรือ Fragment
เพิ่ม AutocompleteSupportFragment ในกิจกรรม
หากต้องการเพิ่ม AutocompleteSupportFragment
ลงในกิจกรรม ให้เพิ่มส่วนย่อยใหม่ในเลย์เอาต์ XML เช่น
<fragment android:id="@+id/autocomplete_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
/>
- โดยค่าเริ่มต้น ส่วนย่อยจะไม่มีเส้นขอบหรือพื้นหลัง หากต้องการแสดงผลที่สม่ำเสมอ ให้ฝัง Fragment ภายในองค์ประกอบเลย์เอาต์อื่น เช่น CardView
- หากคุณใช้ Fragment การเติมข้อความอัตโนมัติและต้องการลบล้าง
onActivityResult
คุณต้องเรียกใช้super.onActivityResult
มิเช่นนั้น Fragment จะทำงานไม่ถูกต้อง
เพิ่ม PlaceSelectionListener ในกิจกรรม
แฮนเดิล PlaceSelectionListener
จะแสดงสถานที่ตามการเลือกของผู้ใช้ โค้ดต่อไปนี้แสดงการสร้างการอ้างอิงไปยัง Fragment และเพิ่ม Listener ลงใน AutocompleteSupportFragment
Kotlin
// Initialize the AutocompleteSupportFragment. val autocompleteFragment = supportFragmentManager.findFragmentById(R.id.autocomplete_fragment) as AutocompleteSupportFragment // Specify the types of place data to return. autocompleteFragment.setPlaceFields(listOf(Place.Field.ID, Place.Field.NAME)) // Set up a PlaceSelectionListener to handle the response. autocompleteFragment.setOnPlaceSelectedListener(object : PlaceSelectionListener { override fun onPlaceSelected(place: Place) { // TODO: Get info about the selected place. Log.i(TAG, "Place: ${place.name}, ${place.id}") } override fun onError(status: Status) { // TODO: Handle the error. Log.i(TAG, "An error occurred: $status") } })
Java
// Initialize the AutocompleteSupportFragment. AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment) getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment); // Specify the types of place data to return. autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME)); // Set up a PlaceSelectionListener to handle the response. autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { @Override public void onPlaceSelected(@NonNull Place place) { // TODO: Get info about the selected place. Log.i(TAG, "Place: " + place.getName() + ", " + place.getId()); } @Override public void onError(@NonNull Status status) { // TODO: Handle the error. Log.i(TAG, "An error occurred: " + status); } });
ตัวเลือกที่ 2: ใช้ Intent เพื่อเปิดกิจกรรมการเติมข้อความอัตโนมัติ
หากต้องการให้แอปใช้ขั้นตอนการนำทางอื่น (เช่น เพื่อเรียกใช้การเติมข้อความอัตโนมัติจากไอคอนแทนช่องค้นหา) แอปสามารถเปิดการเติมข้อความอัตโนมัติได้โดยใช้ Intent
หากต้องการเปิดใช้งานวิดเจ็ตเติมข้อความอัตโนมัติโดยใช้ Intent ให้ทำตามขั้นตอนต่อไปนี้
- ใช้
Autocomplete.IntentBuilder
เพื่อสร้าง Intent โดยผ่านโหมดAutocomplete
ที่ต้องการ - กำหนด Launcher ของผลการค้นหากิจกรรม
registerForActivityResult
ที่สามารถใช้เพื่อเปิด Intent และจัดการการคาดคะเนสถานที่ที่ผู้ใช้เลือกไว้ในผลลัพธ์
สร้าง Intent ที่เติมข้อความอัตโนมัติ
ตัวอย่างด้านล่างใช้ Autocomplete.IntentBuilder
เพื่อสร้าง Intent เพื่อเปิดวิดเจ็ตเติมข้อความอัตโนมัติเป็น Intent
Kotlin
// Set the fields to specify which types of place data to // return after the user has made a selection. val fields = listOf(Place.Field.ID, Place.Field.NAME) // Start the autocomplete intent. val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields) .build(this) startAutocomplete.launch(intent)
Java
// Set the fields to specify which types of place data to // return after the user has made a selection. List<Place.Field> fields = Arrays.asList(Place.Field.ID, Place.Field.NAME); // Start the autocomplete intent. Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields) .build(this); startAutocomplete.launch(intent);
เมื่อใช้ Intent เพื่อเปิดวิดเจ็ตเติมข้อความอัตโนมัติ คุณสามารถเลือกจากโหมดการแสดงผลแบบวางซ้อนหรือเต็มหน้าจอ ภาพหน้าจอต่อไปนี้จะแสดง โหมดการแสดงผลแต่ละโหมดตามลำดับ
ลงทะเบียนโค้ดเรียกกลับสำหรับผลลัพธ์ Intent
หากต้องการรับการแจ้งเตือนเมื่อผู้ใช้เลือกสถานที่แล้ว ให้กำหนด Launcher registerForActivityResult()
ซึ่งจะเปิดกิจกรรมและจัดการกับผลลัพธ์ดังที่แสดงในตัวอย่างต่อไปนี้ หากผู้ใช้เลือกการคาดการณ์ ระบบจะส่งการคาดการณ์ใน Intent ที่อยู่ในออบเจ็กต์ผลลัพธ์ เนื่องจาก Intent สร้างโดย Autocomplete.IntentBuilder
เมธอด Autocomplete.getPlaceFromIntent()
จึงดึงออบเจ็กต์ Place จากออบเจ็กต์ดังกล่าวได้
Kotlin
private val startAutocomplete = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> if (result.resultCode == Activity.RESULT_OK) { val intent = result.data if (intent != null) { val place = Autocomplete.getPlaceFromIntent(intent) Log.i( TAG, "Place: ${place.name}, ${place.id}" ) } } else if (result.resultCode == Activity.RESULT_CANCELED) { // The user canceled the operation. Log.i(TAG, "User canceled autocomplete") } }
Java
private final ActivityResultLauncher<Intent> startAutocomplete = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == Activity.RESULT_OK) { Intent intent = result.getData(); if (intent != null) { Place place = Autocomplete.getPlaceFromIntent(intent); Log.i(TAG, "Place: ${place.getName()}, ${place.getId()}"); } } else if (result.getResultCode() == Activity.RESULT_CANCELED) { // The user canceled the operation. Log.i(TAG, "User canceled autocomplete"); } });
การรับการคาดคะเนสถานที่โดยใช้โปรแกรม
คุณสร้าง UI การค้นหาที่กำหนดเองเพื่อเป็นทางเลือกสำหรับ UI ที่วิดเจ็ตเติมข้อความอัตโนมัติมีให้ได้ ในการดำเนินการดังกล่าว แอปของคุณต้องได้รับการคาดคะเนสถานที่
โดยใช้โปรแกรม แอปของคุณสามารถรับรายการชื่อและ/หรือที่อยู่ที่คาดคะเนจาก API การเติมข้อความอัตโนมัติได้โดยการเรียก
PlacesClient.findAutocompletePredictions()
ผ่าน
FindAutocompletePredictionsRequest
ออบเจ็กต์ด้วยพารามิเตอร์ต่อไปนี้
- จำเป็น: สตริง
query
ที่มีข้อความที่ผู้ใช้พิมพ์ - แนะนำ:
AutocompleteSessionToken
ซึ่งจัดกลุ่มข้อความค้นหาและขั้นตอนการเลือกของการค้นหาของผู้ใช้ไว้ในเซสชันที่แยกกันเพื่อวัตถุประสงค์ในการเรียกเก็บเงิน เซสชันจะเริ่มต้นเมื่อผู้ใช้เริ่มพิมพ์คำค้นหา และสรุปเมื่อผู้ใช้เลือกสถานที่ - แนะนำ: ออบเจ็กต์
RectangularBounds
ซึ่งระบุขอบเขตละติจูดและลองจิจูดเพื่อจำกัดผลลัพธ์ไปยังภูมิภาคที่ระบุ - ไม่บังคับ: รหัสประเทศ 2 ตัวอักษร (ISO 3166-1 Alpha-2) อย่างน้อย 1 ตัว) ซึ่งระบุประเทศที่ควรจำกัดผลการค้นหา
ไม่บังคับ: คำตอบ
TypeFilter
ซึ่งใช้เพื่อจำกัดผลการค้นหาให้แสดงเฉพาะประเภทสถานที่ที่ระบุได้ ประเภทสถานที่ที่รองรับมีดังนี้TypeFilter.GEOCODE
– แสดงเฉพาะผลลัพธ์การระบุพิกัดทางภูมิศาสตร์ ไม่ใช่ธุรกิจ ใช้คำขอนี้เพื่อแยกแยะผลลัพธ์ที่ตำแหน่งที่ระบุอาจไม่แน่ชัดTypeFilter.ADDRESS
– แสดงเฉพาะผลลัพธ์ของการเติมข้อความอัตโนมัติที่มีที่อยู่ที่ถูกต้อง ใช้ประเภทนี้เมื่อคุณทราบว่าผู้ใช้กำลังมองหาที่อยู่ที่ระบุอย่างครบถ้วนTypeFilter.ESTABLISHMENT
– แสดงเฉพาะสถานที่ที่เป็นธุรกิจTypeFilter.REGIONS
– แสดงเฉพาะสถานที่ที่ตรงกับประเภทต่อไปนี้LOCALITY
SUBLOCALITY
POSTAL_CODE
COUNTRY
ADMINISTRATIVE_AREA_LEVEL_1
ADMINISTRATIVE_AREA_LEVEL_2
TypeFilter.CITIES
– แสดงเฉพาะผลลัพธ์ที่ตรงกับLOCALITY
หรือADMINISTRATIVE_AREA_LEVEL_3
ไม่บังคับ:
LatLng
ที่ระบุตำแหน่งของต้นทางสำหรับคำขอ เมื่อเรียกใช้setOrigin()
บริการจะแสดงผลระยะทางเป็นเมตร (distanceMeters
) จากต้นทางที่ระบุสำหรับการคาดการณ์การเติมข้อความอัตโนมัติแต่ละรายการในการตอบกลับ
สำหรับข้อมูลเกี่ยวกับประเภทสถานที่ โปรดดูคู่มือเกี่ยวกับประเภทสถานที่
ตัวอย่างด้านล่างแสดงการเรียก PlacesClient.findAutocompletePredictions()
ที่สมบูรณ์
Kotlin
// Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest, // and once again when the user makes a selection (for example when calling fetchPlace()). val token = AutocompleteSessionToken.newInstance() // Create a RectangularBounds object. val bounds = RectangularBounds.newInstance( LatLng(-33.880490, 151.184363), LatLng(-33.858754, 151.229596) ) // Use the builder to create a FindAutocompletePredictionsRequest. val request = FindAutocompletePredictionsRequest.builder() // Call either setLocationBias() OR setLocationRestriction(). .setLocationBias(bounds) //.setLocationRestriction(bounds) .setOrigin(LatLng(-33.8749937, 151.2041382)) .setCountries("AU", "NZ") .setTypesFilter(listOf(PlaceTypes.ADDRESS)) .setSessionToken(token) .setQuery(query) .build() placesClient.findAutocompletePredictions(request) .addOnSuccessListener { response: FindAutocompletePredictionsResponse -> for (prediction in response.autocompletePredictions) { Log.i(TAG, prediction.placeId) Log.i(TAG, prediction.getPrimaryText(null).toString()) } }.addOnFailureListener { exception: Exception? -> if (exception is ApiException) { Log.e(TAG, "Place not found: ${exception.statusCode}") } }
Java
// Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest, // and once again when the user makes a selection (for example when calling fetchPlace()). AutocompleteSessionToken token = AutocompleteSessionToken.newInstance(); // Create a RectangularBounds object. RectangularBounds bounds = RectangularBounds.newInstance( new LatLng(-33.880490, 151.184363), new LatLng(-33.858754, 151.229596)); // Use the builder to create a FindAutocompletePredictionsRequest. FindAutocompletePredictionsRequest request = FindAutocompletePredictionsRequest.builder() // Call either setLocationBias() OR setLocationRestriction(). .setLocationBias(bounds) //.setLocationRestriction(bounds) .setOrigin(new LatLng(-33.8749937, 151.2041382)) .setCountries("AU", "NZ") .setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS)) .setSessionToken(token) .setQuery(query) .build(); placesClient.findAutocompletePredictions(request).addOnSuccessListener((response) -> { for (AutocompletePrediction prediction : response.getAutocompletePredictions()) { Log.i(TAG, prediction.getPlaceId()); Log.i(TAG, prediction.getPrimaryText(null).toString()); } }).addOnFailureListener((exception) -> { if (exception instanceof ApiException) { ApiException apiException = (ApiException) exception; Log.e(TAG, "Place not found: " + apiException.getStatusCode()); } });
API แสดงผล FindAutocompletePredictionsResponse
ใน
Task
FindAutocompletePredictionsResponse
มีรายการออบเจ็กต์ AutocompletePrediction
ที่แสดงสถานที่ที่คาดการณ์ไว้ รายการอาจว่างเปล่า ถ้าไม่มีสถานที่ที่รู้จักซึ่งสอดคล้องกับข้อความค้นหาและเกณฑ์ตัวกรอง
สำหรับสถานที่ที่คาดคะเนไว้แต่ละแห่ง คุณสามารถเรียกใช้วิธีการต่อไปนี้เพื่อเรียกข้อมูลรายละเอียดสถานที่
getFullText(CharacterStyle)
แสดงข้อความทั้งหมดของคำอธิบายสถานที่ ข้อความนี้เป็นการรวมข้อความหลักและรอง ตัวอย่างเช่น "Eiffel Tower, Avenue Anatole France, Paris, France" นอกจากนี้ วิธีนี้ยังช่วยให้คุณไฮไลต์ส่วนต่างๆ ของคำอธิบายที่ตรงกับการค้นหาในรูปแบบที่ต้องการได้โดยใช้CharacterStyle
คุณจะใส่พารามิเตอร์CharacterStyle
หรือไม่ก็ได้ ตั้งค่าเป็น Null หากคุณไม่ ต้องการไฮไลต์getPrimaryText(CharacterStyle)
แสดงข้อความหลักที่อธิบายสถานที่ ซึ่งโดยปกติจะเป็นชื่อของสถานที่นั้น เช่น "หอไอเฟล" และ "123 ถนนพิตต์"getSecondaryText(CharacterStyle)
แสดงข้อความบริษัทในเครือของคำอธิบายสถานที่ ซึ่งจะเป็นประโยชน์ เช่น แสดงเป็นบรรทัดที่ 2 เมื่อแสดงการคาดคะเนเพื่อเติมข้อความอัตโนมัติ ตัวอย่างเช่น "Avenue Anatole France, Paris, France" และ "Sydney, New South Wales"getPlaceId()
จะแสดงรหัสของสถานที่ที่คาดไว้ รหัสสถานที่คือตัวระบุแบบข้อความที่ระบุสถานที่โดยไม่ซ้ำกัน ซึ่งคุณสามารถใช้เพื่อเรียกออบเจ็กต์Place
อีกครั้งในภายหลังได้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรหัสสถานที่ใน SDK สถานที่สำหรับ Android โปรดดูรายละเอียด สถานที่ ดูข้อมูลทั่วไปเกี่ยวกับรหัสสถานที่ได้ที่ภาพรวมรหัสสถานที่getPlaceTypes()
จะแสดงรายการประเภทสถานที่ที่เกี่ยวข้องกับสถานที่นี้getDistanceMeters()
แสดงระยะทางของเส้นตรงในหน่วยเมตรระหว่างสถานที่นี้กับต้นทางที่ระบุไว้ในคำขอ
โทเค็นของเซสชัน
โทเค็นเซสชันจะจัดกลุ่มคำค้นหาและเฟสการเลือกของการค้นหาแบบเติมข้อความอัตโนมัติของผู้ใช้เป็นเซสชันที่แยกกันเพื่อใช้ในการเรียกเก็บเงิน เซสชันจะเริ่มต้นเมื่อผู้ใช้เริ่มพิมพ์ข้อความค้นหา และสรุปเมื่อผู้ใช้เลือกสถานที่ แต่ละเซสชันสามารถมีข้อความค้นหาได้หลายรายการ ตามด้วยการเลือกสถานที่เพียง 1 แห่ง เมื่อเซสชันสิ้นสุดลง โทเค็นจะใช้ไม่ได้อีกต่อไป แอปต้องสร้างโทเค็นใหม่สำหรับแต่ละเซสชัน เราขอแนะนำให้ใช้โทเค็นเซสชันสำหรับเซสชันการเติมข้อความอัตโนมัติแบบเป็นโปรแกรมทั้งหมด (เมื่อคุณฝังส่วนย่อยหรือเปิดการเติมข้อความอัตโนมัติโดยใช้ Intent API จะดูแลเรื่องนี้โดยอัตโนมัติ)
Places SDK สำหรับ Android ใช้ AutocompleteSessionToken
เพื่อระบุแต่ละเซสชัน แอปของคุณควรส่งโทเค็นเซสชันใหม่เมื่อเริ่มต้นเซสชันใหม่แต่ละเซสชัน จากนั้นส่งโทเค็นเดียวกันนี้พร้อมรหัสสถานที่ในการเรียกครั้งต่อๆ มาที่ fetchPlace()
เพื่อดึงข้อมูลรายละเอียดสถานที่ของสถานที่ที่ผู้ใช้เลือก
ดูข้อมูลเพิ่มเติมเกี่ยวกับโทเค็นของเซสชัน
จำกัดผลลัพธ์ของการเติมข้อความอัตโนมัติ
คุณสามารถจํากัดผลลัพธ์ของการเติมข้อความอัตโนมัติตามพื้นที่ทางภูมิศาสตร์ที่เจาะจง และ/หรือกรองผลการค้นหาให้เหลืออย่างน้อย 1 ประเภท หรือสูงสุด 5 ประเทศ คุณใช้ข้อจำกัดเหล่านี้กับกิจกรรมการเติมข้อความอัตโนมัติ, AutocompleteSupportFragment
และ API การเติมข้อความอัตโนมัติแบบเป็นโปรแกรมได้
หากต้องการจํากัดผลการค้นหา ให้ทําดังนี้
- หากต้องการต้องการผลการค้นหาภายในภูมิภาคที่กำหนด ให้เรียก
setLocationBias()
(ระบบอาจยังแสดงผลการค้นหาบางรายการจากภายนอกภูมิภาคที่กำหนด) - หากต้องการแสดงเฉพาะผลการค้นหาภายในภูมิภาคที่กำหนด ให้เรียกใช้
setLocationRestriction()
(ระบบจะแสดงผลเฉพาะผลการค้นหาภายในภูมิภาคที่กำหนด) - หากต้องการแสดงเฉพาะผลลัพธ์ที่สอดคล้องกับประเภทสถานที่หนึ่งๆ ให้เรียกใช้
setTypesFilter()
(เช่น การระบุTypeFilter.ADDRESS
จะแสดงผลลัพธ์ที่มีที่อยู่ที่แน่นอนเท่านั้น) - หากต้องการแสดงผลลัพธ์เฉพาะในประเทศที่ระบุไม่เกิน 5 ประเทศ โปรดโทรหา
setCountries()
ต้องส่งประเทศเป็นรหัสประเทศ 2 อักขระตามมาตรฐาน ISO 3166-1 Alpha-2
การให้น้ำหนักพิเศษกับพื้นที่เฉพาะ
หากต้องการให้น้ำหนักพิเศษกับผลลัพธ์การเติมข้อความอัตโนมัติไปยังพื้นที่ทางภูมิศาสตร์ที่เฉพาะเจาะจง ให้เรียกใช้ setLocationBias()
โดยส่งผ่าน RectangularBounds
ตัวอย่างโค้ดต่อไปนี้แสดงการเรียกใช้ setLocationBias()
บนอินสแตนซ์ Fragment เพื่อให้น้ำหนักพิเศษกับคำแนะนำในการเติมข้อความอัตโนมัติที่ภูมิภาคซิดนีย์ ออสเตรเลีย
Kotlin
autocompleteFragment.setLocationBias( RectangularBounds.newInstance( LatLng(-33.880490, 151.184363), LatLng(-33.858754, 151.229596) ) )
Java
autocompleteFragment.setLocationBias(RectangularBounds.newInstance( new LatLng(-33.880490, 151.184363), new LatLng(-33.858754, 151.229596)));
จำกัดผลการค้นหาไปยังภูมิภาคที่เฉพาะเจาะจง
หากต้องการจำกัดผลลัพธ์ของการเติมข้อความอัตโนมัติไว้ในพื้นที่ทางภูมิศาสตร์ที่เจาะจง ให้โทรหา setLocationRestriction()
ผ่าน RectangularBounds
ตัวอย่างโค้ดต่อไปนี้แสดงการเรียกใช้ setLocationRestriction()
ในอินสแตนซ์ Fragment เพื่อให้น้ำหนักกับคำแนะนำในการเติมข้อความอัตโนมัติที่ภูมิภาคซิดนีย์ ออสเตรเลีย
Kotlin
autocompleteFragment.setLocationRestriction( RectangularBounds.newInstance( LatLng(-33.880490, 151.184363), LatLng(-33.858754, 151.229596) ) )
Java
autocompleteFragment.setLocationRestriction(RectangularBounds.newInstance( new LatLng(-33.880490, 151.184363), new LatLng(-33.858754, 151.229596)));
หมายเหตุ: ข้อจำกัดนี้มีผลเฉพาะกับทั้งเส้นทางเท่านั้น ผลการค้นหาสังเคราะห์ที่อยู่นอกขอบเขตสี่เหลี่ยมผืนผ้าอาจแสดงผลตามเส้นทางที่ซ้อนทับกับการจำกัดสถานที่
กรองผลลัพธ์ตามประเภทสถานที่หรือคอลเล็กชันประเภท
คุณสามารถจำกัดผลลัพธ์จากคำขอเติมข้อความอัตโนมัติ เพื่อให้แสดงเฉพาะสถานที่บางประเภทได้ ระบุตัวกรองโดยใช้ประเภทสถานที่หรือคอลเล็กชันประเภทที่ระบุไว้ในตาราง 1, 2 และ 3 ในประเภทสถานที่ หากไม่ได้ระบุไว้ ระบบจะแสดงผลทุกประเภท
หากต้องการกรองผลลัพธ์ของการเติมข้อความอัตโนมัติ ให้เรียกใช้ setTypesFilter()
เพื่อตั้งค่าตัวกรอง
หากต้องการระบุประเภทหรือประเภทตัวกรองคอลเล็กชัน:
เรียกใช้
setTypesFilter()
และระบุค่าประเภทสูงสุด 5 ค่าจากตาราง 1 และตาราง 2 ที่แสดงในประเภทสถานที่ ค่าประเภทจะกำหนดโดยค่าคงที่ใน PlaceTypesเรียกใช้
setTypesFilter()
และระบุคอลเล็กชันประเภทจากตาราง 3 ที่แสดงในประเภทสถานที่ ค่าคอลเล็กชันจะกำหนดโดยค่าคงที่ใน PlaceTypesคำขอนี้มีประเภทจากตาราง 3 เพียงประเภทเดียว หากคุณระบุค่าจากตาราง 3 คุณจะไม่สามารถระบุค่าจากตาราง 1 หรือตาราง 2 ได้ หากคุณทำแล้วเกิดข้อผิดพลาด
ตัวอย่างโค้ดต่อไปนี้เรียกใช้ setTypesFilter()
ใน AutocompleteSupportFragment
และระบุค่าประเภทหลายค่า
Kotlin
autocompleteFragment.setTypesFilter(listOf("landmark", "restaurant", "store"))
Java
autocompleteFragment.setTypesFilter(Arrays.asList("landmark", "restaurant", "store"));
ตัวอย่างโค้ดต่อไปนี้แสดงการเรียกใช้ setTypesFilter()
ใน AutocompleteSupportFragment
เพื่อตั้งค่าตัวกรองที่แสดงเฉพาะผลลัพธ์ซึ่งมีที่อยู่ที่ถูกต้องโดยการระบุประเภทคอลเล็กชัน
Kotlin
autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))
Java
autocompleteFragment.setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS, PlaceTypes.ESTABLISHMENT));
ตัวอย่างโค้ดต่อไปนี้แสดงการเรียกใช้ setTypesFilter()
ใน IntentBuilder
เพื่อตั้งค่าตัวกรองที่แสดงเฉพาะผลลัพธ์ซึ่งมีที่อยู่ที่ถูกต้องโดยการระบุคอลเล็กชันประเภท
Kotlin
val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields) .setTypesFilter(listOf(PlaceTypes.ADDRESS)) .build(this)
Java
Intent intent = new Autocomplete.IntentBuilder( AutocompleteActivityMode.FULLSCREEN, fields) .setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS)) .build(this);
กรองผลลัพธ์ตามประเทศ
หากต้องการกรองผลลัพธ์อัตโนมัติเป็น 5 ประเทศ โปรดโทรไปที่ setCountries()
เพื่อตั้งค่ารหัสประเทศ
จากนั้นส่งตัวกรองไปยังส่วนย่อยหรือ Intent ต้องส่งประเทศในรูปแบบรหัสประเทศ 2 อักขระตามมาตรฐาน ISO 3166-1 Alpha-2
ตัวอย่างโค้ดต่อไปนี้แสดงการเรียกใช้ setCountries()
ใน AutocompleteSupportFragment
เพื่อตั้งค่าตัวกรองที่แสดงเฉพาะผลการค้นหาภายในประเทศที่ระบุ
Kotlin
autocompleteFragment.setCountries("AU", "NZ")
Java
autocompleteFragment.setCountries("AU", "NZ");
ขีดจำกัดการใช้งาน
การใช้งาน Places API ของคุณ ซึ่งรวมถึง Places SDK สำหรับ Android จะไม่ถูกจำกัดตามคำขอสูงสุดต่อวัน (QPD) อีกต่อไป อย่างไรก็ตาม ขีดจำกัดการใช้งานต่อไปนี้จะยังคงมีผลอยู่
- ขีดจำกัดอัตราคือ 6,000 QPM (คำขอต่อนาที) ซึ่งจะคำนวณเป็นผลรวมของคำขอจากฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์สำหรับแอปพลิเคชันทั้งหมดที่ใช้ข้อมูลเข้าสู่ระบบของโปรเจ็กต์เดียวกัน
แสดงการระบุแหล่งที่มาในแอปของคุณ
- หากแอปใช้บริการเติมข้อความอัตโนมัติแบบเป็นโปรแกรม UI ต้องแสดงการระบุที่มา "ขับเคลื่อนโดย Google" หรือปรากฏในแผนที่แบรนด์ Google
- หากแอปใช้วิดเจ็ตเติมข้อความอัตโนมัติ ก็ไม่ต้องดำเนินการใดๆ เพิ่มเติม (การระบุแหล่งที่มาที่จำเป็นจะแสดงโดยค่าเริ่มต้น)
- หากคุณดึงและแสดงข้อมูลสถานที่เพิ่มเติมหลังจากได้สถานที่ตามรหัสแล้ว คุณจะต้องแสดงการระบุแหล่งที่มาของบุคคลที่สามด้วย
ดูรายละเอียดเพิ่มเติมได้ในเอกสารเกี่ยวกับการระบุแหล่งที่มา
วางการเพิ่มประสิทธิภาพการเติมข้อความอัตโนมัติ
ส่วนนี้จะอธิบายแนวทางปฏิบัติที่ดีที่สุดเพื่อช่วยให้คุณได้รับประโยชน์สูงสุดจากบริการเติมข้อความอัตโนมัติเกี่ยวกับสถานที่
หลักเกณฑ์ทั่วไปมีดังต่อไปนี้
- วิธีที่รวดเร็วที่สุดในการพัฒนาอินเทอร์เฟซผู้ใช้ที่ใช้งานได้คือการใช้วิดเจ็ตเติมข้อความอัตโนมัติ Maps JavaScript API, Places SDK สำหรับวิดเจ็ตเติมข้อความอัตโนมัติของ Android หรือการควบคุม UI ของการเติมข้อความอัตโนมัติของ iOS
- พัฒนาความเข้าใจเกี่ยวกับช่องข้อมูลที่สำคัญในการเติมข้อความอัตโนมัติตั้งแต่เริ่มต้น
- ฟิลด์การให้น้ำหนักตำแหน่งและการจำกัดตำแหน่งเป็นตัวเลือกที่ไม่บังคับ แต่อาจมีผลกระทบอย่างมากต่อประสิทธิภาพของการเติมข้อความอัตโนมัติ
- ใช้การจัดการข้อผิดพลาดเพื่อให้แน่ใจว่าแอปลดระดับลงอย่างมีชั้นเชิงหาก API แสดงผลข้อผิดพลาด
- ตรวจสอบว่าแอปของคุณรองรับเมื่อแอปไม่มีตัวเลือก และเสนอวิธีดำเนินการต่อแก่ผู้ใช้
แนวทางปฏิบัติแนะนำในการเพิ่มประสิทธิภาพต้นทุน
การเพิ่มประสิทธิภาพต้นทุนพื้นฐาน
หากต้องการเพิ่มประสิทธิภาพการใช้บริการสถานที่อัตโนมัติ ให้ใช้มาสก์ของช่องในรายละเอียดสถานที่และวิดเจ็ตเติมข้อความอัตโนมัติเพื่อแสดงเฉพาะช่องข้อมูลสถานที่ที่คุณต้องการ
การเพิ่มประสิทธิภาพต้นทุนขั้นสูง
ลองใช้ฟีเจอร์เติมข้อความอัตโนมัติแบบเป็นโปรแกรมเพื่อเข้าถึงราคาต่อคำขอและขอผลลัพธ์ Geocoding API เกี่ยวกับสถานที่ที่เลือกแทนรายละเอียดสถานที่ การกำหนดราคาต่อคำขอที่จับคู่กับ Geocoding API จะคุ้มค่ากว่าการกำหนดราคาต่อเซสชัน (ตามเซสชัน) หากตรงกับเงื่อนไขทั้ง 2 ข้อต่อไปนี้
- หากคุณต้องการแค่ละติจูด/ลองจิจูดหรือที่อยู่ของสถานที่ที่ผู้ใช้เลือกเท่านั้น Geocoding API จะส่งข้อมูลนี้น้อยกว่าการเรียกรายละเอียดสถานที่
- หากผู้ใช้เลือกการคาดการณ์การเติมข้อความอัตโนมัติภายในคำขอการคาดการณ์การเติมข้อความอัตโนมัติโดยเฉลี่ยไม่เกิน 4 รายการ การกำหนดราคาต่อคำขออาจคุ้มค่ากว่าการกำหนดราคาแบบต่อเซสชัน
แอปพลิเคชันของคุณต้องใช้ข้อมูลอื่นนอกเหนือจากที่อยู่และละติจูด/ลองจิจูดของการคาดคะเนที่เลือกไหม
ใช่ ต้องการรายละเอียดเพิ่มเติม
ใช้การเติมข้อความอัตโนมัติเกี่ยวกับสถานที่แบบเซสชันพร้อมรายละเอียดสถานที่
เนื่องจากแอปพลิเคชันของคุณต้องการรายละเอียดสถานที่ เช่น ชื่อสถานที่ สถานะธุรกิจ หรือเวลาทำการ การใช้งาน Place Autocomplete จึงควรใช้โทเค็นเซสชัน (แบบเป็นโปรแกรม หรือมีอยู่ในวิดเจ็ต JavaScript, Android หรือ iOS) รวมเป็นค่าใช้จ่าย $0.017 ต่อเซสชัน บวกกับ SKU ข้อมูลสถานที่ที่เกี่ยวข้อง โดยขึ้นอยู่กับฟิลด์ข้อมูลสถานที่ที่คุณขอโดยขึ้นอยู่กับช่องข้อมูลสถานที่ที่คุณขอ
การใช้งานวิดเจ็ต
การจัดการเซสชันจะสร้างขึ้นในวิดเจ็ต JavaScript, Android หรือ iOS โดยอัตโนมัติ ซึ่งรวมทั้งคำขอเติมสถานที่อัตโนมัติและคำขอรายละเอียดสถานที่ในการคาดคะเนที่เลือก ตรวจสอบว่าได้ระบุพารามิเตอร์ fields
เพื่อให้มั่นใจว่าคุณขอเฉพาะช่องข้อมูลสถานที่ที่ต้องการเท่านั้น
การใช้งานแบบเป็นโปรแกรม
ใช้โทเค็นเซสชันกับคำขอเติมข้อความอัตโนมัติเกี่ยวกับสถานที่ เมื่อขอรายละเอียดสถานที่เกี่ยวกับการคาดคะเนที่เลือก ให้ใส่พารามิเตอร์ต่อไปนี้
- รหัสสถานที่จากการตอบกลับจากการเติมข้อความอัตโนมัติ
- โทเค็นเซสชันที่ใช้ในคำขอเติมข้อความอัตโนมัติเกี่ยวกับสถานที่
- พารามิเตอร์
fields
ที่ระบุช่องข้อมูลสถานที่ที่คุณต้องการ
ไม่ ต้องการเฉพาะที่อยู่และตำแหน่งเท่านั้น
API การระบุพิกัดทางภูมิศาสตร์อาจเป็นตัวเลือกที่มีประสิทธิภาพมากกว่ารายละเอียดสถานที่สำหรับแอปพลิเคชันของคุณ โดยขึ้นอยู่กับประสิทธิภาพการใช้งานของฟีเจอร์เติมข้อความอัตโนมัติเกี่ยวกับสถานที่ของคุณ ประสิทธิภาพในการเติมข้อความอัตโนมัติของทุกแอปพลิเคชันจะแตกต่างกันไปโดยขึ้นอยู่กับสิ่งที่ผู้ใช้ป้อน สถานที่ที่ใช้งานแอปพลิเคชัน และแนวทางปฏิบัติแนะนำในการเพิ่มประสิทธิภาพ ได้รับการนำไปใช้หรือไม่
เพื่อที่จะตอบคำถามต่อไปนี้ ให้วิเคราะห์จำนวนอักขระโดยเฉลี่ยที่ผู้ใช้พิมพ์ก่อนเลือกการคาดคะเนจากการเติมข้อความอัตโนมัติในแอปพลิเคชันของคุณ
ผู้ใช้เลือกการคาดคะเนการเติมข้อความอัตโนมัติในสถานที่ในคำขอไม่เกิน 4 รายการโดยเฉลี่ยหรือไม่
ใช่
ติดตั้งใช้งาน Place Autocomplete แบบเป็นโปรแกรมที่ไม่มีโทเค็นเซสชันและเรียกใช้ Geocoding API ในการคาดการณ์สถานที่ที่เลือก
Geocoding API จะส่งที่อยู่และพิกัดละติจูด/ลองจิจูดในราคา $0.005 ต่อคำขอ การทำคำขอเติมข้อความอัตโนมัติ - ต่อคำขอ 4 รายการจะมีค่าใช้จ่าย $0.01132 ดังนั้น ค่าใช้จ่ายทั้งหมดของคำขอ 4 รายการบวกกับการเรียก Geocoding API เกี่ยวกับการคาดคะเนสถานที่ที่เลือกจะเป็น $0.01632 ซึ่งน้อยกว่าราคาสำหรับการเติมข้อความอัตโนมัติต่อเซสชันที่ $0.017 ต่อเซสชัน1
ลองใช้แนวทางปฏิบัติแนะนำด้านประสิทธิภาพเพื่อช่วยให้ผู้ใช้ได้รับการคาดการณ์ที่ต้องการโดยใช้อักขระน้อยลง
ไม่ได้
ใช้การเติมข้อความอัตโนมัติเกี่ยวกับสถานที่แบบเซสชันพร้อมรายละเอียดสถานที่
เนื่องจากจำนวนคำขอเฉลี่ยที่คุณคาดว่าจะทำก่อนที่ผู้ใช้จะเลือกการคาดคะเนการเติมข้อความอัตโนมัติในสถานที่สูงกว่าต้นทุนต่อเซสชัน การใช้การเติมข้อความอัตโนมัติในสถานที่ควรใช้โทเค็นเซสชันสำหรับทั้งคำขอการเติมข้อความอัตโนมัติเกี่ยวกับสถานที่และคำขอรายละเอียดสถานที่ที่เกี่ยวข้อง โดยมีค่าใช้จ่ายรวม $0.017 ต่อเซสชัน1
การใช้งานวิดเจ็ต
การจัดการเซสชันจะสร้างขึ้นในวิดเจ็ต JavaScript, Android หรือ iOS โดยอัตโนมัติ ซึ่งรวมทั้งคำขอเติมสถานที่อัตโนมัติและคำขอรายละเอียดสถานที่ในการคาดคะเนที่เลือก โปรดระบุพารามิเตอร์ fields
เพื่อให้แน่ใจว่าคุณขอเฉพาะช่องข้อมูลพื้นฐาน
การใช้งานแบบเป็นโปรแกรม
ใช้โทเค็นเซสชันกับคำขอเติมข้อความอัตโนมัติเกี่ยวกับสถานที่ เมื่อขอรายละเอียดสถานที่เกี่ยวกับการคาดคะเนที่เลือก ให้ใส่พารามิเตอร์ต่อไปนี้
- รหัสสถานที่จากการตอบกลับจากการเติมข้อความอัตโนมัติ
- โทเค็นเซสชันที่ใช้ในคำขอเติมข้อความอัตโนมัติเกี่ยวกับสถานที่
- พารามิเตอร์
fields
ที่ระบุช่องข้อมูลพื้นฐาน เช่น ที่อยู่และเรขาคณิต
พิจารณาเลื่อนการส่งคำขอเติมสถานที่อัตโนมัติออกไป
คุณสามารถใช้กลยุทธ์ต่างๆ เช่น ถ่วงเวลาคำขอการเติมข้อความอัตโนมัติในสถานที่จนกว่าผู้ใช้จะพิมพ์อักขระ 3 หรือ 4 ตัวแรกไป เพื่อให้แอปพลิเคชันของคุณส่งคำขอน้อยลง ตัวอย่างเช่น การส่งคำขอเติมข้อความอัตโนมัติเกี่ยวกับสถานที่หลังจากผู้ใช้พิมพ์อักขระตัวที่ 3 หมายความว่าถ้าผู้ใช้พิมพ์อักขระ 7 ตัวแล้วเลือกการคาดคะเนที่คุณส่งคำขอ API การระบุพิกัดทางภูมิศาสตร์ 1 รายการ ต้นทุนทั้งหมดจะเป็น $0.01632 (4 * $0.00283 ต่อคำขอ + การระบุพิกัดทางภูมิศาสตร์ $0.005)1
หากคำขอล่าช้าทำให้คำขอแบบเป็นโปรแกรมที่มีค่าเฉลี่ยต่ำกว่า 4 รายการ ให้ทําตามคําแนะนําในการใช้งานฟีเจอร์เติมข้อความอัตโนมัติที่ทํางานด้วย Geocoding API โปรดทราบว่าผู้ใช้ที่ล่าช้าจะมองว่าคำขอล่าช้าเป็นเวลาในการตอบสนองจากผู้ใช้ที่อาจคาดหวังว่าจะเห็นการคาดการณ์ในการกดแป้นพิมพ์ใหม่ทุกครั้ง
ลองใช้แนวทางปฏิบัติแนะนำด้านประสิทธิภาพเพื่อช่วยให้ผู้ใช้ได้รับการคาดการณ์ที่ต้องการโดยใช้อักขระน้อยลง
-
โดยค่าใช้จ่ายจะแสดงเป็นสกุลเงิน USD โปรดดูข้อมูลราคาทั้งหมดในหน้าการเรียกเก็บเงินของ Google Maps Platform
แนวทางปฏิบัติแนะนำด้านประสิทธิภาพ
หลักเกณฑ์ต่อไปนี้อธิบายวิธีเพิ่มประสิทธิภาพในการเติมข้อความอัตโนมัติ
- เพิ่มข้อจำกัดเกี่ยวกับประเทศ การให้น้ำหนักสถานที่ตั้ง และค่ากำหนดภาษา (สำหรับการติดตั้งใช้งานแบบเป็นโปรแกรม) ลงในการติดตั้งใช้งานการเติมข้อความอัตโนมัติ วิดเจ็ตไม่จําเป็นต้องใช้ค่ากําหนดภาษา เนื่องจากวิดเจ็ตจะเลือกค่ากำหนดภาษาจากเบราว์เซอร์หรืออุปกรณ์เคลื่อนที่ของผู้ใช้
- หากเติมข้อความอัตโนมัติสถานที่มาพร้อมกับแผนที่ คุณอาจให้น้ำหนักพิเศษกับตำแหน่งตามวิวพอร์ตของแผนที่ได้
- ในสถานการณ์ที่ผู้ใช้ไม่ได้เลือกการคาดคะเนจากการเติมข้อความอัตโนมัติรายการใดรายการหนึ่ง โดยทั่วไปเนื่องจากไม่มีการคาดคะเนรายการใดเป็นที่อยู่สำหรับผลลัพธ์ที่ต้องการ คุณจะนำข้อมูลเดิมของผู้ใช้เดิมมาใช้ซ้ำเพื่อให้ได้รับผลการค้นหาที่เกี่ยวข้องมากขึ้นได้ ดังนี้
- หากคุณคาดว่าผู้ใช้จะป้อนเฉพาะข้อมูลที่อยู่ ให้ใช้ข้อมูลเดิมของผู้ใช้ในการเรียก Geocoding API
- หากคุณคาดหวังให้ผู้ใช้ป้อนคำค้นหาสถานที่ที่เจาะจงตามชื่อหรือที่อยู่ ให้ใช้คำขอค้นหาสถานที่ หากต้องการผลลัพธ์ในภูมิภาคที่เจาะจงเท่านั้น ให้ใช้การให้น้ำหนักตำแหน่ง
- ผู้ใช้ที่ป้อนที่อยู่ของสถานที่ย่อยในประเทศที่การรองรับการเติมข้อความอัตโนมัติของสถานที่ย่อยไม่สมบูรณ์ เช่น เช็กเกีย เอสโตเนีย และลิทัวเนีย เช่น ที่อยู่ภาษาเช็ก "Stroupeสรุปnického 3191/17, Praha" จะให้การคาดคะเนบางส่วนในการเติมข้อความอัตโนมัติ
- ผู้ใช้ป้อนที่อยู่โดยมีคำนำหน้าส่วนต่างๆ ของถนน เช่น "23-30 ถนน 29th ควีนส์" ในนิวยอร์กซิตี้ หรือ "47-380 ถนนคาเมฮาเมฮา คาเนโอเฮ" บนเกาะคาไวในฮาวาย
การแก้ปัญหา
แม้ว่าข้อผิดพลาดที่หลากหลายอาจเกิดขึ้นได้ แต่ข้อผิดพลาดส่วนใหญ่ที่แอปมีแนวโน้มที่จะพบมักเกิดจากข้อผิดพลาดในการกำหนดค่า (เช่น มีการใช้คีย์ API ไม่ถูกต้อง หรือกำหนดค่าคีย์ API ไม่ถูกต้อง) หรือข้อผิดพลาดด้านโควต้า (แอปเกินโควต้าแล้ว) ดูข้อมูลเพิ่มเติมเกี่ยวกับโควต้าได้ที่ขีดจำกัดการใช้งาน
ข้อผิดพลาดที่เกิดขึ้นในการใช้ตัวควบคุมการเติมข้อความอัตโนมัติจะแสดงผลในโค้ดเรียกกลับ onActivityResult()
โทรติดต่อ Autocomplete.getStatus()
เพื่อรับข้อความ
สถานะของผลลัพธ์