Place Autocomplete

Seleziona la piattaforma: Android iOS JavaScript Servizio web

Il servizio di completamento automatico nell'SDK Places per Android restituisce previsioni dei luoghi in risposta alle query di ricerca degli utenti. Mentre l'utente digita, il servizio di completamento automatico restituisce suggerimenti per luoghi quali attività, indirizzi, più codici 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 funzionalità integrata di completamento automatico. 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 restituita un'istanza Place che la tua app può utilizzare per ottenere dettagli sul luogo selezionato.

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

Opzione 1: incorpora un AutocompleteSupportFragment

Per aggiungere un AutocompleteSupportFragment alla tua app, svolgi i seguenti passaggi:

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

Aggiungere 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 offrire un aspetto visivo coerente, nidifica il frammento all'interno di un altro elemento di layout, ad esempio CardView.
  • Se utilizzi il frammento di completamento automatico e devi eseguire l'override di onActivityResult, devi chiamare super.onActivityResult, altrimenti il frammento non funzionerà correttamente.

Aggiungi un PlaceSelectionListener a un'attività

L'elemento PlaceSelectionListener gestisce la restituzione di un luogo in risposta alla selezione dell'utente. Il seguente codice mostra la creazione di un riferimento al frammento e l'aggiunta di 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, segui questi passaggi:

  1. Utilizza Autocomplete.IntentBuilder per creare un intent, passando la modalità Autocomplete desiderata.
  2. Definisci un'Avvio app dei risultati di attività registerForActivityResult che può essere utilizzato per avviare l'intent e gestire la previsione del luogo selezionata dall'utente nel risultato.

Crea un intent di completamento automatico

L'esempio seguente utilizza Autocomplete.IntentBuilder per creare un intent per 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 usi un intent per avviare il widget di completamento automatico, puoi scegliere tra le modalità di visualizzazione overlay o a schermo intero. I seguenti screenshot mostrano rispettivamente ciascuna modalità di visualizzazione:

Quando è visualizzato in modalità overlay, il widget di completamento automatico appare sovrapposto all&#39;interfaccia utente per le chiamate.
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 un Avvio app registerForActivityResult(), che avvia l'attività e gestisce anche il risultato come mostrato nell'esempio seguente. Se l'utente ha selezionato una previsione, questa verrà consegnata nell'intent contenuto nell'oggetto risultato. Poiché l'intent è stato creato da Autocomplete.IntentBuilder, il metodo Autocomplete.getPlaceFromIntent() può estrarre da questo oggetto Place l'oggetto Place.

Kotlin



private val startAutocomplete =
    registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
        if (result.resultCode == Activity.RESULT_OK) {
            val intent = result.data
            if (intent != null) {
                val place = Autocomplete.getPlaceFromIntent(intent)
                Log.i(
                    TAG, "Place: ${place.name}, ${place.id}"
                )
            }
        } else if (result.resultCode == Activity.RESULT_CANCELED) {
            // The user canceled the operation.
            Log.i(TAG, "User canceled autocomplete")
        }
    }

      

Java


private final ActivityResultLauncher<Intent> startAutocomplete = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            if (result.getResultCode() == Activity.RESULT_OK) {
                Intent intent = result.getData();
                if (intent != null) {
                    Place place = Autocomplete.getPlaceFromIntent(intent);
                    Log.i(TAG, "Place: ${place.getName()}, ${place.getId()}");
                }
            } else if (result.getResultCode() == Activity.RESULT_CANCELED) {
                // The user canceled the operation.
                Log.i(TAG, "User canceled autocomplete");
            }
        });

      

Ottenere le previsioni in modo programmatico

Puoi creare un'interfaccia utente di ricerca personalizzata in alternativa all'interfaccia fornita dal widget di completamento automatico. Per farlo, la tua app deve ricevere le previsioni in modo programmatico. La tua app può ricevere un elenco di nomi e/o indirizzi previsti dei luoghi dall'API di completamento automatico chiamando PlacesClient.findAutocompletePredictions(), passando un oggetto FindAutocompletePredictionsRequest con i seguenti parametri:

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

    • TypeFilter.GEOCODE – Restituisce solo risultati di geocodifica, anziché risultati di attività commerciali. Utilizza questa richiesta per chiarire i risultati in cui la località specificata potrebbe essere indeterminata.
    • TypeFilter.ADDRESS - Restituisce solo i risultati del completamento automatico con un indirizzo preciso. Utilizza questo tipo quando sai che l'utente sta cercando un indirizzo completamente specificato.
    • TypeFilter.ESTABLISHMENT - Restituire solo luoghi che sono attività commerciali.
    • TypeFilter.REGIONS – Restituisce solo luoghi che corrispondono a uno dei 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) dall'origine specificata per ogni previsione di completamento automatico nella risposta.

