Place Autocomplete

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.
Seleccionar plataforma: Android iOS JavaScript Servicio web

El servicio de autocompletado del Places SDK for Android muestra predicciones de sitios en respuesta a consultas de búsqueda de usuarios. A medida que el usuario escribe, el servicio de autocompletado muestra sugerencias para lugares como empresas, direcciones, códigos plus y lugares de interés.

Puedes agregar el autocompletado a tu aplicación de las siguientes formas:

Cómo agregar un widget de autocompletado

El widget de autocompletado es un cuadro de diálogo de búsqueda con la funcionalidad de autocompletado incorporada. Cuando un usuario ingresa términos de búsqueda, el widget presenta una lista de lugares de predicción seleccionables. Cuando el usuario realiza una selección, se muestra una instancia de Place, que tu app puede usar para obtener detalles sobre el lugar seleccionado.

Hay dos opciones para agregar el widget de autocompletado a tu aplicación:

Opción 1: Incorporar un AutocompleteSupportFragment

Para agregar una AutocompleteSupportFragment a tu app, sigue estos pasos:

  1. Agrega un fragmento al diseño XML de tu actividad.
  2. 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 un 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 una apariencia visual coherente, anida el fragmento dentro de otro elemento de diseño, como un CardView.
  • Si estás usando el fragmento de Autocomplete y necesitas anular onActivityResult, debes llamar a super.onActivityResult; de lo contrario, el fragmento no funcionará correctamente.

Cómo agregar un PlaceSelectionListener a una actividad

PlaceSelectionListener controla la visualización de un lugar en respuesta a la selección del usuario. En el siguiente código, se muestra cómo crear una referencia al fragmento y agregar un objeto de escucha a AutocompleteSupportFragment:

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

      

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

      

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, para activar la experiencia de autocompletado desde un ícono en lugar de un campo de búsqueda), puede iniciar el autocompletado mediante un intent.

Para iniciar el widget de autocompletado por medio de una intent, sigue estos pasos:

  1. Usa Autocomplete.IntentBuilder para crear un intent y pasa el modo Autocomplete deseado. El intent debe llamar a startActivityForResult y pasar un código de solicitud que lo identifique.
  2. Anula la devolución de llamada onActivityResult para recibir el lugar seleccionado.

Cómo crear un intent de autocompletado

En el siguiente ejemplo, se muestra cómo usar Autocomplete.IntentBuilder a fin de crear un intent para iniciar el widget de autocompletado como un intent:

Java


    private static int AUTOCOMPLETE_REQUEST_CODE = 1;

    // 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);
    startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE);

      

Kotlin


    private val AUTOCOMPLETE_REQUEST_CODE = 1

    // 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)
    startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE)

      

Cuando uses un intent para iniciar el widget de autocompletado, puedes elegir entre los modos de superposición o visualización en pantalla completa. En las siguientes capturas de pantalla, se muestra cada modo de visualización, respectivamente:

Cuando se muestra en el modo de superposición, el widget de autocompletado aparece superpuesto en la IU de llamada.
Figura 1: Widget de autocompletado en modo de SUPERPOSICIÓN
Cuando se muestra en el modo de pantalla completa, el widget de autocompletado ocupa toda la pantalla.
Figura 2: Widget de autocompletado en modo FULLSCREEN

Anula la devolución de llamada onActivityResult

Para recibir una notificación cuando el usuario selecciona un lugar, tu app debe anular el onActivityResult() de la actividad y buscar el código de solicitud que pasaste para tu intent, como se muestra en el siguiente ejemplo.

Java


@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    if (requestCode == AUTOCOMPLETE_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            Place place = Autocomplete.getPlaceFromIntent(data);
            Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
        } else if (resultCode == AutocompleteActivity.RESULT_ERROR) {
            // TODO: Handle the error.
            Status status = Autocomplete.getStatusFromIntent(data);
            Log.i(TAG, status.getStatusMessage());
        } else if (resultCode == RESULT_CANCELED) {
            // The user canceled the operation.
        }
        return;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

      

