Place Autocomplete

Seleziona la piattaforma: Android iOS JavaScript Servizio web

Il servizio di completamento automatico in Places SDK per Android restituisce il luogo previsioni in risposta alle query di ricerca degli utenti. Mentre l'utente digita, il servizio di completamento automatico restituisce suggerimenti per luoghi quali attività, indirizzi, plus code e punti d'interesse.

Puoi aggiungere il completamento automatico alla tua app nei seguenti modi:

Aggiungi un widget di completamento automatico

Il widget di completamento automatico è una finestra di dialogo di ricerca con completamento automatico integrato funzionalità. Quando un utente inserisce i termini di ricerca, il widget presenta un elenco di luoghi previsti tra cui scegliere. Quando l'utente effettua una selezione, viene visualizzata una Place , che la tua app può utilizzare per ottenere dettagli posto selezionato.

Esistono due opzioni per aggiungere il widget di completamento automatico alla tua app:

Opzione 1: incorpora un elemento AutocompleteSupportFragment

Per aggiungere AutocompleteSupportFragment alla tua app:

  1. Aggiungi un frammento al layout XML della tua attività.
  2. Aggiungi un listener all'attività o al frammento.

Aggiungi AutocompleteSupportFragment a un'attività

Per aggiungere AutocompleteSupportFragment a un'attività, aggiungi un nuovo frammento a un Layout XML. Ad esempio:

<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"
  />
  • Per impostazione predefinita, il frammento non ha bordo o sfondo. Per fornire un un aspetto visivo coerente, nidificare il frammento all'interno di un altro layout come un CardView.
  • Se utilizzi il frammento di completamento automatico e devi eseguire l'override onActivityResult, devi chiamare super.onActivityResult, altrimenti il metodo non funzionerà correttamente.

Aggiungere un PlaceSelectionListener a un'attività

L'elemento PlaceSelectionListener gestisce la restituzione di un luogo in risposta alla richiesta dell'utente selezione. Il codice seguente mostra la creazione di un riferimento al frammento e aggiungi un listener a 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);
        }
    });

      

Opzione 2: utilizza un intent per avviare l'attività di completamento automatico

Se vuoi che la tua app utilizzi un flusso di navigazione diverso (ad esempio, per attivare l'esperienza di completamento automatico da un'icona anziché da un campo di ricerca), la tua app può avviare il completamento automatico utilizzando un intent.

Per avviare il widget di completamento automatico utilizzando un intent:

  1. Utilizza Autocomplete.IntentBuilder per creare un intent, passando la modalità Autocomplete desiderata.
  2. Definisci un'utilità di avvio dei risultati delle attività registerForActivityResult che possono essere utilizzate per avviare l'intento e gestire la posizione selezionata dall'utente la previsione nel risultato.

Crea un intent di completamento automatico

L'esempio riportato di seguito utilizza Autocomplete.IntentBuilder per creare un intent e avviare il widget di completamento automatico come 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);

      

Quando utilizzi un intent per avviare il widget di completamento automatico, puoi scegliere tra in overlay o a schermo intero. I seguenti screenshot mostrano modalità di visualizzazione:

Quando visualizzato in modalità overlay, il widget di completamento automatico appare sovrapposto all&#39;interfaccia utente di chiamata.
Figura 1: widget di completamento automatico in modalità OVERLAY
Quando visualizzato in modalità a schermo intero, il widget di completamento automatico riempie tutto lo schermo.
Figura 2: widget di completamento automatico in modalità A SCHERMO INTERO

Registra un callback per il risultato dell'intent

Per ricevere una notifica quando l'utente ha selezionato un luogo, definisci una Avvio app di registerForActivityResult(), che avvia l'attività e gestisce anche come mostrato nell'esempio seguente. Se l'utente ha selezionato una previsione, verrà pubblicato nell'intent contenuto nell'oggetto risultato. Poiché l'intento è stato creato da Autocomplete.IntentBuilder, il metodo Autocomplete.getPlaceFromIntent() può estrarre l'oggetto Place da lì.

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

      

Ricevere previsioni sui luoghi in modo programmatico

