El servicio de autocompletado del SDK de Places para Android devuelve resultados de predicciones en respuesta a las consultas de búsqueda de los usuarios. A medida que el usuario escribe, el servicio de autocompletado muestra sugerencias de lugares como negocios, direcciones, los Plus Codes y lugares de interés.
Puedes agregar el autocompletado a tu aplicación de las siguientes formas:
- Agrega un widget de Autocomplete para guardar durante el desarrollo del producto, y garantizar una experiencia del usuario coherente.
- Obtener predicciones del lugar programáticamente para crear experiencia del usuario personalizada.
Agrega un widget de Autocomplete
El widget de autocompletado es un diálogo de búsqueda con autocompletado integrado.
funcionalidad. Cuando un usuario ingresa términos de búsqueda, el widget presenta una lista de
entre los que puedes elegir. Cuando el usuario realiza una selección,
Place
una instancia de VM, que la app puede usar para obtener detalles sobre la
el lugar seleccionado.
Hay dos opciones para agregar el widget de autocompletado a tu aplicación:
- Opción 1: Incorpora un
AutocompleteSupportFragment
. - Opción 2: Usa un intent para iniciar la actividad de autocompletado.
Opción 1: Incorpora un AutocompleteSupportFragment
Para agregar un AutocompleteSupportFragment
a tu app, sigue estos pasos:
- Agrega un fragmento al diseño XML de tu actividad.
- Agrega un objeto de escucha a tu actividad o fragmento.
Cómo agregar AutocompleteSupportFragment a una actividad
Para agregar AutocompleteSupportFragment
a una actividad, agrega un nuevo fragmento a una
Diseño XML Por ejemplo:
<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"
/>
- De forma predeterminada, el fragmento no tiene límite ni fondo. Para proporcionar un aspecto visual coherente, anida el fragmento dentro de otro diseño como un CardView.
- Si usas el fragmento de Autocomplete y debes anular
onActivityResult
, debes llamar asuper.onActivityResult
; de lo contrario, el fragmento no funcionará correctamente.
Cómo agregar un PlaceSelectionListener a una actividad
PlaceSelectionListener
controla la devolución de un lugar como respuesta a la solicitud
selección. En el siguiente código, se muestra cómo crear una referencia al fragmento y
agregar un objeto de escucha a tu 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); } });
Opción 2: Usa un intent para iniciar la actividad de autocompletado
Si quieres que tu app use un flujo de navegación diferente (por ejemplo, activar la experiencia de autocompletar desde un ícono en lugar de un campo de búsqueda) tu app puede iniciar el autocompletado usando un intent.
Para iniciar el widget de autocompletado por medio de una intent, sigue estos pasos:
- Usa
Autocomplete.IntentBuilder
. para crear un intent y pasar el modoAutocomplete
deseado. - Cómo definir un selector de resultados de actividad
registerForActivityResult
que se puede usar para iniciar el intent y controlar el lugar seleccionado por el usuario en el resultado.
Cómo crear un intent de Autocomplete
En el siguiente ejemplo, se usan
Autocomplete.IntentBuilder
para crear un intent a fin de iniciar el widget de Autocomplete como un 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);
Cuando usas un intent para iniciar el widget de Autocomplete, puedes elegir modos de visualización de pantalla completa o de superposición. En las siguientes capturas de pantalla, se muestra cada modo de visualización respectivamente:
Cómo registrar una devolución de llamada para el resultado del intent
Para recibir una notificación cuando el usuario selecciona un lugar, define un
launcher de registerForActivityResult()
, que inicia la actividad y también controla las
resultado, como se muestra en el siguiente ejemplo. Si el usuario seleccionó una predicción,
se entregarán en el intent contenido en el objeto del resultado. Como el intent
que compiló Autocomplete.IntentBuilder
, el método
Autocomplete.getPlaceFromIntent()
puede extraer el objeto 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"); } });
Obtén predicciones de lugares de manera programática
Puedes crear una IU de búsqueda personalizada como alternativa a la IU que proporciona la
Autocomplete. Para ello, tu app debe obtener predicciones del lugar
programáticamente. Tu app puede obtener una lista de nombres de lugares previstos.
direcciones de la API de Autocomplete con la llamada
PlacesClient.findAutocompletePredictions()
:
pasar un
FindAutocompletePredictionsRequest
con los siguientes parámetros:
- Obligatorio: Es una cadena
query
que contenga el texto que escribió el usuario. - Recomendado: A
AutocompleteSessionToken
: que agrupa las fases de consulta y selección de una búsqueda de usuario en una categoría para la facturación. La sesión se inicia cuando el usuario comienza a escribir una consulta y concluye cuando selecciona un lugar. - Recomendado: A
RectangularBounds
que especifica los límites de latitud y longitud para limitar los resultados a la región especificada. - Opcional: Uno o más países de dos letras código (ISO 3166-1) Alfa-2), que indica el país o los países a los que se deben enviar los resultados. restringido.
Opcional: A
TypeFilter
: que puedes usar para restringir los resultados al tipo de sitio especificado. El se admiten los siguientes tipos de lugares:TypeFilter.GEOCODE
: devuelve solo resultados de geocodificación, en lugar de empresas. Usa esta solicitud para desambiguar los resultados en los que el valor especificado la ubicación puede ser indeterminada.TypeFilter.ADDRESS
: Muestra solo los resultados de autocompletar con un dirección exacta. Usa este tipo cuando sepas que el usuario está buscando un dirección especificada por completo.TypeFilter.ESTABLISHMENT
: Devuelve solo lugares que se encuentran empresas.TypeFilter.REGIONS
: muestra solo lugares que coinciden con uno de los los siguientes tipos:LOCALITY
SUBLOCALITY
POSTAL_CODE
COUNTRY
ADMINISTRATIVE_AREA_LEVEL_1
ADMINISTRATIVE_AREA_LEVEL_2
TypeFilter.CITIES
: muestra solo resultados que coincidan conLOCALITY
oADMINISTRATIVE_AREA_LEVEL_3
Opcional: Una
LatLng
que especifique la ubicación de origen de la solicitud. Cuando llamessetOrigin()
: el servicio devuelve la distancia en metros (distanceMeters
) a partir de la distancia origen, para cada predicción de autocompletar en la respuesta.
Para obtener información sobre los tipos de lugares, consulta la guía sobre lugares de la API de Google Ads.
El siguiente ejemplo muestra una llamada completa a
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()); } });
La API muestra un
FindAutocompletePredictionsResponse
en un
Task
El FindAutocompletePredictionsResponse
contiene una lista de
AutocompletePrediction
objetos que representan lugares de predicción. La lista puede estar vacía, si no hay
lugar conocido correspondiente a la consulta y los criterios de filtro.
Para cada sitio de predicción, puedes realizar una llamada a los siguientes métodos a fin de recuperar datos de sitios detalles:
getFullText(CharacterStyle)
muestra el texto completo de una descripción de lugar. Esta es una combinación texto principal y secundario. Ejemplo: "Torre Eiffel, Avenue Anatole France, París, Francia”. Además, este método te permite destacar las secciones de la descripción que coincida con la búsqueda con el estilo que elijas, medianteCharacterStyle
El parámetroCharacterStyle
es opcional. Establécelo en nulo si no lo haces no olvides destacarlo.getPrimaryText(CharacterStyle)
devuelve el texto principal que describe un lugar. Por lo general, es el nombre del en un lugar específico. Ejemplos: “Torre Eiffel” y “Calle Pitt 123”.getSecondaryText(CharacterStyle)
muestra el texto secundario de una descripción de lugar. Esto es útil para ejemplo, como segunda línea cuando se muestren las predicciones de autocompletar. Ejemplos: “Avenida Anatole France, París, Francia” y “Sídney, Nueva Gales del Sur”.getPlaceId()
muestra el ID de lugar del sitio de predicción. Un ID de lugar es una cadena identificador que identifica de forma exclusiva un sitio, que puedes utilizar para recuperar elPlace
de ese objeto de nuevo más adelante. Para obtener más información sobre los IDs de lugar en SDK de Places para Android, consulta la documentación de Place Detalles. En general información sobre los IDs de lugar, consulta la sección ID de lugar descripción general.getPlaceTypes()
muestra la lista de tipos de lugares asociados con este sitio.getDistanceMeters()
devuelve la distancia en línea recta en metros entre este lugar y las el origen especificado en la solicitud.
Tokens de sesión
Los tokens de sesión agrupan las fases de búsqueda y selección del autocompletado de un usuario busca en una sesión discreta para facturar. La sesión comienza cuando usuario comienza a escribir una consulta y termina cuando selecciona un lugar. Cada sesión puede tener varias búsquedas, seguidas de una selección de lugar. Cuando una sesión haya concluido, el token ya no es válido; la app debe generar un token nuevo para cada sesión. Recomendamos usar tokens de sesión para todas las actividades sesiones de autocompletado (cuando incorporas un fragmento o inicias el autocompletado usando un intent, la API se encarga de esto automáticamente).
El SDK de Places para Android usa un
AutocompleteSessionToken
para identificar cada sesión. La aplicación deberá pasar un nuevo token de sesión al
cada nueva sesión, pasa ese mismo token, junto con un ID de lugar, en
la llamada posterior a
fetchPlace()
para recuperar los detalles de Place del lugar que seleccionó el usuario.
Más información sobre la sesión tokens.
Limita los resultados de autocompletar
Puedes restringir los resultados de autocompletar a una región geográfica específica.
filtrar los resultados para mostrar uno o más tipos de lugares o un máximo de cinco países. Tú
puedes aplicar estas restricciones a la actividad de autocompletado
AutocompleteSupportFragment
y APIs de autocompletado programático.
Para restringir los resultados, haz lo siguiente:
- Para preferir los resultados dentro de la región definida, llama a
setLocationBias()
. (es posible que aún se devuelvan algunos resultados que no provienen de la región definida). - Para mostrar solo resultados dentro de la región definida, llama a
setLocationRestriction()
(solo se mostrarán los resultados dentro de la región definida) que se devuelven). - Para obtener resultados que coincidan con un tipo de lugar determinado, llama a
setTypesFilter()
(por ejemplo, si especificasTypeFilter.ADDRESS
, se mostrará solo los resultados con una dirección precisa). - Para devolver solo resultados de un máximo de cinco países especificados, llama al
setCountries()
Los países se deben pasar como un formato de dos caracteres, ISO 3166-1 País compatible con alfa-2 automático.
Personalización de resultados según una región específica
Para personalizar los resultados de autocompletado según una región geográfica específica, llama a
setLocationBias()
, pasando un
RectangularBounds
En el siguiente ejemplo de código, se muestra cómo llamar a setLocationBias()
en un fragmento
para personalizar las sugerencias
de autocompletar según una región de Sídney, Australia.
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)));
Restringe los resultados a una región específica
Para restringir los resultados de autocompletar a una región geográfica específica, llama
setLocationRestriction()
, pasando un
RectangularBounds
En el siguiente ejemplo de código, se muestra cómo llamar a setLocationRestriction()
en un
instancia de fragmento para personalizar sus sugerencias de autocompletado a una región de Sídney,
Australia.
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)));
Nota: Esta restricción solo se aplica a rutas completas, resultados sintéticos ubicados fuera de los límites rectangulares pueden devolverse en función de una ruta que se superpone con la restricción de ubicación.
Filtra los resultados por tipo de lugar o colección de tipos
Puedes restringir los resultados de una solicitud de autocompletado para que solo devuelvan un cierto tipo de lugar. Especifica un filtro usando los tipos de lugares o un conjunto de tipos que se enumeran en las Tablas 1, 2 y 3 de la sección Tipos de lugar. Si nada especificado, se devuelven todos los tipos.
Para filtrar los resultados de autocompletar, llama
setTypesFilter()
para establecer el filtro.
Para especificar un tipo o filtro de colección de tipos, haz lo siguiente:
Llama a
setTypesFilter()
y especifica hasta cinco valores de type de la Tabla 1. y la Tabla 2, que se muestra en Tipos de lugar. Los valores de tipo son definidas por las constantes en PlaceTypes.Llama a
setTypesFilter()
y especifica un colección de tipos de la Tabla 3. en Tipos de lugar. El conjunto de valores define constantes en PlaceTypes.Solo se permite un tipo de la Tabla 3 en la solicitud. Si especificas un de la Tabla 3, no puedes especificar un valor de la Tabla 1 ni de la Tabla 2. Si si lo haces, se produce un error.
En el siguiente ejemplo de código, se llama a setTypesFilter()
en una
AutocompleteSupportFragment
y especifica varios valores de tipo.
Kotlin
autocompleteFragment.setTypesFilter(listOf("landmark", "restaurant", "store"))
Java
autocompleteFragment.setTypesFilter(Arrays.asList("landmark", "restaurant", "store"));
En el siguiente ejemplo de código, se muestra cómo llamar a setTypesFilter()
en un
AutocompleteSupportFragment
para configurar un filtro que muestre solo resultados con una
dirección exacta mediante la especificación de un grupo de tipos.
Kotlin
autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))
Java
autocompleteFragment.setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS, PlaceTypes.ESTABLISHMENT));
En el siguiente ejemplo de código, se muestra cómo llamar a setTypesFilter()
en un
IntentBuilder
para configurar un filtro que muestre solo resultados con una dirección exacta
especificando un conjunto de tipos.
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);
Filtrar los resultados por país
Para filtrar los resultados de autocompletar para un máximo de cinco países, llama
setCountries()
para configurar el código de país.
Luego, pasa el filtro a un fragmento o una intent. Los países se deben pasar como
dos caracteres, ISO 3166-1 alfa-2 compatible país
automático.
En el siguiente ejemplo de código, se muestra cómo llamar a setCountries()
en un
AutocompleteSupportFragment
, para configurar un filtro que muestre solo resultados dentro del
determinados países.
Kotlin
autocompleteFragment.setCountries("AU", "NZ")
Java
autocompleteFragment.setCountries("AU", "NZ");
Límites de uso
Tu uso de la API de Places, incluido el SDK de Places para Android, se ya no se limita a un número máximo de solicitudes por día (QPD). Sin embargo, el se siguen aplicando los siguientes límites de uso:
- El límite de frecuencia es de 6,000 QPM (solicitudes por minuto). Sí calculada como la suma de las solicitudes de cliente y servidor de todas aplicaciones con las credenciales del mismo proyecto.
Mostrar atribuciones en tu aplicación
- Si tu app usa el servicio de autocompletado de manera programática, tu IU debe mostrar un mensaje “Powered by Google” atribución, o aparecer dentro de una Mapa con la marca de Google.
- Si tu app usa el widget de Autocomplete, no se requiere ninguna acción adicional (la atribución requerida se muestra de forma predeterminada).
- Si recuperas y muestras información adicional del lugar después de obtener una lugar por ID, también deben mostrar atribuciones de terceros.
Para obtener más detalles, consulta la documentación sobre atribuciones.
Optimización de Place Autocomplete
En esta sección, se describen algunas prácticas recomendadas que te ayudarán a aprovechar al máximo el servicio Place Autocomplete.
A continuación, se indican algunos lineamientos generales:
- La forma más rápida de desarrollar una interfaz de usuario funcional es usar el widget de Autocomplete de la API de Maps JavaScript, el widget de Autocomplete del SDK de Places para Android o el control de la IU de Autocomplete del SDK de Places para iOS.
- Comprende los campos de datos esenciales de Place Autocomplete desde el principio.
- Los campos de restricción y personalización de la ubicación son opcionales, pero pueden afectar significativamente el rendimiento del autocompletado.
- Usa el procedimiento de manejo de errores para asegurarte de que tu app administre el problema de forma adecuada si la API muestra un error.
- Asegúrate de que tu app gestione correctamente los problemas cuando no haya selección y ofrezca a los usuarios una manera de continuar.
Prácticas recomendadas para la optimización de los costos
Optimización básica de los costos
Para optimizar el costo de usar el servicio Place Autocomplete, usa máscaras de campo en los widgets de Place Details y Place Autocomplete, que te permiten mostrar solo los campos de datos de lugar que necesitas.
Optimización avanzada de los costos
Considera utilizar la implementación programática de Place Autocomplete para acceder a los precios por pedido y solicitar resultados de la API de Geocoding sobre el lugar seleccionado en lugar de utilizar Place Details. Los precios por pedido asociados con la API de Geocoding son más rentables que los precios por sesión (basados en sesión) si se cumplen las siguientes condiciones:
- Si solo necesitas las coordenadas de latitud y longitud, o la dirección del lugar seleccionado por el usuario, la API de Geocoding proporciona esta información de manera más fácil que una llamada a Place Details.
- Si los usuarios seleccionan una predicción de autocompletar con un promedio de cuatro solicitudes o menos, el precio por solicitud puede ser más rentable que el precio por sesión.
¿Tu aplicación requiere algún dato diferente de la dirección y las coordenadas de latitud o longitud de la predicción seleccionada?
Sí, necesita más detalles.
Usa el servicio Place Autocomplete basado en sesiones con Place Details.
Dado que tu aplicación requiere datos de Place Details, como el nombre del lugar, el estado de la empresa o el horario de atención, tu implementación de Place Autocomplete debe usar un token de sesión (programático o integrado en los widgets de JavaScript, Android o iOS) por un costo total de USD 0.017 por sesión más los SKUs de datos de Places aplicables según los campos de datos de lugar que solicites.1
Implementación de widgets
La administración de sesiones está integrada automáticamente en los widgets de JavaScript, Android o iOS. Esto incluye las solicitudes de Place Autocomplete y Place Details en la predicción seleccionada. Asegúrate de especificar el parámetro fields
para asegurarte de solicitar únicamente los campos de datos de lugar que necesitas.
Implementación programática
Usa un token de sesión con tus solicitudes de Place Autocomplete. Cuando solicites la predicción seleccionada a Place Details, incluye los siguientes parámetros:
- El ID de lugar de la respuesta de Place Autocomplete
- El token de sesión que se utilizó en la solicitud de Place Autocomplete
- El parámetro
fields
que especifica los campos de datos de lugar que necesitas
No, solo requiere la dirección y la ubicación.
La API de Geocoding podría ser una opción más rentable que Place Details para tu aplicación, según el rendimiento de su uso de Place Autocomplete. La eficiencia de Autocomplete de cada aplicación varía según las búsquedas que ingresan los usuarios, dónde se usa la aplicación y si se siguen las prácticas recomendadas de optimización del rendimiento.
Para responder la siguiente pregunta, analiza cuántos caracteres escribe un usuario en promedio antes de seleccionar una predicción de Place Autocomplete en tu aplicación.
¿Tus usuarios seleccionan, en promedio, una predicción de Place Autocomplete cada cuatro solicitudes o menos?
Sí
Implementa Place Autocomplete de manera programática sin tokens de sesión y llama a la API de Geocoding en la predicción de lugar seleccionada.
La API de Geocoding proporciona direcciones y coordenadas de latitud y longitud por USD 0.005 por solicitud. Realizar cuatro solicitudes de Place Autocomplete por solicitud cuesta USD 0.01132, por lo que el costo total de cuatro solicitudes más una llamada a la API de Geocoding sobre la predicción de lugar seleccionada sería de USD 0.01632, lo cual es inferior al precio del autocompletado por sesión, que es de USD 0.017.1
Considera aplicar las prácticas recomendadas de rendimiento para ayudar a los usuarios a obtener la predicción que buscan con menos caracteres.
No
Usa el servicio Place Autocomplete basado en sesiones con Place Details.
Dado que la cantidad promedio de solicitudes que esperas hacer antes de que un usuario seleccione una predicción de Place Autocomplete supera el costo del precio por sesión, la implementación de Place Autocomplete debe usar un token de sesión para las solicitudes de Place Autocomplete y la solicitud de Place Details asociada por un costo total de USD 0.017 por sesión.1
Implementación de widgets
La administración de sesiones está integrada automáticamente en los widgets de JavaScript, Android o iOS. Esto incluye las solicitudes de Place Autocomplete y Place Details en la predicción seleccionada. Asegúrate de especificar el parámetro fields
para asegurarte de solicitar únicamente campos de datos básicos.
Implementación programática
Usa un token de sesión con tus solicitudes de Place Autocomplete. Cuando solicites la predicción seleccionada a Place Details, incluye los siguientes parámetros:
- El ID de lugar de la respuesta de Place Autocomplete
- El token de sesión que se utilizó en la solicitud de Place Autocomplete
- El parámetro
fields
que especifica campos de datos básicos, como la dirección y la geometría
Considera retrasar las solicitudes de Place Autocomplete
Puedes emplear estrategias como demorar una solicitud de Place Autocomplete hasta que el usuario escriba los primeros tres o cuatro caracteres para que tu aplicación realice menos solicitudes. Por ejemplo, cuando se realizan solicitudes de Place Autocomplete para cada carácter después de que el usuario escribe el tercer carácter, si el usuario escribe siete caracteres y luego selecciona una predicción para la cual haces una solicitud a la API de Geocoding, el costo total será de USD 0.01632 (4 * USD 0.00283 (autocompletado por solicitud) + USD 0.005 (Geocoding)).1
Si retrasar las solicitudes puede hacer que tu solicitud programática promedio sea inferior a cuatro, puedes seguir las instrucciones para implementar Place Autocomplete con la API de Geocoding y obtener un rendimiento optimizado. Ten en cuenta que demorar las solicitudes puede percibirse como latencia por parte del usuario, que tal vez espere ver predicciones con cada letra que ingresa.
Considera seguir las prácticas recomendadas de rendimiento para ayudar a los usuarios a obtener la predicción que buscan con menos caracteres.
-
Los costos se indican en USD. Consulta la página Facturación de Google Maps Platform para obtener información completa sobre los precios.
Prácticas recomendadas para mejorar el rendimiento
Los siguientes lineamientos describen maneras de optimizar el rendimiento de Place Autocomplete:
- Agrega restricciones por país, personalización de la ubicación y, en el caso de las implementaciones programáticas, la preferencia de idioma a la implementación de Place Autocomplete. La preferencia de idioma no es necesaria para los widgets, dado que toman esta información del navegador o el dispositivo móvil del usuario.
- Si Place Autocomplete cuenta con un mapa, puedes personalizar la ubicación según su viewport.
- En las situaciones en que un usuario no elige una de las predicciones de Autocomplete, generalmente, porque ninguna de ellas indica el resultado deseado, puedes reutilizar la entrada original del usuario para tratar de obtener resultados más relevantes:
- Si esperas que el usuario ingrese únicamente información sobre la dirección, vuelve a usar su entrada original en una llamada a la API de Geocoding.
- Si esperas que el usuario ingrese búsquedas para un lugar específico por nombre o dirección, usa una solicitud de Find Place. Si se espera que los resultados pertenezcan únicamente a una región específica, usa la restricción de ubicación.
- Usuarios que ingresan direcciones con números de departamento en países donde la compatibilidad de Place Autocomplete no es completa (p. ej., República Checa, Estonia y Lituania; así, la dirección checa "Stroupežnického 3191/17, Praha" genera una predicción parcial en Place Autocomplete)
- Usuarios que ingresan direcciones con prefijos de tramo de ruta, como "23-30 29th St, Queens" en la ciudad de Nueva York o "47-380 Kamehameha Hwy, Kaneohe" en la isla de Kauai en Hawái
Soluciona problemas
Si bien puede haber una gran variedad de errores, la mayoría de los errores que probablemente experimentes, por lo general, se deben a errores de configuración (por ejemplo, se usó una clave de API incorrecta o se configuró incorrectamente) o la cuota (tu app excedió su cuota). Consulta la sección Uso. Límites para obtener más información para obtener más información sobre las cuotas.
Los errores que ocurren al usar los controles de autocompletar se devuelven en el
onActivityResult()
. Llama a Autocomplete.getStatus()
para obtener el estado.
mensaje para el resultado.