Kotlin


override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (requestCode == AUTOCOMPLETE_REQUEST_CODE) {
        when (resultCode) {
            Activity.RESULT_OK -> {
                data?.let {
                    val place = Autocomplete.getPlaceFromIntent(data)
                    Log.i(TAG, "Place: ${place.name}, ${place.id}")
                }
            }
            AutocompleteActivity.RESULT_ERROR -> {
                // TODO: Handle the error.
                data?.let {
                    val status = Autocomplete.getStatusFromIntent(data)
                    Log.i(TAG, status.statusMessage ?: "")
                }
            }
            Activity.RESULT_CANCELED -> {
                // The user canceled the operation.
            }
        }
        return
    }
    super.onActivityResult(requestCode, resultCode, data)
}

      

Obtén predicciones de sitios de manera programática

Puedes crear una IU de búsqueda personalizada como alternativa a la IU que proporciona el widget de autocompletado. Para ello, tu app debe obtener predicciones de sitios de manera programática. Tu app puede obtener una lista de nombres de lugares o direcciones previstos desde la API de autocompletado llamando a PlacesClient.findAutocompletePredictions() y pasando un objeto FindAutocompletePredictionsRequest con los siguientes parámetros:

  • Obligatorio: Una string query que contiene el texto escrito por el usuario.
  • Recomendado: Un AutocompleteSessionToken, que agrupa las fases de consulta y selección de una búsqueda del usuario en una sesión discreta con fines de facturación La sesión comienza cuando el usuario comienza a escribir una consulta y termina cuando selecciona un lugar.
  • Recomendado: Un objeto RectangularBounds, que especifica los límites de latitud y longitud para restringir los resultados a la región especificada.
  • Opcional: Uno o más códigos de país de dos letras (ISO 3166-1 Alfa-2), que indican el país o los países a los que se deben restringir los resultados.
  • Opcional: Un objeto TypeFilter, que puedes usar para restringir los resultados al tipo de lugar especificado Se admiten los siguientes tipos de lugares:

    • TypeFilter.GEOCODE: solo muestra resultados de codificación geográfica, en lugar de resultados de negocios. Usa esta solicitud para eliminar la ambigüedad en los resultados en los que la ubicación especificada puede ser indeterminada.
    • TypeFilter.ADDRESS: Muestra solo los resultados de autocompletado con una dirección precisa. Usa este tipo cuando sepas que el usuario buscará una dirección especificada por completo.
    • TypeFilter.ESTABLISHMENT: Muestra solo los lugares que son negocios.
    • TypeFilter.REGIONS: Muestra solo los lugares que coinciden con uno de los siguientes tipos:

      • LOCALITY
      • SUBLOCALITY
      • POSTAL_CODE
      • COUNTRY
      • ADMINISTRATIVE_AREA_LEVEL_1
      • ADMINISTRATIVE_AREA_LEVEL_2
    • TypeFilter.CITIES: Muestra solo los resultados que coinciden con LOCALITY o ADMINISTRATIVE_AREA_LEVEL_3.

  • Opcional: Es un LatLng que especifica la ubicación de origen de la solicitud. Cuando llamas a setOrigin(), el servicio muestra la distancia en metros (distanceMeters) desde el origen especificado, para cada predicción de autocompletado en la respuesta.

Para obtener información sobre los tipos de sitios, consulta la guía sobre tipos de sitios.

En el siguiente ejemplo, se muestra una llamada completa a PlacesClient.findAutocompletePredictions().

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")
        .setTypeFilter(TypeFilter.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());
        }
    });

      

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")
            .setTypeFilter(TypeFilter.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)
            }
        }

      

La API muestra un FindAutocompletePredictionsResponse en un Task. El objeto FindAutocompletePredictionsResponse contiene una lista de objetos AutocompletePrediction que representan lugares de predicción. La lista puede estar vacía si no hay un lugar conocido que corresponda a la consulta y a los criterios de filtro.