Per informazioni sui tipi di luogo, consulta la guida ai tipi di luogo.

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. Il FindAutocompletePredictionsResponse contiene un elenco di AutocompletePrediction oggetti che rappresentano i luoghi previsti. L'elenco può essere vuoto, se non esiste una posizione nota corrispondente alla query e ai criteri del filtro.

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

  • getFullText(CharacterStyle) restituisce il testo completo della descrizione di un luogo. Si tratta di una combinazione del testo principale e secondario. Esempio: "Torre Eiffel, Avenue Anatole France, Parigi, Francia". Inoltre, questo metodo ti consente di evidenziare le sezioni della descrizione che corrispondono alla ricerca con uno stile a tua scelta utilizzando CharacterStyle. Il parametro CharacterStyle è facoltativo. Impostalo su null se non hai bisogno di evidenziazione.
  • getPrimaryText(CharacterStyle) restituisce il testo principale che descrive un luogo. Di solito si tratta del nome del luogo. Esempi: "Torre Eiffel" e "123 Pitt Street".
  • getSecondaryText(CharacterStyle) restituisce il testo secondario della descrizione di un luogo. È utile, ad esempio, come seconda riga per mostrare le previsioni di completamento automatico. Esempi: "Anatole France, Parigi, Francia" e "Sydney, Nuovo Galles del Sud".
  • getPlaceId() restituisce l'ID del luogo previsto. Un ID luogo è un identificatore testuale che identifica in modo univoco un luogo, che puoi utilizzare per recuperare di nuovo l'oggetto Place in un secondo momento. Per ulteriori informazioni sugli ID luogo nell'SDK Places per Android, consulta Place Details (Dettagli posizione). Per informazioni generali sugli ID luogo, consulta la panoramica di Place ID.
  • getPlaceTypes() restituisce l'elenco dei tipi di luogo associati a questo luogo.
  • getDistanceMeters() restituisce la distanza in linea retta in metri tra questo luogo e l'origine specificata nella richiesta.

Token di sessione

I token di sessione raggruppano le fasi di query e selezione di una ricerca con completamento automatico da parte di un utente in una sessione discreta ai fini della fatturazione. La sessione inizia quando l'utente inizia a digitare una query e si conclude quando seleziona un luogo. Ogni sessione può includere più query, seguite da una selezione di luogo. Una volta chiusa una sessione, il token non è più valido e l'app deve generare un token nuovo per ogni sessione. Ti consigliamo di utilizzare i token di sessione per tutte le sessioni di completamento automatico della pubblicità programmatica (quando incorpori un frammento o avvii il completamento automatico utilizzando un intent, l'API se ne occupa automaticamente).

L'SDK Places per Android utilizza un elemento AutocompleteSessionToken per identificare ogni sessione. L'app deve passare un nuovo token di sessione all'avvio di ogni nuova sessione, quindi passare lo stesso token, insieme a un ID luogo, nella chiamata successiva a fetchPlace() per recuperare i dettagli del luogo per il luogo selezionato dall'utente.

Scopri di più sui token di sessione.

Vincola risultati di completamento automatico

Puoi limitare i risultati del completamento automatico a una regione geografica specifica e/o filtrare i risultati in base a uno o più tipi di luogo o a un massimo di cinque paesi. Puoi applicare questi vincoli all'attività di completamento automatico, AutocompleteSupportFragment e alle 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 solo i risultati all'interno della regione definita, chiama setLocationRestriction() (verranno restituiti 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 verranno restituiti solo risultati con un indirizzo preciso).
  • Per restituire solo i risultati entro un massimo di cinque paesi specificati, chiama setCountries(). I paesi devono essere trasmessi come codice paese a due caratteri compatibile con lo standard ISO 3166-1 Alpha-2.

Risultati di bias per una regione specifica

Per polarizzare i risultati del completamento automatico in una regione geografica specifica, chiama setLocationBias(), passando un RectangularBounds. Il seguente esempio di codice mostra una chiamata a setLocationBias() su un'istanza di frammento per differenziare i 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(), trasmettendo un RectangularBounds. Il seguente esempio di codice mostra una chiamata a setLocationRestriction() su un'istanza di frammento per differenziare i suggerimenti di completamento automatico in base a una regione di Sydney, in 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 viene applicata solo a intere route, i risultati sintetici che si trovano al di fuori dei limiti rettangolari potrebbero essere restituiti in base a una route che si sovrappone alla limitazione di località.

Filtra i risultati per tipi di luogo o raccolta di tipi

Puoi limitare i risultati di una richiesta di completamento automatico in modo che restituiscano solo un determinato tipo di luogo. Specifica un filtro utilizzando i tipi di luogo o una raccolta di tipi elencati nelle tabelle 1, 2 e 3 in Tipi di luogo. Se non viene specificato nulla, 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 di raccolta del tipo:

  • Richiama setTypesFilter() e specifica fino a cinque valori type della Tabella 1 e della Tabella 2 mostrati in Tipi di luogo. I valori del tipo sono definiti dalle costanti in PlaceTypes.

  • Richiama setTypesFilter() e specifica una raccolta di tipi dalla Tabella 3 mostrata in Tipi di luogo. I valori della raccolta sono definiti dalle costanti in PlaceTypes.

    Per la richiesta è consentito un solo tipo della tabella 3. Se specifichi un valore dalla Tabella 3, non puoi specificare un valore dalla Tabella 1 o 2. In questo caso, si verifica un errore.

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

Kotlin



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

      

Java


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

      

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

Kotlin



    autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))

      