Puoi creare una UI di ricerca personalizzata in alternativa alla UI fornita dalla widget di completamento automatico. A tale scopo, l'app deve ricevere previsioni sui luoghi in modo programmatico. La tua app può ottenere un elenco di nomi di luoghi previsti e/o indirizzi IP dall'API Autocomplete chiamando PlacesClient.findAutocompletePredictions(), passando un FindAutocompletePredictionsRequest con i seguenti parametri:

  • Obbligatorio: una stringa query contenente il testo digitato dall'utente.
  • Consigliato: A AutocompleteSessionToken, che raggruppa le fasi di query e selezione della ricerca di un utente in una ai fini della fatturazione. La sessione inizia quando l'utente inizia a digitare una query e si conclude quando selezionano un luogo.
  • Consigliato: un RectangularBounds che specifica i limiti di latitudine e longitudine per vincolare i risultati a della regione specificata.
  • Facoltativo: una o più lettere del paese codici (ISO 3166-1 Alpha-2), che indica il paese o i paesi a cui devono essere visualizzati i risultati limitato.
  • Facoltativo: TypeFilter, che puoi utilizzare per limitare i risultati al tipo di luogo specificato. La sono supportati i seguenti tipi di luogo:

    • TypeFilter.GEOCODE: restituisce solo risultati di geocodifica, anziché aziendali. Utilizza questa richiesta per distinguere i risultati quando la località potrebbe essere indeterminata.
    • TypeFilter.ADDRESS: restituisce solo i risultati di completamento automatico con un all'indirizzo preciso. Utilizza questo tipo quando sai che l'utente sta cercando un completamente specificato.
    • TypeFilter.ESTABLISHMENT: restituisce solo i luoghi che sono aziendali.
    • TypeFilter.REGIONS: restituisce solo i luoghi che corrispondono a uno degli i seguenti tipi:

    • LOCALITY

    • SUBLOCALITY

    • POSTAL_CODE

    • COUNTRY

    • ADMINISTRATIVE_AREA_LEVEL_1

    • ADMINISTRATIVE_AREA_LEVEL_2

    • TypeFilter.CITIES: restituisce solo i risultati che corrispondono a LOCALITY o ADMINISTRATIVE_AREA_LEVEL_3.

  • (Facoltativo) Un LatLng che specifica la località di origine della richiesta. Quando chiami setOrigin(), il servizio restituisce la distanza in metri (distanceMeters) dal valore specificato per ogni previsione di completamento automatico nella risposta.

Per informazioni sui tipi di luogo, consulta la guida a luogo di classificazione.

L'esempio seguente mostra una chiamata completa a PlacesClient.findAutocompletePredictions()

Kotlin



    // Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest,
    // and once again when the user makes a selection (for example when calling fetchPlace()).
    val token = AutocompleteSessionToken.newInstance()

    // Create a RectangularBounds object.
    val bounds = RectangularBounds.newInstance(
        LatLng(-33.880490, 151.184363),
        LatLng(-33.858754, 151.229596)
    )
    // Use the builder to create a FindAutocompletePredictionsRequest.
    val request =
        FindAutocompletePredictionsRequest.builder()
            // Call either setLocationBias() OR setLocationRestriction().
            .setLocationBias(bounds)
            //.setLocationRestriction(bounds)
            .setOrigin(LatLng(-33.8749937, 151.2041382))
            .setCountries("AU", "NZ")
            .setTypesFilter(listOf(PlaceTypes.ADDRESS))
            .setSessionToken(token)
            .setQuery(query)
            .build()
    placesClient.findAutocompletePredictions(request)
        .addOnSuccessListener { response: FindAutocompletePredictionsResponse ->
            for (prediction in response.autocompletePredictions) {
                Log.i(TAG, prediction.placeId)
                Log.i(TAG, prediction.getPrimaryText(null).toString())
            }
        }.addOnFailureListener { exception: Exception? ->
            if (exception is ApiException) {
                Log.e(TAG, "Place not found: ${exception.statusCode}")
            }
        }

      

