O serviço de preenchimento automático no SDK do Places para Android retorna um lugar. previsões em resposta às consultas de pesquisa dos usuários. À medida que o usuário digita, o preenchimento automático retorna sugestões de lugares como empresas, endereços IP, Plus Codes e pontos de interesse.
É possível adicionar o preenchimento automático no aplicativo das seguintes formas:
- Adicionar um widget de preenchimento automático para salvar o tempo de desenvolvimento e garantir uma experiência do usuário consistente.
- Receber previsões de lugares programaticamente para criar uma uma experiência do usuário personalizada.
Adicionar um widget de preenchimento automático
O widget de preenchimento automático é uma caixa de diálogo de pesquisa com preenchimento automático integrado
funcionalidade de armazenamento. À medida que o usuário digita termos de pesquisa, o widget apresenta uma lista de
previsão de lugares disponíveis. Quando o usuário faz uma seleção, um
Place
é retornada, que seu aplicativo pode então usar para obter detalhes sobre o
lugar selecionado.
Há duas opções para se adicionar o widget de preenchimento automático ao seu aplicativo:
- Opção 1: incorporar um
AutocompleteSupportFragment
. - Opção 2: usar uma intent para iniciar a atividade de preenchimento automático.
Opção 1: incorporar um AutocompleteSupportFragment
Para adicionar um AutocompleteSupportFragment
ao app, siga estas etapas:
- Adicione um fragmento ao layout XML da atividade.
- Adicione um listener à atividade ou ao fragmento.
Adicionar AutocompleteSupportFragment a uma atividade
Para adicionar AutocompleteSupportFragment
a uma atividade, adicione um novo fragmento a um
Layout XML. Exemplo:
<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"
/>
- Por padrão, o fragmento não tem borda nem plano de fundo. Para fornecer um aparência consistente, aninhe o fragmento em outro layout como um CardView.
- Se você estiver usando o fragmento de preenchimento automático e precisar modificar
onActivityResult
, você precisa chamarsuper.onActivityResult
. Caso contrário, não funcionará corretamente.
Adicionar um PlaceSelectionListener a uma atividade
O PlaceSelectionListener
processa o retorno de um local em resposta à solicitação
O código a seguir mostra como criar uma referência ao fragmento e
adicionando um listener ao seu 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); } });
Opção 2: usar uma intent para iniciar a atividade de preenchimento automático
Se você quiser que seu app use um fluxo de navegação diferente (por exemplo, para acionar a experiência de preenchimento automático a partir de um ícone em vez de um campo de pesquisa), seu app pode iniciar o preenchimento automático usando uma intent.
Para inicializar o widget de preenchimento automático usando um intent, faça o seguinte:
- Usar
Autocomplete.IntentBuilder
para criar uma intent, passando o modoAutocomplete
desejado. - Definir um inicializador de resultados de atividades
registerForActivityResult
que pode ser usada para iniciar a intent e processar o local selecionado pelo usuário previsão no resultado.
Criar uma intent de preenchimento automático
O exemplo abaixo usa
Autocomplete.IntentBuilder
para criar uma intent e iniciar o widget de preenchimento automático como uma 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);
Ao usar uma intent para iniciar o widget de preenchimento automático, é possível escolher entre: os modos de exibição sobreposto ou em tela cheia. As capturas de tela a seguir mostram cada modo de exibição, respectivamente:
Registrar um callback para o resultado da intent
Para receber uma notificação quando o usuário selecionar um lugar, defina um
Tela de início registerForActivityResult()
, que inicia a atividade e processa a
como mostrado no exemplo a seguir. Se o usuário selecionou uma previsão, ela
serão entregues na intent contida no objeto de resultado. Como a intent
foi criado por Autocomplete.IntentBuilder
, o método
Autocomplete.getPlaceFromIntent()
pode extrair o objeto do Place dele.
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"); } });
Como receber previsões de lugares de forma programática
É possível criar uma interface de pesquisa personalizada como alternativa à interface fornecida pelo
widget de preenchimento automático. Para fazer isso, seu app precisa receber previsões de lugares
programaticamente. Seu app pode conseguir uma lista de nomes de lugares previstos e/ou
da API Autocomplete chamando
PlacesClient.findAutocompletePredictions()
,
transmitir um
FindAutocompletePredictionsRequest
com os seguintes parâmetros:
- Obrigatório:uma string
query
contendo o texto digitado pelo usuário. - Recomendado:A
AutocompleteSessionToken
, que agrupa as fases de consulta e seleção de uma pesquisa de usuário em um para fins de faturamento. A sessão começa quando o usuário começa a digitar uma consulta e termina quando selecionam um local. - Recomendado:um
RectangularBounds
que especifica limites de latitude e longitude para restringir os resultados a região especificada. - Opcional:um ou mais país de duas letras (ISO 3166-1) Alfa-2), indicando os países para os quais os resultados devem ser restritas.
Opcional:A
TypeFilter
, que você pode usar para restringir os resultados ao tipo de lugar especificado. O os seguintes tipos de lugar são aceitos:TypeFilter.GEOCODE
: retorna apenas resultados de geocodificação, e não negócios. Use esta solicitação para remover a ambiguidade dos resultados em que o valor local pode ser indeterminado.TypeFilter.ADDRESS
: retorna apenas resultados de preenchimento automático com um o endereço exato. Use esse tipo quando souber que o usuário está procurando um totalmente especificado.TypeFilter.ESTABLISHMENT
: retorna apenas lugares que são negócios.TypeFilter.REGIONS
: retorna apenas lugares que correspondem a um dos seguintes tipos:LOCALITY
SUBLOCALITY
POSTAL_CODE
COUNTRY
ADMINISTRATIVE_AREA_LEVEL_1
ADMINISTRATIVE_AREA_LEVEL_2
TypeFilter.CITIES
: retorna apenas resultados que correspondem aLOCALITY
ouADMINISTRATIVE_AREA_LEVEL_3
Opcional:um
LatLng
que especifica o local de origem da solicitação. Quando você ligarsetOrigin()
, o serviço retorna a distância em metros (distanceMeters
) a partir do para cada previsão de preenchimento automático na resposta.
Para mais informações sobre os tipos de lugar, consulte o guia sobre como tipos.
O exemplo abaixo mostra uma chamada completa para
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()); } });
A API retorna uma
FindAutocompletePredictionsResponse
em um
Task
. O FindAutocompletePredictionsResponse
contém uma lista de
AutocompletePrediction
objetos que representam lugares previstos. A lista pode estar vazia, se não houver
local conhecido correspondente à consulta e aos critérios de filtro.
Para cada local previsto, você pode chamar os seguintes métodos para recuperar o local detalhes:
getFullText(CharacterStyle)
retorna o texto completo da descrição de um lugar. Essa é uma combinação das como texto primário e secundário. Exemplo: "Torre Eiffel, Avenue Anatole France, Paris, França". Além disso, este método permite destacar as seções do descrições que correspondem à pesquisa com um estilo de sua escolha, usandoCharacterStyle
O parâmetroCharacterStyle
é opcional. Defina-o como nulo se você não precisam de destaque.getPrimaryText(CharacterStyle)
retorna o texto principal que descreve um lugar. Geralmente é o nome do lugar Exemplos: "Torre Eiffel" e "123 Pitt Street".getSecondaryText(CharacterStyle)
retorna o texto complementar de uma descrição de lugar. Isso é útil, para exemplo, como uma segunda linha ao mostrar previsões de preenchimento automático. Exemplos: Avenue Anatole France, Paris, França e Sydney, Nova Gales do Sul.getPlaceId()
retorna o ID do local previsto. Um ID de lugar é uma string identificador que identifica exclusivamente um local, que pode ser usado para recuperá-lo asPlace
novamente mais tarde. Para mais informações sobre IDs de lugar na SDK do Places para Android, consulte a documentação do Detalhes. Para informações gerais informações sobre IDs de local, consulte a documentação ID de local geral do Google.getPlaceTypes()
retorna a lista de tipos de lugar associados a esse lugar.getDistanceMeters()
retorna a distância em linha reta em metros entre esse lugar e o origem especificada na solicitação.
Tokens de sessão
Os tokens de sessão agrupam as fases de consulta e seleção do preenchimento automático de um usuário pesquisa em uma sessão discreta para fins de cobrança. A sessão começa quando o usuário começa a digitar uma consulta e conclui quando seleciona um local. Cada sessão pode ter várias consultas, seguidas por uma seleção de local. Assim que uma sessão tiver for concluído, o token não será mais válido. o app precisa gerar um novo token para cada sessão. Recomendamos o uso de tokens de sessão para todas as transações sessões de preenchimento automático (quando você incorpora um fragmento ou inicia o preenchimento automático usando uma intent, a API cuida disso automaticamente).
O SDK do Places para Android usa uma
AutocompleteSessionToken
para identificar cada sessão. Seu aplicativo deve passar um novo token de sessão após
iniciar cada nova sessão e, em seguida, passar o mesmo token, junto com um ID de lugar, para
a próxima chamada para
fetchPlace()
para recuperar detalhes do lugar que foi selecionado pelo usuário.
Saiba mais sobre a sessão tokens.
Restringir resultados do preenchimento automático
é possível restringir os resultados do preenchimento automático a uma região geográfica específica; e/ou
filtrar os resultados para um ou mais tipos de lugares ou até cinco países. Você
aplicar essas restrições à atividade de preenchimento automático,
AutocompleteSupportFragment
e APIs de preenchimento automático programático.
Para restringir os resultados, faça o seguinte:
- Para preferir resultados dentro da região definida, chame
setLocationBias()
Alguns resultados de fora da região definida ainda podem ser retornados. - Para mostrar apenas resultados dentro da região definida, chame
setLocationRestriction()
(somente os resultados na região definida serão retornados). - Para retornar somente resultados que estejam em conformidade com um tipo de lugar específico, chame
setTypesFilter()
(por exemplo, especificarTypeFilter.ADDRESS
retornará somente com um endereço preciso). - Para retornar somente resultados em até cinco países especificados, chame
setCountries()
: Os países precisam ser transmitidos como um caractere ISO 3166-1 de dois caracteres País compatível com Alfa-2 ou código-fonte.
Direcionamento dos resultados para uma região específica
Para direcionar os resultados do preenchimento automático para uma região geográfica específica, chame
setLocationBias()
, transmitindo uma
RectangularBounds
.
O exemplo de código a seguir mostra como chamar setLocationBias()
em um fragmento
para direcionar as sugestões de preenchimento automático para uma região de Sydney, Austrália.
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)));
Restringir os resultados a uma região específica
Para restringir os resultados do preenchimento automático a uma região geográfica específica, chame
setLocationRestriction()
, transmitindo uma
RectangularBounds
.
O exemplo de código a seguir mostra como chamar setLocationRestriction()
em uma
de fragmento para direcionar as sugestões de preenchimento automático a uma região de Sydney,
Austrália.
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)));
Observação:essa restrição só é aplicada a rotas inteiras e resultados sintéticos fora dos limites retangulares podem ser retornados com base em um trajeto que se sobrepõe à restrição de local.
Filtrar resultados por tipo de lugar ou coleção de tipos
Você pode restringir os resultados de uma solicitação de preenchimento automático para que retornem apenas uma um determinado tipo de lugar. Especifique um filtro usando os tipos de lugar ou uma coleção de tipos listadas nas tabelas 1, 2 e 3 em Tipos de locais. Se nada for especificado, todos os tipos são retornados.
Para filtrar os resultados do preenchimento automático, chame
setTypesFilter()
para definir o filtro.
Para especificar um tipo ou um filtro de coleções:
Chame
setTypesFilter()
e especifique até cinco valores de type da Tabela 1 e a Tabela 2 em Tipos de lugares. Os valores de tipo são são definidas pelas constantes PlaceTypes.Chame
setTypesFilter()
e especifique uma coleção de tipos na Tabela 3 mostrada em Tipos de locais. Os valores das coleções são definidos pelo constantes em PlaceTypes.Somente um tipo da Tabela 3 é permitido na solicitação. Se você especificar da Tabela 3, não é possível especificar um valor na Tabela 1 ou na Tabela 2. Se você fizer isso, vai ocorrer um erro.
O exemplo de código a seguir chama setTypesFilter()
em uma
AutocompleteSupportFragment
e especifica diversos valores de tipo.
Kotlin
autocompleteFragment.setTypesFilter(listOf("landmark", "restaurant", "store"))
Java
autocompleteFragment.setTypesFilter(Arrays.asList("landmark", "restaurant", "store"));
O exemplo de código a seguir mostra como chamar setTypesFilter()
em uma
AutocompleteSupportFragment
para definir um filtro que retorna somente resultados com um
endereço preciso especificando uma coleção de tipos.
Kotlin
autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))
Java
autocompleteFragment.setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS, PlaceTypes.ESTABLISHMENT));
O exemplo de código a seguir mostra como chamar setTypesFilter()
em uma
IntentBuilder
para definir um filtro que retorna somente resultados com um endereço preciso ao
especificando uma coleção 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 resultados por país
Para filtrar os resultados do preenchimento automático para até cinco países, chame
setCountries()
para definir o código do país.
Em seguida, passe o filtro a um fragmento ou intent. Os países devem ser passados como um
de dois caracteres, compatível com ISO 3166-1 Alpha-2 país
ou código-fonte.
O exemplo de código a seguir mostra como chamar setCountries()
em uma
AutocompleteSupportFragment
, para definir um filtro que retorna somente resultados no
países especificados.
Kotlin
autocompleteFragment.setCountries("AU", "NZ")
Java
autocompleteFragment.setCountries("AU", "NZ");
Limites de uso
Seu uso da API Places, incluindo o SDK do Places para Android, é não está mais limitado a um número máximo de solicitações por dia (QPD, na sigla em inglês). No entanto, os seguintes limites de uso ainda se aplicam:
- O limite de taxa é de 6.000 QPM (solicitações por minuto). É calculada como a soma das solicitações do lado do cliente e do servidor para todas aplicativos usando as credenciais do mesmo projeto.
Exibir atribuições no seu aplicativo
- Se o app usa o serviço de preenchimento automático de forma programática, a interface precisa exibe a mensagem "Tecnologia do Google" atribuição, ou aparecem em um Mapa com a marca Google.
- Se o app usa o widget de preenchimento automático, nenhuma outra ação é necessária (a atribuição necessária é exibida por padrão).
- Se você recuperar e exibir informações adicionais do lugar depois de obter um lugar por ID, você também exibir atribuições de terceiros.
Para mais detalhes, consulte a documentação atribuições.
Otimização do Place Autocomplete
Esta seção descreve as práticas recomendadas para você aproveitar ao máximo o serviço Place Autocomplete.
Aqui estão algumas diretrizes gerais:
- A maneira mais rápida de desenvolver uma interface do usuário funcional é usar o widget do Autocomplete da API Maps JavaScript, o widget do Autocomplete do SDK do Places para Android ou Controle de IU do Autocomplete do SDK do Places para iOS.
- Entender os campos de dados essenciais do Place Autocomplete desde o início.
- Os campos de direcionamento de local e restrição de local são opcionais, mas podem afetar bastante a performance do preenchimento automático.
- Use o tratamento de erros para garantir que o aplicativo faça uma degradação simples se a API retornar um erro.
- Verifique se o app continua funcionando quando não há seleção e que oferece às pessoas uma maneira de continuar.
Práticas recomendadas de otimização de custos
Otimização básica de custos
Para otimizar o custo do uso do serviço Place Autocomplete, use máscaras de campo nos widgets Place Details e Place Autocomplete para retornar apenas os campos de dados de lugar necessários.
Otimização avançada de custos
Faça a implementação programática do Place Autocomplete para acessar preços por solicitação e pedir resultados da API Geocoding sobre o lugar selecionado em vez do Place Details. O preço por solicitação combinado com a API Geocoding vai ser mais econômico que o preço por sessão se as duas condições a seguir forem atendidas:
- Se você só precisa da latitude/longitude ou do endereço do local selecionado pela pessoa, a API Geocoding fornece essas informações por menos do que uma chamada do Place Details.
- Se os usuários selecionarem uma previsão de preenchimento automático em média com quatro solicitações desse tipo, o preço por solicitação poderá ser mais econômico que o custo por sessão.
Seu aplicativo requer outras informações além do endereço e da latitude/longitude da previsão selecionada?
Sim, mais detalhes são necessários
Use o Place Autocomplete com base em sessões com o Place Details.
Como seu app exige detalhes do lugar, como nome, status comercial ou horário de funcionamento, a implementação do preenchimento automático precisa usar um token de sessão (de forma programática ou integrada aos widgets do JavaScript, Android ou iOS) a um total de US$ 0,017 por sessão, além de SKU de dados do Places relevantes, dependendo dos campos de dados de lugares que você solicita.1
Implementação do widget
O gerenciamento de sessões é integrado automaticamente aos widgets do JavaScript, Android ou iOS. Isso inclui as solicitações do Place Autocomplete e do Place Details na previsão selecionada. Especifique o parâmetro fields
para garantir que você está pedindo apenas os campos de dados de lugares necessários.
Implementação programática
Use um token de sessão com suas solicitações do Place Autocomplete. Ao solicitar Place Details sobre a previsão selecionada, inclua os seguintes parâmetros:
- O ID de lugar da resposta do Place Autocomplete
- O token de sessão usado na solicitação do Place Autocomplete
- O parâmetro
fields
especificando os campos de dados de lugar necessários.
Não, apenas o endereço e o local são necessários
A API Geocoding pode ser uma opção mais econômica que o Place Details para seu aplicativo, dependendo da performance do Place Autocomplete. A eficiência do preenchimento automático de cada aplicativo varia de acordo com o que as pessoas inserem, onde o aplicativo está sendo usado e se as práticas recomendadas de otimização de performance foram seguidas.
Para responder à pergunta a seguir, analise quantos caracteres a pessoa digita em média antes de selecionar uma previsão do Place Autocomplete no seu aplicativo.
As pessoas selecionam, em média, uma previsão do Place Autocomplete em até quatro solicitações?
Sim
Implementar o Place Autocomplete de forma programática sem tokens de sessão e chamar a API Geocoding na previsão de lugar selecionada.
A API Geocoding oferece endereços e coordenadas de latitude/longitude por US$ 0,005 a cada solicitação. Fazer quatro solicitações de Place Autocomplete: por solicitação custa US$ 0,01132. Portanto, o custo total de quatro solicitações, além de uma chamada da API Geocoding sobre a previsão de lugar selecionada, é de US$ 0,01632, menor que o preço de preenchimento automático por sessão de US$ 0,017.1
Convém usar as práticas recomendadas de performance para ajudar as pessoas a conseguir a previsão que querem usando ainda menos caracteres.
Não
Use o Place Autocomplete com base em sessões com o Place Details.
Como a média de solicitações que você espera fazer antes de alguém selecionar uma previsão do Place Autocomplete é maior que o custo do preço por sessão, a implementação do Place Autocomplete precisa usar um token de sessão para as solicitações do Place Autocomplete e a respectiva solicitação do Place Details por um total de US$ 0,017 a cada sessão.1
Implementação do widget
O gerenciamento de sessões é integrado automaticamente aos widgets do JavaScript, Android ou iOS. Isso inclui as solicitações do Place Autocomplete e do Place Details na previsão selecionada. Especifique o parâmetro fields
para garantir a solicitação apenas dos campos de dados básicos.
Implementação programática
Use um token de sessão com suas solicitações do Place Autocomplete. Ao solicitar Place Details sobre a previsão selecionada, inclua os seguintes parâmetros:
- O ID de lugar da resposta do Place Autocomplete
- O token de sessão usado na solicitação do Place Autocomplete
- O parâmetro
fields
que especifica campos de dados básicos como endereço e geometria
Considere atrasar as solicitações do Place Autocomplete
É possível adiar uma solicitação do Place Autocomplete até que a pessoa digite os três ou quatro primeiros caracteres, fazendo com que o aplicativo gere menos solicitações. Por exemplo, fazer solicitações do Place Autocomplete para cada caractere depois que o usuário digita o terceiro caractere significa que, se ele digitar 7 caracteres e selecionar uma previsão em que você fez uma solicitação da API Geocoding, o custo total vai ser de US$ 0,01632 (4 × US$ 0,00283 do Autocomplete por solicitação + US$ 0,005 do Geocoding).1
Se for possível usar o atraso de solicitações para deixar sua solicitação programática média abaixo de quatro, siga as orientações para ter uma performance eficiente no Place Autocomplete com a API Geocoding. Atrasar solicitações pode ser percebido como latência pelo usuário, que talvez queira ver previsões a cada vez que pressionar uma nova tecla.
Convém usar as práticas recomendadas de performance para ajudar as pessoas a conseguir a previsão que querem usando ainda menos caracteres.
-
Os custos listados aqui estão em USD. Consulte a página Faturamento da Plataforma Google Maps para saber tudo sobre os preços.
Práticas recomendadas de performance
As diretrizes a seguir descrevem como otimizar a performance do Place Autocomplete:
- Adicione restrições de país, direcionamento de local e preferência de idioma (para implementações programáticas) à implementação do Place Autocomplete. A preferência de idioma não é necessária com widgets porque eles usam o que está definido no navegador ou no dispositivo móvel do usuário.
- Se o Place Autocomplete estiver acompanhado por um mapa, é possível direcionar o local por janela de visualização do mapa.
- Quando a pessoa não escolhe uma das previsões do Autocomplete, geralmente porque nenhuma delas revisões é o endereço que ela quer, você pode reutilizar a entrada original para tentar receber resultados mais relevantes:
- Se quiser que o usuário insira apenas informações de endereço, reutilize a entrada original dele em uma chamada para a API Geocoding.
- Se quiser que o usuário insira consultas para um lugar específico por nome ou endereço, use uma solicitação do Find Place. Se os resultados forem esperados apenas em uma região específica, use o direcionamento de local.
- Usuários que inserem endereços de sublocal em países onde a compatibilidade do Place Autocomplete com esse tipo de endereço é parcial (como República Tcheca, Estônia e Lituânia). Por exemplo, o endereço tcheco "Stroupežnického 3191/17, Praha" gera uma previsão parcial no Place Autocomplete.
- Usuários que digitam endereços com prefixos de trechos de via, como "23-30 29th St, Queens", na cidade de Nova York, ou "47-380 Kamehameha Hwy, Kaneohe", na ilha de Kauai, no Havaí.
Solução de problemas
Embora uma grande variedade de erros possa ocorrer, a maioria provavelmente são causados por erros de configuração (por exemplo, a chave de API errada foi usada ou a chave de API foi configurada incorretamente) ou a cota (seu aplicativo excedeu a cota). Consulte Uso Limites para mais informações sobre cotas.
Os erros que ocorrem no uso dos controles de preenchimento automático são retornados no
onActivityResult()
. Chame Autocomplete.getStatus()
para saber o status
para o resultado.