Para cada sitio de predicción, puedes llamar a los siguientes métodos a fin de recuperar detalles del lugar:

  • getFullText(CharacterStyle) muestra el texto completo de una descripción del lugar. Esta es una combinación del texto principal y el secundario. Ejemplo: "Eiffel Tower, Avenue Anatole France, Paris, France". Además, este método te permite destacar las secciones de la descripción que coinciden con la búsqueda con un estilo que elijas, mediante CharacterStyle. El parámetro CharacterStyle es opcional. Establécelo en nulo si no necesitas destacar nada.
  • getPrimaryText(CharacterStyle) muestra el texto principal que describe un lugar. Este suele ser el nombre del lugar. Ejemplos: "Eiffel Tower" y &br;123 Pitt Street".
  • getSecondaryText(CharacterStyle) muestra el texto secundario de la descripción de un lugar. Esto es útil, por ejemplo, como segunda línea cuando se muestran predicciones de autocompletado. Ejemplos: Avenida Anatole France, París, Francia &Sídney, Nueva Gales del Sur".
  • getPlaceId() muestra el ID de lugar de predicción. Un ID de lugar es un identificador textual que identifica de forma exclusiva un lugar y que puedes usar para recuperar el objeto Place más tarde. Para obtener más información sobre los ID de lugar en el SDK de Places para Android, consulta Place Details. Para obtener información general sobre los ID de lugar, consulta la descripción general de los ID de lugar.
  • getPlaceTypes() muestra la lista de tipos de sitios asociados con este lugar.
  • getDistanceMeters() muestra la distancia en línea recta en metros entre este lugar y el origen especificado en la solicitud.

Tokens de sesión

Los tokens de sesión agrupan las fases de consulta y selección de la búsqueda de autocompletado de un usuario en una sesión discreta con fines de facturación. La sesión comienza cuando el usuario comienza a escribir una consulta y termina cuando selecciona un lugar. Cada sesión puede tener varias consultas, seguidas de una selección de lugar. Una vez que la sesión concluye, el token ya no es válido; tu app debe generar un token nuevo para cada sesión. Recomendamos usar tokens de sesión para todas las sesiones de autocompletado programático (cuando incorporas un fragmento o inicias el autocompletado con un intent, la API se encarga de esto automáticamente).

Places SDK for Android usa una AutocompleteSessionToken para identificar cada sesión. Tu app debe pasar un token de sesión nuevo al inicio de cada sesión nueva y, luego, pasar ese mismo token, junto con un ID de lugar, en la llamada posterior a fetchPlace() para recuperar detalles del lugar que seleccionó el usuario.

Obtén más información sobre los tokens de sesión.

Restringe los resultados de autocompletado

Puedes limitar los resultados de autocompletado a una región geográfica específica o filtrarlos por uno o más tipos de lugares o hasta cinco países. Puedes aplicar estas restricciones a la actividad de autocompletado, AutocompleteSupportFragment y a las API de autocompletado programático.

Para restringir los resultados, haz lo siguiente:

  • Para preferir resultados dentro de la región definida, llama a setLocationBias() (es posible que aún se muestren algunos resultados fuera de la región definida).
  • Para mostrar solo los resultados dentro de la región definida, llama a setLocationRestriction() (solo se mostrarán los resultados dentro de la región definida).
  • Para que se muestren solo resultados que se ajustan a un tipo de lugar en particular, llama a setTypeFilter() (por ejemplo, si especificas TypeFilter.ADDRESS, solo se mostrarán resultados con una dirección precisa).
  • Para mostrar solo los resultados dentro de un máximo de cinco países especificados, llama a setCountries(). Los países deben pasarse como un código de país ISO 3166-1 alfa-2 de dos caracteres.

Sesgo de resultados para una región específica

Para restringir los resultados de autocompletado a una región geográfica específica, llama a setLocationBias() y pasa un RectangularBounds. En el siguiente ejemplo de código, se muestra cómo llamar a setLocationBias() en una instancia de fragmento para restringir sus sugerencias de autocompletado a una región de Sídney, Australia.