Java


    // Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest,
    // and once again when the user makes a selection (for example when calling fetchPlace()).
    AutocompleteSessionToken token = AutocompleteSessionToken.newInstance();

    // Create a RectangularBounds object.
    RectangularBounds bounds = RectangularBounds.newInstance(
            new LatLng(-33.880490, 151.184363),
            new LatLng(-33.858754, 151.229596));
    // Use the builder to create a FindAutocompletePredictionsRequest.
    FindAutocompletePredictionsRequest request = FindAutocompletePredictionsRequest.builder()
            // Call either setLocationBias() OR setLocationRestriction().
            .setLocationBias(bounds)
            //.setLocationRestriction(bounds)
            .setOrigin(new LatLng(-33.8749937, 151.2041382))
            .setCountries("AU", "NZ")
            .setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS))
            .setSessionToken(token)
            .setQuery(query)
            .build();

    placesClient.findAutocompletePredictions(request).addOnSuccessListener((response) -> {
        for (AutocompletePrediction prediction : response.getAutocompletePredictions()) {
            Log.i(TAG, prediction.getPlaceId());
            Log.i(TAG, prediction.getPrimaryText(null).toString());
        }
    }).addOnFailureListener((exception) -> {
        if (exception instanceof ApiException) {
            ApiException apiException = (ApiException) exception;
            Log.e(TAG, "Place not found: " + apiException.getStatusCode());
        }
    });

      

L'API restituisce un FindAutocompletePredictionsResponse in un Task. La FindAutocompletePredictionsResponse contiene un elenco di AutocompletePrediction oggetti che rappresentano luoghi previsti. L'elenco potrebbe essere vuoto, se non sono presenti posto noto corrispondente alla query e ai criteri del filtro.

Per ogni luogo previsto, puoi chiamare i seguenti metodi per recuperare il luogo dettagli:

  • getFullText(CharacterStyle) restituisce il testo completo della descrizione di un luogo. Si tratta di una combinazione principale e secondario. Esempio: "Torre Eiffel, Avenue Anatole France, Parigi, Francia". Inoltre, questo metodo ti consente di evidenziare le sezioni del descrizione che corrisponda alla ricerca con uno stile di tua scelta, utilizzando CharacterStyle Il parametro CharacterStyle è facoltativo. In caso contrario, impostalo su null. che richiedono un'evidenziazione.
  • getPrimaryText(CharacterStyle) restituisce il testo principale che descrive un luogo. Si tratta solitamente del nome del posto. Esempi: "Torre Eiffel" e "Via Cavour 123".
  • getSecondaryText(CharacterStyle) restituisce il testo della società controllata della descrizione di un luogo. Questo è utile per Ad esempio, come seconda riga quando mostri le previsioni di completamento automatico. Esempi: "Avenue Anatole France, Paris, France" e "Sydney, Nuovo Galles del Sud".
  • getPlaceId() restituisce l'ID luogo del luogo previsto. L'ID luogo è una stringa che identifica in modo univoco un luogo, che puoi utilizzare per recuperare il Place di nuovo in seguito. Per ulteriori informazioni sugli ID luogo in SDK Places per Android, consulta Place Dettagli. Per informazioni generali informazioni sugli ID luogo, consulta la sezione ID luogo Panoramica.
  • getPlaceTypes() restituisce l'elenco dei tipi di luogo associati al luogo.
  • getDistanceMeters() restituisce la distanza retta in metri tra questo luogo e dell'origine specificata nella richiesta.

Token di sessione

