El servicio Autocomplete (nuevo) es una API de iOS que devuelve sugerencias de lugares en respuesta a una solicitud. En la solicitud, especifica una cadena de búsqueda de texto y los límites geográficos que controlan el área de búsqueda.
El servicio de Autocomplete (nuevo) puede buscar coincidencias para palabras completas y subcadenas de la entrada para resolver nombres de lugares, direcciones y Plus Codes. Así, las aplicaciones pueden enviar consultas a medida que el usuario escribe para proporcionar sugerencias de lugares en el momento.
Las sugerencias de lugares son lugares, como empresas, direcciones y lugares de interés, que se basan en la cadena de texto de entrada y el área de búsqueda especificados.
Por ejemplo, llamas a la API con una cadena que contiene una entrada parcial del usuario, "Spagh", con el área de búsqueda limitada a la ciudad de Nueva York. Luego, la respuesta contiene una lista de sugerencias de lugares que coinciden con la cadena y el área de búsqueda, como el restaurante llamado "Cafe Spaghetti", junto con detalles sobre el lugar.
Las sugerencias de lugares que se devuelven están diseñadas para presentarse al usuario de modo que pueda seleccionar el lugar deseado. Puedes realizar una solicitud de Place Details (nuevo) para obtener más información sobre cualquiera de las sugerencias de lugares que se devuelven.
Puedes integrar la funcionalidad de Autocomplete (nuevo) en tu app de dos maneras principales:
- Obtén predicciones de lugares de forma programática: Llama a la API directamente para recuperar predicciones y mostrarlas en una interfaz de usuario personalizada.
- Agrega el widget de Place Autocomplete: Proporciona una experiencia de autocompletado de búsqueda lista para usar que muestra predicciones a medida que el usuario escribe.
Obtén predicciones de lugares de manera programática
Solicitudes de Autocomplete (New)
Para crear una solicitud de autocompletado, llama a un método en
GMSPlacesClient.
Puedes pasar parámetros en el objeto GMSAutocompleteRequest. La respuesta proporciona sugerencias de Autocomplete dentro de un objeto GMSAutocompletePlaceSuggestion.
La clave de API y los parámetros query son obligatorios. También puedes incluir
GMSAutocompleteSessionToken
para asociar las solicitudes con una sesión de facturación y
GMSAutocompleteFilter
para aplicar a los resultados.
Versión del SDK de Places para Swift
Para crear una solicitud de autocompletado, llama a un método en
PlacesClient.
Puedes pasar parámetros en el objeto AutocompleteRequest. La respuesta proporciona sugerencias de Autocomplete dentro de un objeto AutocompletePlaceSuggestion.
Los parámetros de la clave de API y query son obligatorios. También puedes incluir
AutocompleteSessionToken
para asociar las solicitudes con una sesión de facturación y
AutocompleteFilter
para aplicar a los resultados.
Para obtener más información sobre los parámetros obligatorios y opcionales, consulta la sección de parámetros de este documento.
SDK de Places para Swift
let center = (37.3913916, -122.0879074) let northEast = (37.388162, -122.088137) let southWest = (37.395804, -122.077023) let bias = RectangularCoordinateRegion(northEast: northEast, southWest: southWest) let filter = AutocompleteFilter(types: [ .restaurant ], origin: center, coordinateRegionBias: bias) let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): // Handle suggestions. case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let northWestBounds = CLLocationCoordinate2DMake(40.921628, -73.700051) let southEastBounds = CLLocationCoordinate2DMake(40.477398, -74.259087) let filter = GMSAutocompleteFilter() filter.types = [kGMSPlaceTypeRestaurant] filter.locationBias = GMSPlaceRectangularLocationOption(northWestBounds, southEastBounds) let request = GMSAutocompleteRequest(query:"Spagh") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
Objective-C
CLLocationCoordinate2D northEast = CLLocationCoordinate2DMake(37.388162, -122.088137); CLLocationCoordinate2D southWest = CLLocationCoordinate2DMake(37.395804, -122.077023); GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.types = @[ kGMSPlaceTypeRestaurant ]; filter.locationBias = GMSPlaceRectangularLocationOption(northEast, southWest); GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
Respuestas de Autocomplete (nuevo)
La función Autocomplete devuelve un array de hasta cinco instancias de GMSAutocompleteSuggestion. El array contiene lo siguiente:
placeIDtypes: Son los tipos que se aplican a este lugar.distanceMeters: Es la distancia desde el origen.attributedFullText: Es el texto completo de una sugerencia, legible por humanos.attributedPrimaryText: Es el texto principal de una sugerencia, legible por humanos.attributedSecondaryText: Es el texto secundario legible por humanos de una sugerencia.structuredFormat: Es el nombre específico y el texto de desambiguación, como la ciudad o la región.
Parámetros obligatorios
consulta
Es la cadena de texto en la que se realizará la búsqueda. Especifica palabras completas y subcadenas, nombres de lugares, direcciones y Plus Codes. El servicio de Autocomplete (nuevo) devuelve posibles coincidencias en función de esta cadena y ordena los resultados según la relevancia percibida.
Parámetros opcionales
sessionToken
Los tokens de sesión son cadenas generadas por el usuario que realizan un seguimiento de las llamadas de Autocomplete (nuevo), tanto las que se realizan a través del widget como las programáticas, como "sesiones". Autocomplete (nuevo) usa tokens de sesión para agrupar las etapas de consulta y selección de la búsqueda con autocompletado de un usuario en una sesión discreta para realizar la facturación correspondiente.
Puedes exponer tu token de sesión de Place Autocomplete para pasarlo a otros servicios que no formen parte del SDK de Places para iOS, como Address Validation:
SDK de Places para Swift
let token = AutocompleteSessionToken() let filter = AutocompleteFilter(origin: CLLocationCoordinate2DMake(39.7, -94.5)) let request = AutocompleteRequest(query: "Piz", sessionToken: token, filter: filter) PlacesClient.shared.fetchAutocompleteSuggestions(request: request) { case .success(let suggestions): ... case .failure(let placesError): print(placesError) } // pass token's string format to use with a service that is not a part of iOS SDK. print("token: \(token)")
Objective-C
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Piz"]; GMSAutocompleteSessionToken *token = [[GMSAutocompleteSessionToken alloc] init]; request.sessionToken = token; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.origin = [[CLLocation alloc] initWithLatitude:39.7 longitude:-94.5]; filter.locationBias = GMSPlaceRectangularLocationOption(topLocation, bottomLocation); request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> *_Nullable results, NSError *_Nullable error) { ... }]; // pass token's string format to use with a service that is not a part of iOS SDK. NSLog(@"%@", token.description);
Consulta Tokens de sesión para obtener más información.
Parámetros opcionales de AutocompleteFilter
máquinas activas
Un lugar solo puede tener un tipo principal único de los tipos de la tabla A o la tabla B asociados con él.
Por ejemplo, el tipo principal puede ser mexican_restaurant o steak_house.
De forma predeterminada, la API devuelve todos los lugares según el parámetro input,
independientemente del valor de tipo principal asociado con el lugar. Restringe los resultados
para que sean de un tipo principal o de varios tipos principales pasando el parámetro
types.
Usa este parámetro para especificar hasta cinco valores de tipo de la tabla A o la tabla B. Un lugar debe coincidir con uno de los valores de tipo principal especificados para incluirse en la respuesta.
La solicitud se rechaza con un error INVALID_REQUEST en los siguientes casos:
- Si se especifican más de cinco tipos
- Se especifican los tipos no reconocidos.
Por ejemplo, para limitar los resultados a tiendas de artículos deportivos, especifica ese tipo en tu AutocompleteFilter:
SDK de Places para Swift
let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ])
Swift
let filter = GMSAutocompleteFilter() filter.types = ["sporting_goods_store"]
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.types = @[ "sporting_goods_store" ];
países
Solo incluye resultados de la lista de regiones especificadas, que se indica como un array de hasta 15 valores de dos caracteres de ccTLD ("dominio de nivel superior"). Si se omite, no se aplican restricciones a la respuesta. Por ejemplo, para limitar las regiones a Alemania y Francia, haz lo siguiente:
SDK de Places para Swift
let filter = AutocompleteFilter(countries: ["DE", "FR"])
Swift
let filter = GMSAutocompleteFilter() filter.countries = ["DE", "FR"]
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.countries = @[ @"DE", @"FR" ];
Si especificas locationRestriction y countries, los resultados se ubican en el área de intersección de los dos parámetros de configuración.
inputOffset
Es el desplazamiento de caracteres Unicode basado en cero que indica la posición del cursor en
input. La posición del cursor puede influir en las predicciones que se devuelven. Si
está vacío, el valor predeterminado es la longitud de input.
locationBias o locationRestriction
Puedes especificar locationBias o locationRestriction, pero no ambos, para definir
el área de búsqueda. Piensa en locationRestriction como la especificación de la región en la que
deben estar los resultados y en locationBias como la especificación de la región a la que
deben estar cerca los resultados, pero que pueden estar fuera del área.
locationBiasespecifica un área para buscar. Esta ubicación funciona como un sesgo, lo que significa que se pueden mostrar resultados alrededor de la ubicación especificada, incluidos los resultados fuera del área especificada.locationRestrictionespecifica un área para buscar. No se devuelven resultados fuera del área especificada.
Especifica la región locationBias o locationRestriction como un viewport rectangular o como un círculo.
Un círculo se define por el punto central y el radio en metros. El radio debe estar entre 0.0 y 50000.0, inclusive. El valor predeterminado es 0.0. Para
locationRestriction, debes establecer el radio en un valor superior a 0.0.
De lo contrario, la solicitud no devolverá resultados.
Por ejemplo:
SDK de Places para Swift
let center = CLLocationCoordinate2DMake(40.477398, -74.259087) let bias = CircularCoordinateRegion(center: center, radius: 1000.0) let filter = AutocompleteFilter(coordinateRegionBias: bias)
Swift
let center = CLLocationCoordinate2DMake(40.730610, -73.935242) let radius = 1000.0 filter.locationBias = GMSPlaceCircularLocationOption(center, radius)
Objective-C
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(40.730610, -73.935242); radius = 1000.0; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationBias = GMSPlaceCircularLocationOption(center, radius);
Un rectángulo es un viewport de latitud y longitud, representado como dos puntos low y high diagonalmente opuestos. Un viewport se considera una región cerrada,
lo que significa que incluye su límite. Los límites de latitud deben estar comprendidos entre -90 y 90 grados, inclusive, y los límites de longitud deben estar comprendidos entre -180 y 180 grados, inclusive:
- Si
low=high, el viewport consta de ese único punto. - Si
low.longitude>high.longitude, el rango de longitud se invierte (el viewport cruza la línea de longitud de 180 grados). - Si
low.longitude= -180 grados yhigh.longitude= 180 grados, el viewport incluye todas las longitudes. - Si
low.longitude= 180 grados yhigh.longitude= -180 grados, el rango de longitud está vacío.
Se deben propagar low y high, y el cuadro representado no puede estar
vacío. Un viewport vacío genera un error.
Por ejemplo, este viewport encierra por completo la ciudad de Nueva York:
SDK de Places para Swift
let northEast = CLLocationCoordinate2DMake(40.477398, -74.259087) let southWest = CLLocationCoordinate2DMake(40.921628, -73.700051) let filter = AutocompleteFilter(coordinateRegionBias: bias)
Swift
let high = CLLocationCoordinate2DMake(40.921628, -73.700051) let low = CLLocationCoordinate2DMake(40.477398, -74.259087) let filter = GMSAutocompleteFilter() filter.locationBias = GMSPlaceRectangularLocationOption(high, low)
Objective-C
CLLocationCoordinate2D high = CLLocationCoordinate2DMake(40.477398, -74.259087); CLLocationCoordinate2D low = CLLocationCoordinate2DMake(440.921628, -73.700051); GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationBias = GMSPlaceRectangularLocationOption(high, low);
origin
Es el punto de origen desde el que se calcula la distancia en línea recta hasta el destino (se devuelve como distanceMeters). Si se omite este valor, no se devolverá la distancia en línea recta. Se deben especificar como coordenadas de latitud y
longitud:
SDK de Places para Swift
let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.395804, longitude: -122.077023))
Swift
let filter = GMSAutocompleteFilter() filter.origin = CLLocation(latitude: 37.395804, longitude: -122.077023)
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude: -122.077023];
regionCode
Es el código de región que se usa para dar formato a la respuesta, especificado como un valor de dos caracteres de ccTLD ("dominio de nivel superior"). La mayoría de los códigos ccTLD son idénticos a los códigos ISO 3166-1, con algunas excepciones notables. Por ejemplo, el ccTLD del Reino Unido es "uk" (.co.uk), mientras que su código ISO 3166-1 es "gb" (técnicamente para la entidad "Reino Unido de Gran Bretaña e Irlanda del Norte").
Si especificas un código de región no válido, la API mostrará un error INVALID_ARGUMENT. El parámetro puede afectar los resultados según la legislación aplicable.
shouldIncludePureServiceAreaBusinesses
Si es true, devuelve empresas de servicio en el área puras en el array de respuesta. Una empresa exclusivamente de servicio en el área es una empresa que visita a los clientes o les entrega sus productos directamente, pero que no los atiende en su dirección comercial.
Por ejemplo:
SDK de Places para Swift
let filter = AutocompleteFilter() filter.shouldIncludePureServiceAreaBusinesses = true
Swift
let filter = AutocompleteFilter() filter.shouldIncludePureServiceAreaBusinesses = true
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.shouldIncludePureServiceAreaBusinesses = YES;
Agrega el widget de Place Autocomplete
Para proporcionar una experiencia de Place Autocomplete coherente con mayor facilidad, puedes agregar
el widget de Place Autocomplete a tu app. El widget proporciona una interfaz dedicada
de pantalla completa que controla la entrada del usuario y le muestra predicciones de lugares
mientras devuelve objetos
AutocompletePlaceSuggestion
a la app. Luego, puedes realizar una solicitud de Place Details
(nuevo) para obtener
información adicional sobre cualquiera de las predicciones de lugares.
Al igual que cuando obtienes predicciones de lugares de manera programática, el widget de Place Autocomplete te permite usar tokens de sesión para agrupar las solicitudes de autocompletado en una sesión con fines de facturación. Puedes pasar un token de sesión llamando a AutocompleteSessionToken().
Si no proporcionas un token de sesión, el widget creará un token de sesión de Autocomplete
por ti, que luego se podrá obtener de la devolución de llamada
onSelection. Para obtener más información sobre el uso de tokens de sesión, consulta Acerca de los tokens de sesión.
Cuando el valor de vinculación de show se establece en true, el usuario se dirigirá a una vista de pantalla completa en la que podrá seleccionar un lugar. A medida que el usuario escribe, el widget devuelve sugerencias de lugares, como empresas, direcciones y lugares de interés. Cuando el usuario selecciona un lugar, el widget llama al controlador onSelection con el lugar seleccionado y cierra la vista de pantalla completa.
Parámetros del widget de Place Autocomplete
Además de los parámetros disponibles de forma programática, el widget de Place Autocomplete también ofrece los siguientes parámetros.
mostrar
show especifica si se muestra el widget.
onSelection
Es el cierre que se ejecutará cuando se seleccione un lugar.
onError
Es el cierre que se ejecutará cuando se produzca un error. Se pasará un
PlacesError
si se produce un error.
Personalización del contenido y el tema
Los parámetros AutocompleteUICustomization especifican las personalizaciones de la IU que se aplicarán al widget. Las
opciones de personalización son las siguientes:
AutocompleteListDensity. Este parámetro te permite elegir la densidad de la lista de sugerencias, ya seamultiLineotwoLine.AutocompleteUIIcon: Este parámetro te permite elegir si deseas mostrar el ícono predeterminado para cada elemento de la lista.theme: Este parámetro especifica un tema personalizado que anula cualquiera de los atributos de estilo predeterminados. Puedes personalizar los colores, la tipografía, el espaciado, los bordes y las esquinas de tu componente de Place Autocomplete. El valor predeterminado esPlacesMaterialTheme. Los atributos de tema que no se anulan usan los estilos predeterminados.
Consulta un ejemplo de código completo.
Ejemplos de Autocomplete (nuevo)
Usa locationRestriction y locationBias
La función Autocomplete (New) usa la personalización de IP de forma predeterminada para controlar el área de búsqueda. Con la personalización por IP, la API usa la dirección IP del dispositivo para personalizar los resultados. De manera opcional, puedes usar locationRestriction o
locationBias, pero no ambos, para especificar
un área de búsqueda.
La restricción de ubicación especifica el área en la que se realizará la búsqueda. No se devuelven resultados fuera del área especificada. En el siguiente ejemplo, se usa la restricción de ubicación para limitar la solicitud a una restricción de ubicación circular con un radio de 5,000 metros centrado en San Francisco:
SDK de Places para Swift
let center = (37.775061, -122.419400) let radius = 5000.0 let restriction = CircularCoordinateRegion(center: center, radius: radius) let filter = AutocompleteFilter(coordinateRegionRestriction: restriction) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let center = CLLocationCoordinate2DMake(37.775061, -122.419400) let radius = 5000.0 let filter = GMSAutocompleteFilter() filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius) let request = GMSAutocompleteRequest(query:"Piz") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
Objective-C
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400); radius = 5000.0; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius); GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
Con la personalización de ubicación, la ubicación funciona como un sesgo, lo que significa que se pueden mostrar resultados alrededor de la ubicación especificada, incluidos los resultados fuera del área especificada. En el siguiente ejemplo, se cambia la solicitud anterior para usar la preferencia de ubicación:
SDK de Places para Swift
let center = (37.775061, -122.419400) let radius = 5000.0 let bias = CircularCoordinateRegion(center: center, radius: radius) let filter = AutocompleteFilter(coordinateRegionBias: bias) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let center = CLLocationCoordinate2DMake(37.775061, -122.419400) let radius = 5000.0 let filter = GMSAutocompleteFilter() filter.locationBias = GMSPlaceCircularLocationOption(center, radius) let request = GMSAutocompleteRequest(query:"Piz") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
Objective-C
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400); radius = 5000.0; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationBias = GMSPlaceCircularLocationOption(center, radius); GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
Tipos de uso
Usa el parámetro types para restringir los resultados de una solicitud a un tipo determinado, como se indica en la Tabla A y la Tabla B. Puedes especificar un array de hasta cinco valores. Si se omite, se devuelven todos los tipos.
En el siguiente ejemplo, se especifica una cadena de consulta de "Soccer" y se usa el parámetro types para restringir los resultados a establecimientos del tipo "sporting_goods_store":
SDK de Places para Swift
let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ]) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Soccer", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let filter = GMSAutocompleteFilter() filter.types = ["sporting_goods_store"] let request = GMSAutocompleteRequest(query:"Soccer") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.types = @[ "sporting_goods_store" ]; GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Soccer"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
Usar origen
Cuando incluyes el parámetro origin en la solicitud, especificado como
coordenadas de latitud y longitud, la API incluye la distancia en línea recta
desde el origen hasta el destino en la respuesta. La respuesta devuelve la
distancia como distanceMeters.
En este ejemplo, se establece el origen en el centro de San Francisco:
SDK de Places para Swift
let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.7749, longitude: -122.4194)) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Amoeba", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let origin = CLLocation(latitude: 37.7749, longitude: -122.4194) let filter = GMSAutocompleteFilter() filter.origin = origin let request = GMSAutocompleteRequest(query:"Amoeba") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText)) and distance: \(String(describing: result.placeSuggestion?.distanceMeters))") } } })
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude:-122.077023]; GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Amoeba"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
Personaliza el contenido y el tema
Swift
let uiCustomization = AutocompleteUICustomization( listDensity: .multiLine, listItemIcon: .noIcon, theme: PlacesMaterialTheme() )
Agrega un widget de Place Autocomplete (código completo)
SDK de Places para Swift
struct PlaceAutocompleteDemoView: View { @State private var fetchedPlace: Place? @State private var placesError: PlacesError? @State private var showWidget = false public var body: some View { VStack { Button("Search for a place") { showWidget.toggle() } .placeAutocomplete( show: $showWidget, onSelection: { (autocompletePlaceSuggestion, autocompleteSessionToken) in Task { let placesClient = await PlacesClient.shared let fetchPlaceRequest = FetchPlaceRequest( placeID: autocompletePlaceSuggestion.placeID, placeProperties: [.displayName, .formattedAddress], sessionToken: autocompleteSessionToken ) switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): print("Fetched place: \(place)") self.fetchedPlace = place case .failure(let placesError): print("Failed to fetch place: \(placesError)") self.placesError = placesError } } }, onError: { placesError in self.placesError = placesError } ) } } }
Optimización de Autocomplete (nuevo)
En esta sección, se describen algunas prácticas recomendadas que te ayudarán a aprovechar al máximo el servicio Autocomplete (nuevo).
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 (nuevo) de la API de Maps JavaScript, el widget de Autocomplete (nuevo) del SDK de Places para Android o el widget de Autocomplete (nuevo) del SDK de Places para iOS.
- Comprende los campos de datos esenciales de Autocomplete (nuevo) 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 de Autocomplete (nuevo), usa máscaras de campo en los widgets de Place Details (nuevo) y Autocomplete (nuevo), que te permiten mostrar solo los campos de datos de Autocomplete (nuevo) que necesitas.
Optimización avanzada de los costos
Considera utilizar la implementación programática de Autocomplete (nuevo) para acceder a los precios del SKU: Autocomplete Request y solicitar resultados de la API de Geocoding sobre el lugar seleccionado en lugar de utilizar Place Details (nuevo). Los precios por solicitud 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 (nueva).
- Si los usuarios seleccionan una predicción de autocompletar con un promedio de cuatro solicitudes de Autocomplete (New) o menos, el precio por solicitud puede ser más rentable que el precio por sesión.
| Qué necesita tu aplicación | Promedio de solicitudes de Autocomplete (nuevo) antes de que un usuario seleccione una predicción | Implementación recomendada |
|---|---|---|
| Detalles del lugar que no sean la dirección ni la ubicación, como el nombre del lugar, el estado de la empresa o el horario de atención | Cualquier número | Autocomplete basado en sesiones (nuevo) con Place Details (nuevo) |
| Solo la dirección y las coordenadas de latitud o longitud de la predicción seleccionada | Cuatro o menos | Autocomplete (nuevo) por solicitud con la API de Geocoding |
| Solo la dirección y las coordenadas de latitud o longitud de la predicción seleccionada | Más de cuatro | Autocomplete basado en sesiones (nuevo) para aplicaciones que solo usan direcciones |
La API de Geocoding podría ser una opción más rentable que Place Details (nueva) para tu aplicación, según el rendimiento de su uso de Autocomplete (nueva). La eficiencia de Autocomplete (New) 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 encontrar la cantidad promedio de solicitudes de la tabla, analiza cuántos caracteres escribe un usuario en promedio antes de seleccionar una predicción de Autocomplete (nuevo) en tu aplicación.
Autocomplete (nuevo) basado en sesiones con Place Details (nuevo)
Usa Autocomplete (nuevo) basado en sesiones con Place Details (nuevo).
Dado que tu aplicación requiere Place Details (nuevo), como el nombre del lugar, el estado de la empresa
o el horario de atención, tu implementación de Autocomplete (nuevo) debe usar un token de sesión
(de forma programática o integrado en los widgets de
JavaScript,
Android
o iOS)
por sesión, además de los SKUs 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 Autocomplete (nuevo) y Place Details (nuevo)
en la predicción seleccionada. Asegúrate de especificar el parámetro fields para asegurarte de solicitar únicamente los campos de datos de Autocomplete (nuevo) que necesitas.
Implementación programática
Usa un
token de sesión
con tus solicitudes de Autocomplete (nuevo). Cuando solicites la predicción seleccionada a Place Details (nuevo), incluye los siguientes parámetros:
- El ID de lugar de la respuesta de Autocomplete (nuevo)
- Es el token de sesión que se utilizó en la solicitud de Autocomplete (nuevo).
- El parámetro
fieldsque especifica los campos de datos de Autocomplete (nuevo) que necesitas
Autocomplete (nuevo) por solicitud con la API de Geocoding
Implementa Autocomplete (nuevo) 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.
Realizar cuatro
solicitudes de Autocomplete
más una llamada a la API de Geocoding
sobre la predicción de lugar seleccionada cuesta menos que el precio por sesión de Autocomplete (nuevo).1
Considera aplicar las prácticas recomendadas de rendimiento para ayudar a los usuarios a obtener la predicción que buscan con menos caracteres.
Autocomplete basado en sesiones (nuevo) para aplicaciones que solo usan direcciones
Usa Autocomplete (nuevo) basado en sesiones con Place Details (nuevo).
Dado que la cantidad promedio de solicitudes que esperas realizar antes de que un usuario seleccione una
predicción de Autocomplete (nuevo) supera el costo de los precios por sesión, tu implementación
de Autocomplete (nuevo) debe usar un token de sesión para las solicitudes de Autocomplete (nuevo)
y la solicitud de Place Details (nuevo) asociada
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 Autocomplete (nuevo) y Place Details (nuevo) en la predicción seleccionada. Asegúrate de especificar el parámetro fields para asegurarte de solicitar únicamente los campos que necesitas.
Implementación programática
Usa un
token de sesión
con tus solicitudes de Autocomplete (nuevo).
Cuando solicites la predicción seleccionada a Place Details (nuevo), incluye los siguientes parámetros:
- El ID de lugar de la respuesta de Autocomplete (nuevo)
- Es el token de sesión que se utilizó en la solicitud de Autocomplete (nuevo).
- El parámetro
fieldsque especifica campos de datos básicos, como la dirección y la geometría
Considera retrasar las solicitudes de Autocomplete (nuevo)
Puedes emplear estrategias como demorar una solicitud de Autocomplete (nuevo) hasta que el usuario escriba los primeros tres o cuatro caracteres para que tu aplicación realice menos solicitudes. Por ejemplo, si realizas solicitudes de Autocomplete (New) para cada carácter después de que el usuario escribe el tercer carácter, significa que, si el usuario escribe siete caracteres y, luego, selecciona una predicción para la que realizas una solicitud a la API de Geocoding, el costo total sería de 4 solicitudes de Autocomplete (New) por solicitud + Geocoding.1
Si retrasar las solicitudes puede hacer que tu solicitud programática promedio sea inferior a cuatro, puedes seguir las instrucciones para implementar Autocomplete (nuevo) 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.
-
Para conocer los costos, consulta las listas de precios de Google Maps Platform.
Prácticas recomendadas para el rendimiento
Los siguientes lineamientos describen maneras de optimizar el rendimiento de Autocomplete (nuevo):
- 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 Autocomplete (nuevo). 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 Autocomplete (nuevo) 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 (New), 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 Place Details (nuevo). 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 de sublocales, como direcciones de unidades o departamentos específicos dentro de un edificio Por ejemplo, la dirección checa "Stroupežnického 3191/17, Praha" genera una predicción parcial en Autocomplete (nuevo).
- 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
Sesgo de ubicación
Personaliza los resultados para un área específica pasando los parámetros location y radius. Esto le indica a Autocomplete (nuevo) que prefiera mostrar resultados dentro del área definida. Es posible que también se muestren resultados externos al área definida. Puedes usar el parámetro includedRegionCodes para filtrar los resultados y mostrar solo los lugares que se encuentran dentro de un país específico.
Restricción de ubicación
Restringe los resultados a un área específica pasando un parámetro locationRestriction.
También puedes restringir los resultados a la región definida por location y un parámetro radius agregando el parámetro locationRestriction. Esto le indica a Autocomplete (nuevo) que devuelva solo
los resultados de esa región.