Java


    autocompleteFragment.setLocationBias(RectangularBounds.newInstance(
        new LatLng(-33.880490, 151.184363),
        new LatLng(-33.858754, 151.229596)));

      

Kotlin


    autocompleteFragment.setLocationBias(
        RectangularBounds.newInstance(
            LatLng(-33.880490, 151.184363),
            LatLng(-33.858754, 151.229596)
        )
    )

      

Restringe los resultados a una región específica

Para restringir los resultados de autocompletado a una región geográfica específica, llama a setLocationRestriction() y pasa un RectangularBounds. En el siguiente ejemplo de código, se muestra cómo llamar a setLocationRestriction() en una instancia de fragmento para restringir las sugerencias de autocompletado a una región de Sídney, Australia.

Java


    autocompleteFragment.setLocationRestriction(RectangularBounds.newInstance(
        new LatLng(-33.880490, 151.184363),
        new LatLng(-33.858754, 151.229596)));

      

Kotlin


    autocompleteFragment.setLocationRestriction(
        RectangularBounds.newInstance(
            LatLng(-33.880490, 151.184363),
            LatLng(-33.858754, 151.229596)
        )
    )

      

Nota: Esta restricción solo se aplica a rutas completas, los resultados sintéticos ubicados fuera de los límites rectangulares se pueden mostrar en función de una ruta que se superponga con la restricción de ubicación.

Filtrar resultados por tipo de lugar

Puedes restringir los resultados de una solicitud de autocompletado para que solo muestren un tipo de lugar determinado. Si los resultados no están restringidos, se mostrarán todos los tipos. En general, solo se permite un tipo. La excepción es que puedes combinar de manera segura los tipos GEOCODE y ESTABLISHMENT; sin embargo, esto tiene el mismo efecto que no especificar tipos.

Para filtrar los resultados de autocompletado según un tipo de lugar específico, llama a setTypeFilter() a fin de configurar el filtro que deseas usar. Luego, pasa el filtro a un fragmento o una intent.

En el siguiente ejemplo de código, se muestra cómo llamar a setTypeFilter() en un AutocompleteSupportFragment para configurar un filtro que muestre solo resultados con una dirección precisa.

Java


    autocompleteFragment.setTypeFilter(TypeFilter.ADDRESS);

      

Kotlin


    autocompleteFragment.setTypeFilter(TypeFilter.ADDRESS)

      

En el siguiente ejemplo de código, se muestra cómo llamar a setTypeFilter() en un IntentBuilder para establecer un filtro que muestre solo resultados con una dirección exacta.

Java


    Intent intent = new Autocomplete.IntentBuilder(
        AutocompleteActivityMode.FULLSCREEN, fields)
        .setTypeFilter(TypeFilter.ADDRESS)
        .build(this);
    startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE);

      

Kotlin


    val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
        .setTypeFilter(TypeFilter.ADDRESS)
        .build(this)
    startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE)

      

Para obtener información sobre los tipos de sitios, consulta la guía sobre tipos de sitios.

Filtrar resultados por país

Para filtrar los resultados de autocompletado en hasta cinco países, llama a setCountries() a fin de configurar el código de país. Luego, pasa el filtro a un fragmento o una intent. Los países deben pasarse como un código de país ISO 3166-1 alfa-2 de dos caracteres.

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 de los países especificados.

Java


    autocompleteFragment.setCountries("AU", "NZ");

      

Kotlin


    autocompleteFragment.setCountries("AU", "NZ")

      

Límites de uso

Tu uso de la API de Places, incluido el SDK de Places para Android, ya no se limita a una cantidad máxima de solicitudes por día (QPD). Sin embargo, aún se aplican los siguientes límites de uso:

  • El límite de frecuencia es de 100 solicitudes por segundo (QPS). Se calcula como la suma de las solicitudes del cliente y del servidor para todas las aplicaciones que usan las credenciales del mismo proyecto.