I token di sessione raggruppano le fasi di query e selezione del completamento automatico di un utente eseguire ricerche in una sessione discreta ai fini della fatturazione. La sessione inizia quando inizia a digitare una query e termina quando seleziona un luogo. Ogni sessione può avere più query, seguite dalla selezione di un luogo. Una volta che una sessione ha concluso, il token non è più valido. la tua app deve generare un nuovo token per ogni sessione. Ti consigliamo di utilizzare i token di sessione per tutti i tipi di pubblicità programmatica sessioni di completamento automatico (quando incorpori un frammento o avvii il completamento automatico utilizzando un intent, l'API se ne occupa automaticamente).

Places SDK per Android utilizza un oggetto AutocompleteSessionToken per identificare ogni sessione. L'app deve passare un nuovo token di sessione iniziare ogni nuova sessione e poi trasmettere lo stesso token, insieme a un ID luogo, la successiva chiamata a fetchPlace() per recuperare Place Details per il luogo selezionato dall'utente.

Scopri di più sulla sessione di token.

Limita risultati di completamento automatico

Puoi limitare i risultati del completamento automatico a una regione geografica specifica e/o filtra i risultati per uno o più tipi di luogo o per un massimo di cinque paesi. Tu puoi applicare questi vincoli all'attività di completamento automatico AutocompleteSupportFragment e le API di completamento automatico della pubblicità programmatica.

Per limitare i risultati:

  • Per preferire i risultati all'interno della regione definita, chiama setLocationBias() (alcuni risultati al di fuori della regione definita potrebbero comunque essere restituiti).
  • Per mostrare i risultati solo all'interno della regione definita, chiama setLocationRestriction() (verranno visualizzati solo i risultati all'interno della regione definita ).
  • Per restituire solo risultati conformi a un determinato tipo di luogo, chiama setTypesFilter() (ad esempio, se specifichi TypeFilter.ADDRESS restituirà i risultati risultati solo con un indirizzo preciso).
  • Per restituire solo risultati entro un massimo di cinque paesi specificati, chiama setCountries(). I paesi devono essere trasmessi con un formato ISO 3166-1 a due caratteri Paese compatibile con Alpha-2 Google Cloud.

Risultati bias per una regione specifica

Per differenziare i risultati del completamento automatico in base a una regione geografica specifica, chiama setLocationBias(), ha superato un RectangularBounds L'esempio di codice seguente mostra la chiamata a setLocationBias() su un frammento per polarizzare i suoi suggerimenti di completamento automatico in base a una regione di Sydney, in Australia.

Kotlin



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

      

Java


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

      

Limita i risultati a una regione specifica

Per limitare i risultati del completamento automatico a una regione geografica specifica, chiama setLocationRestriction(), ha superato un RectangularBounds L'esempio di codice seguente mostra la chiamata a setLocationRestriction() su un un'istanza di frammento per polarizzare i suggerimenti di completamento automatico in una regione di Sydney, Australia.

Kotlin



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

      

Java


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

      

Nota: questa limitazione si applica solo a interi percorsi e a risultati sintetici situate all'esterno dei limiti rettangolari possono essere restituiti in base a una route si sovrappone alla limitazione di località.

Filtra i risultati per tipi di luogo o raccolta dei tipi

Puoi limitare i risultati di una richiesta di completamento automatico in modo che restituiscano solo un un certo tipo di luogo. Specifica un filtro utilizzando i tipi di luogo o una raccolta dei tipi elencati nelle tabelle 1, 2 e 3 nella scheda Tipi di luogo. Se non viene indicato nulla specificato, vengono restituiti tutti i tipi.

Per filtrare i risultati del completamento automatico, chiama setTypesFilter() per impostare il filtro.

Per specificare un tipo o un filtro per la raccolta dei tipi:

  • Chiama setTypesFilter() e specifica fino a cinque valori type dalla tabella 1 e la Tabella 2 mostrati in Tipi di luoghi. I valori di tipo sono definita dalle costanti in PlaceTypes.

  • Chiama setTypesFilter() e specifica una raccolta dei tipi dalla tabella 3 mostrata nella sezione Tipi di luogo. I valori della raccolta sono definiti costanti in PlaceTypes.

    Nella richiesta è consentito un solo tipo della tabella 3. Se specifichi dalla Tabella 3, non è possibile specificare un valore dalla Tabella 1 o dalla Tabella 2. Se si verifica un errore.

L'esempio di codice seguente chiama setTypesFilter() su un AutocompleteSupportFragment e specifica più valori di tipo.

Kotlin



    autocompleteFragment.setTypesFilter(listOf("landmark", "restaurant", "store"))

      

Java


    autocompleteFragment.setTypesFilter(Arrays.asList("landmark", "restaurant", "store"));

      