Java


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

      

Il seguente esempio di codice mostra una chiamata a setTypesFilter() su IntentBuilder per impostare un filtro che restituisca solo risultati con un indirizzo preciso specificando una raccolta di 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 intent. I paesi devono essere trasmessi come codice paese a due caratteri compatibile con lo standard ISO 3166-1 Alpha-2.

L'esempio di codice seguente mostra una chiamata a setCountries() su un AutocompleteSupportFragment, per impostare un filtro che restituisce solo i risultati all'interno dei 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 al giorno (QPD). Tuttavia, si applicano comunque i seguenti limiti di utilizzo:

  • La limitazione di frequenza è 6000 QPM (richieste al minuto). Viene calcolato come somma delle richieste lato client e lato server per tutte le applicazioni che utilizzano le credenziali dello stesso progetto.

Attribuzioni display nell'app

  • Se la tua app utilizza il servizio di completamento automatico in modo programmatico, la UI deve mostrare l'attribuzione "Powered by Google" o essere all'interno di una mappa con brand Google.
  • Se la tua app utilizza il widget di completamento automatico, non sono necessarie ulteriori azioni (per impostazione predefinita viene visualizzata l'attribuzione richiesta).
  • Se recuperi e visualizzi informazioni aggiuntive sul luogo dopo aver ottenuto un luogo in base all'ID, devi mostrare anche le attribuzioni di terze parti.

Per ulteriori dettagli, consulta la documentazione sulle attribuzioni.

Posiziona ottimizzazione del completamento automatico

In questa sezione vengono descritte le best practice per aiutarti a ottenere il massimo dal servizio Place Autocomplete.

Ecco alcune linee guida generali:

  • Il modo più rapido per sviluppare un'interfaccia utente funzionante è utilizzare il widget Autocomplete dell'API Maps JavaScript, il widget Autocomplete dell'SDK Places per Android o il controllo dell'interfaccia utente di Autocomplete dell'SDK Places per iOS
  • Sviluppa sin dall'inizio una comprensione dei campi di dati essenziali di Place Autocomplete.
  • I campi per la differenziazione per località e per le limitazioni in base alla località sono facoltativi, ma possono avere un impatto significativo sulle prestazioni del completamento automatico.
  • Utilizza la gestione degli errori per assicurarti che la tua app venga ridotta correttamente se l'API restituisce un errore.
  • Assicurati che la tua app sia in grado di gestire quando non è possibile effettuare selezioni e di offrire agli utenti un modo per continuare.

Best practice per l'ottimizzazione dei costi

Ottimizzazione dei costi di base

Per ottimizzare il costo dell'utilizzo del servizio Place Autocomplete, utilizza le maschere dei campi nei widget Place Details e Place Autocomplete per restituire solo i campi dei 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 i risultati dell'API Geocoding relativi al luogo selezionato anziché a Place Details. I prezzi Per richiesta abbinati all'API Geocoding sono più convenienti rispetto ai prezzi Per sessione (basati su sessione) se vengono soddisfatte entrambe le seguenti condizioni:

  • Se ti servono solo la latitudine/longitudine o l'indirizzo del luogo selezionato dall'utente, l'API Geocoding fornisce queste informazioni per meno di una chiamata Place Details.
  • Se gli utenti selezionano una previsione di completamento automatico in 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 assistenza nella scelta dell'implementazione di Place Autocomplete più adatta alle tue esigenze, seleziona la scheda corrispondente alla tua risposta alla seguente domanda.

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

Sì, sono necessari altri dettagli

Utilizza il completamento automatico 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, l'implementazione di Place Autocomplete deve 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 oltre agli SKU di dati di Places applicabili in base ai campi dei dati dei luoghi richiesti.

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

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

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

No, richiede solo indirizzo e posizione

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

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

I tuoi utenti selezionano una previsione di Place Autocomplete in una media di quattro o meno richieste?

Implementa Place Autocomplete in modo programmatico senza token di sessione e chiama l'API Geocoding nella previsione del luogo selezionata.
L'API Geocoding fornisce indirizzi e coordinate di latitudine/longitudine al costo di 0,005 $per richiesta. Effettuare quattro richieste Place Autocomplete - Per Request costa $0,01132; il costo totale di quattro richieste più una chiamata API Geocoding per la previsione del luogo selezionata sarebbe di $0,01632, che è inferiore al prezzo del completamento automatico per sessione di $0,017 per sessione.1

Valuta la possibilità di adottare le best practice per il rendimento per consentire agli utenti di ottenere le previsioni che cercano utilizzando ancora meno caratteri.

No

Utilizza il completamento automatico basato sulla sessione con Place Details.
Poiché il numero medio di richieste che prevedi di effettuare prima che un utente selezioni una previsione di Place Autocomplete supera il costo dei prezzi 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 dei widget
La gestione delle sessioni è integrata automaticamente nei widget JavaScript, Android o iOS. Sono incluse sia le richieste Place Autocomplete che 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 locale) per la previsione selezionata, includi i seguenti parametri:

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