Mostrar atribuciones en tu aplicación

  • Si tu app usa el servicio de autocompletado de manera programática, la IU debe mostrar una atribución "Con la tecnología de Google" o aparecer dentro de un mapa de la marca Google.
  • Si tu app usa el widget de autocompletado, 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 un lugar por ID, también debes 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 las prácticas recomendadas para ayudarte a aprovechar al máximo el servicio de Place Autocomplete.

Estos son algunos lineamientos generales:

  • La forma más rápida de desarrollar una interfaz de usuario que funcione es usar el widget Autocomplete de la API de Maps JavaScript, el widget de autocompletado del SDK de Places para Android o el control de IU de autocompletado del SDK de Places para iOS
  • Comprende los campos de datos esenciales de Place Autocomplete desde el principio.
  • Los campos de restricción de ubicación y restricción de ubicación son opcionales, pero pueden afectar de forma significativa el rendimiento del autocompletado.
  • Usa el manejo de errores para asegurarte de que tu app se degrade con elegancia si la API muestra un error.
  • Asegúrate de que tu app la maneje 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 de Place Autocomplete, usa máscaras de campo en los widgets de Place Details y Place Autocomplete a fin de mostrar solo los campos de datos de lugar que necesites.

Optimización avanzada de los costos

Considera la implementación programática de Place Autocomplete para acceder a precios por solicitud y solicitar resultados de la API de Geocoding sobre el sitio seleccionado en lugar de Place Details. El precio por solicitud combinado con la API de Geocoding es más rentable que el precio por sesión (basado en sesión) si se cumplen las siguientes condiciones:

  • Si solo necesitas la latitud y longitud o la dirección del sitio seleccionado por el usuario, la Geocoding API proporciona esta información para una llamada a Place Details.
  • Si los usuarios seleccionan una predicción de autocompletado en un promedio de cuatro solicitudes de predicción de autocompletado o menos, el precio por solicitud puede ser más rentable que el precio por sesión.
Si necesitas ayuda para elegir la implementación de Place Autocomplete que mejor se adapte a tus necesidades, selecciona la pestaña correspondiente a tu respuesta a la siguiente pregunta.

¿Tu aplicación requiere información que no sea la dirección y latitud o longitud de la predicción seleccionada?

Sí, necesita más detalles.

Usa Place Autocomplete basado en sesiones con Place Details.
Debido a que tu aplicación requiere 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 (de manera programática o incorporado en los widgets de JavaScript, Android o iOS) por un costo total de USD 0.017 por sesión, además de los SKU de Places Data aplicables.5

Implementación de widgets
La administración de sesiones se incorpora 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 garantizar que solo solicites los campos de datos de lugar que necesitas.

Implementación programática
Usa un token de sesión con tus solicitudes a Place Autocomplete. Cuando solicites Place Details sobre la predicción seleccionada, incluye los siguientes parámetros:

  1. El id. de sitio de la respuesta de autocompletado de sitios.
  2. El token de sesión que se usó en la solicitud a Place Autocomplete
  3. 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 del uso de Place Autocomplete. La eficiencia del autocompletado de cada aplicación varía según lo que ingresen los usuarios, dónde se use la aplicación y si se implementaron 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 en cuatro o menos solicitudes?

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 $0.005 por solicitud. Realizar cuatro solicitudes de Place Autocomplete, por solicitud cuesta $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 $0.01632, que es menor que el precio por autocompletado de sesión de $0.017 por sesión.1

Considera usar las prácticas recomendadas de rendimiento para ayudar a los usuarios a obtener la predicción que buscan con menos caracteres.

No

Usa 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 de los precios por sesión, tu implementación de Place Autocomplete debe usar un token de sesión para las solicitudes a Place Autocomplete y la solicitud a Place Details asociada, con un costo total de $0.017 por sesión.1

Implementación de widgets
La administración de sesiones se incorpora 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 que solo solicites campos de datos básicos.