L'esempio di codice seguente mostra la chiamata a setTypesFilter() su un AutocompleteSupportFragment per impostare un filtro che restituisca solo risultati con un un indirizzo preciso specificando una raccolta dei tipi.

Kotlin



    autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))

      

Java


    autocompleteFragment.setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS, PlaceTypes.ESTABLISHMENT));

      

L'esempio di codice seguente mostra la chiamata a setTypesFilter() su un IntentBuilder per impostare un filtro che restituisca solo risultati con un indirizzo preciso in base a per specificare una raccolta dei tipi.

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

      

Filtra i risultati per paese

Per filtrare i risultati del completamento automatico in base a un massimo di cinque paesi, chiama setCountries() per impostare il codice paese. Quindi, passa il filtro a un frammento o un intento. I paesi devono essere trasmessi come paese a due caratteri, compatibile con ISO 3166-1 Alpha-2 Google Cloud.

L'esempio di codice seguente mostra la chiamata a setCountries() su un AutocompleteSupportFragment, per impostare un filtro che restituisca solo risultati all'interno delle nei paesi specificati.

Kotlin



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

      

Java


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

      

Limiti di utilizzo

L'utilizzo dell'API Places, incluso l'SDK Places per Android, è non più limitato a un numero massimo di richieste giornaliere (QPD). Tuttavia, rimangono validi i seguenti limiti di utilizzo:

  • Il limite di frequenza è di 6000 QPM (richieste al minuto). È calcolata come somma delle richieste lato client e lato server per tutte delle applicazioni che usano le credenziali dello stesso progetto.