Valuta l'idea di posticipare le richieste di Place Autocomplete
Puoi adottare strategie come il ritardo di una richiesta di Place Autocomplete finché l'utente non ha digitato i primi tre o quattro caratteri, in modo che l'applicazione effettui meno richieste. Ad esempio, fare richieste Place Autocomplete per ogni carattere dopo che l'utente ha digitato il terzo carattere significa che se l'utente digita sette caratteri seleziona quindi una previsione per la quale effettui una richiesta all'API Geocoding, il costo totale sarà di $0,01632 (4 * $0,00283 Autocomplete Per Request + $0,005 Geocoding).1

Se con il ritardo le richieste di pubblicità programmatica sono inferiori alle quattro, puoi seguire le indicazioni per l'implementazione performante Place Autocomplete with Geocoding. Tieni presente che il ritardo delle richieste può essere percepito come latenza dall'utente, che potrebbe aspettarsi di ottenere previsioni a ogni nuova pressione di un tasto.

Valuta la possibilità di applicare le best practice per il rendimento per consentire agli utenti di ottenere le previsioni 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 il rendimento

Le seguenti linee guida descrivono come ottimizzare le prestazioni del completamento automatico di Place Auto:

  • Aggiungi limitazioni in base al paese, differenziazione per località e (per le implementazioni di pubblicità programmatica) la preferenza della lingua all'implementazione di Place Autocomplete. La preferenza della lingua non è necessaria con i widget perché selezionano le preferenze relative alla lingua dal browser o dal dispositivo mobile dell'utente.
  • Se il completamento automatico di 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 perché nessuna di queste previsioni rappresenta l'indirizzo dei risultati desiderato, puoi riutilizzare l'input utente originale per cercare di ottenere risultati più pertinenti:
    • Se prevedi che l'utente inserisca solo informazioni sull'indirizzo, riutilizza l'input utente originale in una chiamata all'API Geocoding.
    • Se prevedi che l'utente inserisca query per un luogo specifico per nome o indirizzo, utilizza una richiesta Trova luogo. Se i risultati sono previsti solo in una regione specifica, utilizza la differenziazione per località.
    Altri scenari in cui è meglio ricorrere all'API Geocoding includono:
    • Utenti che inseriscono indirizzi secondari in paesi in cui il supporto di Place Autocomplete per gli indirizzi secondari è incompleto, ad esempio Cechia, Estonia e Lituania. Ad esempio, l'indirizzo ceco "Stroupežnického 3191/17, Praha" restituisce una previsione parziale in Place Autocomplete.
    • Gli utenti che inseriscono indirizzi con prefissi dei segmenti di strada come "23-30 29th St, Queens" a New York o "47-380 Kamehameha Hwy, Kaneohe" sull'isola di Kauai alle Hawaii.

Risolvere i problemi

Sebbene possa verificarsi un'ampia gamma di errori, la maggior parte degli errori che probabilmente l'app si verificherà sono causati di solito da errori di configurazione (ad esempio, è stata utilizzata la chiave API errata o la chiave API è stata configurata in modo errato) o errori di quota (la tua app ha superato la quota). Consulta Limiti di utilizzo per ulteriori informazioni sulle quote.

Gli errori che si verificano durante l'utilizzo dei controlli di completamento automatico vengono restituiti nel callback onActivityResult(). Chiama Autocomplete.getStatus() per ricevere il messaggio di stato del risultato.