Implementación programática
Usa un token de sesión con tus solicitudes a Place Autocomplete. Cuando solicites Place Details sobre la predicción seleccionada, incluye los siguientes parámetros:

  1. El id. de sitio de la respuesta de autocompletado de sitios.
  2. El token de sesión que se usó en la solicitud a Place Autocomplete
  3. El parámetro fields especifica campos de datos básicos, como la dirección y 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, realizar solicitudes de Place Autocomplete para cada carácter después de que el usuario haya escrito el tercer carácter significa que, si el usuario escribe siete caracteres, selecciona una predicción para la que realizarás una solicitud a la API de Geocoding, el costo total sería $0.01632 (4 * $0.00283 Autocomplete por solicitud + $0.005 Geocoding).1

Si las solicitudes retrasadas pueden hacer que tu solicitud programática sea inferior a cuatro, puedes seguir la guía para la implementación del autocompletado de sitios con la API de Geocoding. Ten en cuenta que el usuario que podría esperar ver las predicciones con cada pulsación de tecla nueva puede percibir la demora en las solicitudes.

Considera usar las prácticas recomendadas de rendimiento para ayudar a los usuarios a obtener la predicción que buscan en menos caracteres.


  1. Los costos que se indican aquí son en USD. Consulta la página Facturación de Google Maps Platform para obtener información completa sobre los precios.

Prácticas recomendadas para el rendimiento

Las siguientes pautas describen las maneras de optimizar el rendimiento del autocompletado de sitios:

  • Agrega restricciones de país, restricción de ubicación y preferencia de idioma (para implementaciones programáticas) a tu implementación de Place Autocomplete. Con los widgets, no se necesita una preferencia de idioma, ya que se eligen en el navegador o en el dispositivo móvil del usuario.
  • Si el autocompletado de sitios está acompañado de un mapa, puedes restringir la ubicación según el viewport del mapa.
  • Si un usuario no selecciona una de las predicciones de Autocompletar, por lo general, debido a que ninguna de esas predicciones es la dirección de resultado deseada, puedes volver a usar la entrada original del usuario para intentar obtener resultados más relevantes:
    • Si esperas que el usuario ingrese solo información de dirección, vuelve a usar la entrada original del usuario en una llamada a la API de Geocoding.
    • Si esperas que el usuario ingrese consultas para un lugar específico por nombre o dirección, usa una solicitud de Place Place. Si los resultados solo se esperan en una región específica, usa la restricción de ubicación.
    Otros casos en los que es mejor recurrir a la API de Geocoding son los siguientes:
    • Usuarios que ingresan direcciones locales en países distintos de Australia, Canadá o Nueva Zelanda Por ejemplo, la dirección estadounidense 123 Bowdoin St #456, Boston MA, EE.UU. no es compatible con el autocompletado. (Autocompletar admite direcciones locales únicamente en Australia, Canadá y Nueva Zelanda). Los formatos de dirección admitidos en estos tres países son "9/321 Pitt Street, Sídney, Nueva Gales del Sur, Australia", o "14/19 Langana Avenue, Browns Bay, Auckland, Nueva Zelanda" o "145-112 Renfrew Dr, Markham, Ontario, Canadá").
    • Los usuarios que ingresan direcciones con prefijos de tramo de ruta como "23-30 29th St, Queens" en Nueva York o "47-380 Kamehameha Hwy, Kaneohe" en la isla de Kauai en Hawai.

Solución de problemas

Si bien puede producirse una gran variedad de errores, la mayoría de los errores que puede experimentar la app suelen deberse a errores de configuración (por ejemplo, si se usó una clave de API incorrecta o la clave de API se configuró de forma incorrecta) o a errores de cuota (tu app excedió su cuota). Consulta Límites de uso para obtener más información sobre las cuotas.

Los errores que ocurren cuando se usan los controles de autocompletado se muestran en la devolución de llamada onActivityResult(). Llama a Autocomplete.getStatus() para obtener el mensaje de estado del resultado.