Attribuzioni display nell'app

  • Se la tua app utilizza il servizio di completamento automatico in modo programmatico, l'interfaccia utente deve mostrano un link "Powered by Google" attribuzione o apparire all'interno di un Mappa con il brand Google.
  • Se la tua app utilizza il widget di completamento automatico, non sono richieste ulteriori azioni (per impostazione predefinita viene visualizzata l'attribuzione richiesta).
  • Se recuperi e visualizzi ulteriori informazioni sul luogo dopo aver ricevuto un posto per ID, devono mostrare anche attribuzioni di terze parti.

Per ulteriori dettagli, consulta la documentazione su attribuzioni.

Ottimizzazione del completamento automatico dei luoghi

Questa sezione descrive le best practice per aiutarti a ottenere il massimo Servizio Place Autocomplete.

Ecco alcune linee guida generali:

  • Il modo più rapido per sviluppare un'interfaccia utente funzionante è utilizzare Widget di completamento automatico dell'API Maps JavaScript, Widget di completamento automatico dell'SDK Places per Android, o Places SDK per iOS Controllo UI con completamento automatico
  • Comprendi gli aspetti essenziali del completamento automatico dei luoghi campi di dati dall'inizio.
  • I campi della differenziazione per località e delle restrizioni di località sono facoltativi ma possono hanno un impatto significativo sulle prestazioni del completamento automatico.
  • Utilizza la gestione degli errori per assicurarti che la tua app si deteriori correttamente se l'API restituisce un errore.
  • Assicurati che la tua app gestisca i casi in cui non è possibile effettuare selezioni e che offra agli utenti un modo per continuare.

Best practice per l'ottimizzazione dei costi

Ottimizzazione dei costi di base

Per ottimizzare il costo dell'utilizzo di Place Autocomplete utilizza le maschere dei campi nei widget Place Details e Place Autocomplete per restituire solo campi di dati del luogo necessari.

Ottimizzazione avanzata dei costi

Prendi in considerazione l'implementazione programmatica di Place Autocomplete per accedere ai prezzi per richiesta e richiedere risultati dell'API Geocoding relativi al luogo selezionato anziché a Place Details. Il prezzo Per richiesta abbinato all'API Geocoding è più conveniente rispetto al prezzo Per sessione (basato su sessione) se vengono soddisfatte entrambe le seguenti condizioni:

  • Se hai bisogno solo della latitudine/longitudine o dell'indirizzo del luogo selezionato dall'utente, l'API Geocoding fornisce queste informazioni a un costo inferiore rispetto a una chiamata Place Details.
  • Se gli utenti selezionano una previsione di completamento automatico entro una media di quattro richieste di previsioni di completamento automatico o meno, il prezzo Per richiesta potrebbe essere più conveniente rispetto al prezzo Per sessione.
Per ricevere assistenza per selezionare l'implementazione di Place Autocomplete in base alle tue esigenze, seleziona la scheda che corrisponde alla tua risposta alla domanda seguente.

La tua richiesta richiede informazioni diverse dall'indirizzo e dalla latitudine/longitudine della previsione selezionata?

Sì, sono necessari ulteriori dettagli

Utilizza Place Autocomplete basato sulla sessione con Place Details.
Poiché la tua applicazione richiede Place Details come il nome del luogo, lo stato dell'attività o l'orario di apertura, per l'implementazione di Place Autocomplete è necessario utilizzare un token di sessione (in modo programmatico o integrato nei widget JavaScript, Android o iOS) per un costo totale di 0,017 $per sessione più SKU di dati di Places in base ai campi di dati dei luoghi richiesti.13}{/14

Implementazione del widget
La gestione delle sessioni è integrata automaticamente nei widget JavaScript, Android o iOS. Questo include sia le richieste Place Autocomplete sia la richiesta Place Details per la previsione selezionata. Assicurati di specificare il parametro fields per avere la certezza di richiedere solo il parametro campi di dati del luogo necessari.

Implementazione programmatica
Utilizza un token di sessione con le richieste Place Autocomplete. Quando richiedi Place Details (Dettagli luogo) per la previsione selezionata, includi i seguenti parametri:

  1. L'ID luogo della risposta di Place Autocomplete.
  2. Il token di sessione utilizzato nella richiesta Place Autocomplete
  3. Il parametro fields che specifica campi di dati del luogo necessari

No, sono necessari solo l'indirizzo e la posizione

L'API Geocoding potrebbe essere un'opzione più conveniente rispetto a Place Details per la tua applicazione, a seconda delle prestazioni dell'utilizzo di Place Autocomplete. L'efficienza del completamento automatico di ogni applicazione varia a seconda di ciò che gli utenti accedono, di dove viene utilizzata l'applicazione e dell'implementazione o meno di best practice per l'ottimizzazione delle prestazioni.

Per rispondere alla seguente domanda, analizza quanti caratteri vengono digitati in media da un utente prima di selezionare una previsione di Place Autocomplete nella tua applicazione.

I tuoi utenti selezionano una previsione di completamento automatico del luogo in media in quattro richieste?

Implementa Place Autocomplete in modo programmatico senza token di sessione e chiama l'API Geocoding sulla previsione del luogo selezionata.
L'API Geocoding invia indirizzi e coordinate di latitudine/longitudine a 0,005 $per richiesta. Effettuare quattro richieste Place Autocomplete - Per Request costa $0,01132, pertanto il costo totale di quattro richieste più una chiamata API Geocoding per la previsione del luogo selezionato sarà di $0,01632, inferiore al prezzo di Per Session Autocomplete di $0,017 per sessione.1

Valuta la possibilità di adottare le best practice sul rendimento per consentire ai tuoi utenti di ottenere la previsione che cercano con ancora meno caratteri.

No

Utilizza Place Autocomplete basato sulla sessione con Place Details.
Poiché il numero medio di richieste che prevedi di effettuare prima che un utente selezioni una previsione Place Autocomplete supera il costo del prezzo Per sessione, l'implementazione di Place Autocomplete deve utilizzare un token di sessione sia per le richieste Place Autocomplete sia per la richiesta Place Details associata per un costo totale di 0,017 $per sessione.1

Implementazione del widget
La gestione delle sessioni è integrata automaticamente nei widget JavaScript, Android o iOS. Questo include sia le richieste Place Autocomplete sia la richiesta Place Details per la previsione selezionata. Assicurati di specificare il parametro fields per avere la certezza di richiedere solo i campi Dati di base.

Implementazione programmatica
Utilizza un token di sessione con le richieste Place Autocomplete. Quando richiedi Place Details (Dettagli luogo) per la previsione selezionata, includi i seguenti parametri:

  1. L'ID luogo della risposta di Place Autocomplete.
  2. Il token di sessione utilizzato nella richiesta Place Autocomplete
  3. Il parametro fields che specifica i campi Dati di base come indirizzo e geometria

Valuta la possibilità di ritardare le richieste di Place Autocomplete
Puoi adottare strategie come il ritardo di una richiesta Place Autocomplete finché l'utente non ha digitato i primi tre o quattro caratteri, in modo che la tua applicazione effettui meno richieste. Ad esempio, effettuare richieste di Place Autocomplete per ogni carattere dopo che l'utente ha digitato il terzo carattere significa che se l'utente digita sette caratteri e poi seleziona una previsione per cui effettui una richiesta API Geocoding, il costo totale sarà di 0,01632 $ (4 * 0,00283 $ di completamento automatico per richiesta + 0,005 $di geocodifica).1

Se le richieste ritardate possono portare la tua richiesta di pubblicità programmatica media al di sotto di quattro, puoi seguire le indicazioni per l'implementazione del completamento automatico di Place Autocomplete con l'API Geocoding. Tieni presente che le richieste ritardate possono essere percepite come latenza dall'utente che potrebbe aspettarsi di vedere le previsioni a ogni nuova sequenza di tasti.

Valuta la possibilità di adottare le best practice sul rendimento per consentire agli utenti di ottenere la previsione che cercano con meno caratteri.


  1. I costi elencati qui sono in dollari statunitensi. Per informazioni complete sui prezzi, consulta la pagina Fatturazione di Google Maps Platform.

Best practice per le prestazioni

Le seguenti linee guida descrivono i modi per ottimizzare le prestazioni di Place Autocomplete:

  • Aggiungi limitazioni in base al paese. differenziazione per località, e (per le implementazioni di pubblicità programmatica) la preferenza della lingua per Place Autocomplete implementazione. La preferenza della lingua non è necessaria con widget perché selezionano le preferenze relative alla lingua dal browser o dal dispositivo mobile dell'utente.
  • Se Place Autocomplete è accompagnato da una mappa, puoi differenziare la posizione in base all'area visibile della mappa.
  • Nei casi in cui un utente non sceglie una delle previsioni di Completamento automatico, in genere poiché nessuna di queste previsioni corrisponde all'indirizzo del risultato desiderato, puoi riutilizzare input utente per tentare di ottenere risultati più pertinenti:
    • Se prevedi che l'utente inserisca solo informazioni relative all'indirizzo, riutilizza l'input dell'utente originale in una chiamata all'API Geocoding.
    • Se prevedi che l'utente inserisca query per un luogo specifico tramite il nome o l'indirizzo, utilizza una richiesta Trova luogo. Se i risultati sono previsti solo in una regione specifica, utilizza differenziazione per località.
    Altri scenari in cui è meglio ricorrere all'API Geocoding includono:
    • Utenti che inseriscono indirizzi di locali secondari nei paesi in cui Place Autocomplete supporta gli indirizzi secondari sono incompleti, ad esempio Cechia, Estonia e Lituania. Ad esempio, Indirizzo in ceco "Stroupežnického 3191/17, Praha" genera una previsione parziale in Place Completamento automatico.
    • Utenti che inseriscono indirizzi con prefissi di segmenti di strada come "23-30 29th St, Queens" nel New York o "47-380 Kamehameha Hwy, Kaneohe" sull'isola di Kauai, alle Hawaii.

Risoluzione dei problemi

Può verificarsi un'ampia varietà di errori, ma nella maggior parte dei casi la tua app che si verificano sono generalmente causati da errori di configurazione (ad esempio, è stata utilizzata la chiave API errata o la chiave API è stata configurata in modo errato) oppure la quota (la tua app ha superato la quota disponibile). Vedi Utilizzo Limiti e altro ancora informazioni sulle quote.

Gli errori che si verificano durante l'utilizzo dei controlli di completamento automatico vengono restituiti nel tag Chiamata di onActivityResult(). Chiama il numero Autocomplete.getStatus() per conoscere lo stato per visualizzare il risultato.