Autouzupełnianie miejsc

Usługa autouzupełniania w pakiecie Places SDK dla Androida powraca w odpowiedzi na zapytania użytkowników. Podczas pisania przez użytkownika parametr autouzupełnianie zwraca propozycje miejsc takich jak firmy, adresy, kody plus oraz do ciekawych miejsc.

Autouzupełnianie możesz dodać do aplikacji na te sposoby:

Dodawanie widżetu autouzupełniania

Widżet autouzupełniania to okno wyszukiwania z wbudowanym autouzupełnianiem funkcji. Gdy użytkownik wpisuje wyszukiwane słowa, widżet wyświetla listę przewidywane miejsca do wyboru. Gdy użytkownik dokona wyboru, Place może zostać użyta przez aplikację, aby uzyskać szczegółowe informacje wybrane miejsce.

Widżet autouzupełniania możesz dodać do aplikacji na 2 sposoby:

Opcja 1. Umieść fragment AutocompleteSupportFragment

Aby dodać AutocompleteSupportFragment do aplikacji, wykonaj te czynności:

  1. Dodaj fragment do układu XML aktywności.
  2. Dodaj detektor do aktywności lub fragmentu.

Dodawanie fragmentu AutocompleteSupportFragment do aktywności

Aby dodać fragment „AutocompleteSupportFragment” do aktywności, dodaj nowy fragment do Układ XML. Na przykład:

<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"
  />
  • Domyślnie fragment nie ma obramowania ani tła. Aby podać spójny wygląd, umieść fragment w innym układzie taki jak CardView.
  • Jeśli używasz fragmentu z autouzupełnianiem i chcesz go zastąpić onActivityResult, musisz wywołać funkcję super.onActivityResult. W przeciwnym razie fragment kodu nie będzie działać prawidłowo.

Dodawanie detektora PlaceSelectionListener do aktywności

PlaceSelectionListener obsługuje zwrócenie miejsca w odpowiedzi na zapytanie użytkownika wyboru. Poniższy kod pokazuje tworzenie odwołania do fragmentu i dodawanie detektora do 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);
        }
    });

      

Opcja 2. Użycie intencji do uruchomienia działania autouzupełniania

Jeśli chcesz, aby aplikacja używała innego sposobu nawigacji (np. uruchamiać autouzupełnianie z poziomu ikony, a nie pola wyszukiwania); aplikacja może uruchomić autouzupełnianie za pomocą intencji.

Aby uruchomić widżet autouzupełniania za pomocą intencji, wykonaj te czynności:

  1. Użyj formatu Autocomplete.IntentBuilder aby utworzyć intencję, przekazując odpowiedni tryb Autocomplete.
  2. Zdefiniuj program uruchamiający wyniki aktywności registerForActivityResult które mogą być wykorzystane do uruchomienia intencji i obsługi wybranego miejsca przez użytkownika z prognozą w wyniku.

Utwórz intencję autouzupełniania

W przykładzie poniżej użyto Autocomplete.IntentBuilder aby utworzyć intencję uruchomienia widżetu autouzupełniania jako intencję:

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

      

Gdy zastosujesz intencję do uruchomienia widżetu autouzupełniania, możesz wybrać jedną z tych opcji w trybie nakładki lub wyświetlania pełnoekranowego. Na poniższych zrzutach ekranu widać każdy z nich trybu wyświetlania:

W trybie nakładki widżet autouzupełniania jest nałożony na interfejs połączeń.
Rysunek 1. Widżet autouzupełniania w trybie NAKŁADKA
W trybie pełnoekranowym widżet autouzupełniania wypełnia cały ekran.
Rys. 2: Widżet autouzupełniania w trybie pełnoekranowym

Rejestrowanie wywołania zwrotnego dla wyniku intencji

Aby otrzymywać powiadomienie, gdy użytkownik wybierze miejsce, zdefiniuj registerForActivityResult() Launcher, który uruchamia aktywność i obsługuje jak w poniższym przykładzie. Jeśli użytkownik wybrał podpowiedź, są dostarczane w intencji zawartej w obiekcie wyniku. Ponieważ intencja został stworzony przez Autocomplete.IntentBuilder, metoda Autocomplete.getPlaceFromIntent() może wyodrębnić z niego obiekt 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");
            }
        });

      

Automatyczne uzyskiwanie prognoz dotyczących miejsc

Możesz utworzyć niestandardowy interfejs wyszukiwania jako alternatywę dla interfejsu udostępnianego przez widżet autouzupełniania. Aby było to możliwe, aplikacja musi otrzymywać prognozy dotyczące miejsc automatycznie. Aplikacja może uzyskać listę przewidywanych nazw miejsc lub z interfejsu API autouzupełniania przez wywołanie PlacesClient.findAutocompletePredictions() zaliczając FindAutocompletePredictionsRequest o następujących parametrach:

  • Wymagane: ciąg znaków query zawierający tekst wpisany przez użytkownika.
  • Zalecane: A AutocompleteSessionToken, grupuje fazy wyszukiwania i wyboru użytkownika w do celów rozliczeniowych. Sesja rozpoczyna się, gdy użytkownik zaczyna pisać i kończy w chwili wybrania miejsca.
  • Zalecany: RectangularBounds który określa granice długości i szerokości geograficznej, aby ograniczyć wyniki do w określonym regionie.
  • Opcjonalnie: co najmniej jeden 2-literowy kraj. kodów (ISO 3166-1) alfa-2), wskazując kraj lub kraje, do których mają zostać wysłane wyniki. ograniczony.
  • Opcjonalnie: A TypeFilter, aby ograniczyć wyniki do określonego typu miejsca. obsługiwane są następujące typy miejsc:

    • TypeFilter.GEOCODE – zwraca tylko wyniki geokodowania, a nie firmy. Należy go użyć do jednoznacznego wskazywania wyników, w przypadku których lokalizacja może być nieokreślona.
    • TypeFilter.ADDRESS – zwraca tylko wyniki autouzupełniania ze znakiem dokładny adres. Użyj tego typu, jeśli wiesz, że użytkownik szuka w pełni określony adres.
    • TypeFilter.ESTABLISHMENT – zwraca tylko miejsca, które: firmy.
    • TypeFilter.REGIONS – zwraca tylko miejsca, które pasują do jednego ze następujące typy:

    • LOCALITY

    • SUBLOCALITY

    • POSTAL_CODE

    • COUNTRY

    • ADMINISTRATIVE_AREA_LEVEL_1

    • ADMINISTRATIVE_AREA_LEVEL_2

    • TypeFilter.CITIES – zwraca tylko wyniki pasujące do wartości LOCALITY lub ADMINISTRATIVE_AREA_LEVEL_3

  • Opcjonalnie: pole LatLng określające lokalizację, z której pochodzi żądanie. Gdy dzwonisz setOrigin() usługa zwraca odległość w metrach (distanceMeters) od podanego origin dla każdej prognozy autouzupełniania w odpowiedzi.

Informacje na temat typów miejsc można znaleźć w przewodniku umieszczanie miejsc .

Poniższy przykład zawiera pełne wywołanie 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());
        }
    });

      

Interfejs API zwraca błąd FindAutocompletePredictionsResponse w Task FindAutocompletePredictionsResponse zawiera listę AutocompletePrediction obiektów reprezentujących przewidywane miejsca. Jeśli na liście nie ma elementów, lista może być pusta znane miejsce odpowiadające zapytaniu i kryteriom filtra.

W przypadku każdego przewidywanego miejsca możesz wywołać następujące metody, aby je pobrać szczegóły:

  • getFullText(CharacterStyle) zwraca pełny tekst opisu miejsca. To połączenie atrybutów tekst główny i dodatkowy. Przykład: „Wieża Eiffla, aleja Anatole'a Francesca, Paryż, Francja”. Ta metoda pozwala dodatkowo wyróżnić sekcje pasującego do wyszukiwania i wybranego stylu. Użyj CharacterStyle Parametr CharacterStyle jest opcjonalny. Jeśli tak nie jest, ustaw ją na wartość null wymaga podświetlenia.
  • getPrimaryText(CharacterStyle) zwraca główny tekst opisujący miejsce. Jest to zwykle nazwa miejsce. Przykłady: „Wieża Eiffla” i „123 Pitt Street”.
  • getSecondaryText(CharacterStyle) zwraca tekst opisu miejsca podmiotu zależnego. Jest to przydatne, gdy: jako przykład w drugiej linii przy wyświetlaniu podpowiedzi autouzupełniania. Przykłady: „A Avenue Anatole France, Paris, France” i „Sydney, Nowa Południowa Walia”.
  • getPlaceId() zwraca identyfikator przewidywanego miejsca. Identyfikator miejsca jest ciągiem tekstowym niepowtarzalny identyfikator miejsca, za pomocą którego można pobrać Place możesz zobaczyć go później. Więcej informacji o identyfikatorach miejsc w SDK Miejsc dla Androida: patrz: Place Szczegóły. Ogólne informacji o identyfikatorach miejsc znajdziesz w artykule na temat identyfikatora miejsca .
  • getPlaceTypes() zwraca listę typów miejsc powiązanych z tym miejscem.
  • getDistanceMeters() zwraca odległość prostą w metrach między tym miejscem a pochodzenie określone w żądaniu.

Tokeny sesji

Tokeny sesji grupują fazy zapytania i wyboru użytkownika autouzupełniania w dyskretnej sesji na potrzeby rozliczeń. Sesja rozpoczyna się, gdy użytkownik zaczyna wpisywać zapytanie, a kończy po wybraniu miejsca. Każda sesja może zawierać wiele zapytań, a po nich wybór jednego miejsca. Gdy sesja ma że token jest już nieważny; aplikacja musi wygenerować nowy token na każdą sesję. Zalecamy korzystanie z tokenów sesji do wszystkich sesji autouzupełniania (gdy umieścisz fragment lub uruchomisz autouzupełnianie przy użyciu niż intencja, interfejs API zajmie się tym automatycznie).

Pakiet SDK Miejsc na Androida używa AutocompleteSessionToken identyfikować poszczególne sesje. Aplikacja powinna przekazywać nowy token sesji każdej nowej sesji, a następnie przekazać ten sam token wraz z identyfikatorem miejsca kolejne wywołanie fetchPlace() w celu pobrania szczegółowych informacji o miejscu, które zostało wybrane przez użytkownika.

Więcej informacji o sesji tokeny.

Ogranicz wyniki autouzupełniania

możesz ograniczyć wyniki autouzupełniania do określonego regionu geograficznego lub filtrować wyniki według jednego lub kilku typów miejsc bądź maksymalnie pięciu krajów. Ty możesz stosować te ograniczenia do autouzupełniania, AutocompleteSupportFragment oraz interfejsy API automatycznego autouzupełniania.

Aby ograniczyć wyniki, wykonaj te czynności:

  • Aby preferować wyniki w określonym regionie, wywołaj setLocationBias() (niektóre wyniki spoza zdefiniowanego regionu mogą nadal zostać zwrócone).
  • Aby wyświetlać tylko wyniki ze wskazanego regionu, wywołaj setLocationRestriction() (zostaną wyświetlone tylko wyniki ze zdefiniowanego regionu zwrócone).
  • Aby zwrócić tylko wyniki pasujące do określonego typu miejsca, wywołaj setTypesFilter() (na przykład określenie TypeFilter.ADDRESS spowoduje zwrócenie pojawia się tylko z dokładnym adresem).
  • Aby zwrócić tylko wyniki z maksymalnie 5 określonych krajów, wywołaj setCountries() Kraje muszą być przekazywane w formacie 2-znakowym, ISO 3166-1 Kraj zgodny z alfa-2 w kodzie.

Uprzedzenia wyników w konkretnym regionie

Aby uprzedzić wyniki autouzupełniania z określonym regionem geograficznym, wywołaj setLocationBias() uzyskuje pozytywny wynik RectangularBounds Poniższy przykładowy kod pokazuje wywoływanie funkcji setLocationBias() we fragmencie przez skierowanie sugestii autouzupełniania do regionu Sydney w Australii.

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

      

Ograniczanie wyników do konkretnego regionu

Aby ograniczyć wyniki autouzupełniania do określonego regionu geograficznego, wywołaj setLocationRestriction() uzyskuje pozytywny wynik RectangularBounds Ten przykładowy kod pokazuje, jak zadzwonić pod numer setLocationRestriction() na fragment z fragmentem, aby ukierunkować swoje sugestie autouzupełniania na region Sydney, Australii.

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

      

Uwaga: to ograniczenie dotyczy tylko całych tras, wyników syntetycznych znajdujące się poza prostokątnymi granicami mogą być zwracane na podstawie trasy, która nakłada się z ograniczeniem dotyczącym lokalizacji.

Filtrowanie wyników według typu miejsca lub typu kolekcji

Możesz ograniczyć wyniki żądania autouzupełniania, tak aby zwracały tylko określonego typu miejsca. Określ filtr, korzystając z typów miejsc lub kolekcji typów wymienionych w tabelach 1, 2 i 3 w sekcji Typy miejsc. Jeśli nic nie jest , zwracane są wszystkie typy.

Aby filtrować wyniki autouzupełniania, wywołaj połączenie setTypesFilter() aby ustawić filtr.

Aby określić filtr kolekcji typu lub typu:

  • Wywołaj setTypesFilter() i podaj maksymalnie 5 wartości type z tabeli 1 i tabeli 2 przedstawionej w sekcji Typy miejsc. Wartości typu to: zdefiniowane przez stałe w PlaceTypes.

  • Wywołaj funkcję setTypesFilter() i określ zbiór typu z wyświetlonej tabeli 3 w sekcji Typy miejsc. Wartości zbioru są definiowane przez dyrektywę stałe w PlaceTypes.

    W żądaniu dozwolony jest tylko jeden typ z tabeli 3. Jeśli podasz wartości z tabeli 3, nie można podać wartości z tabeli 1 ani 2. Jeśli to błąd.

Ten przykładowy kod wywołuje setTypesFilter() w AutocompleteSupportFragment i określa wiele wartości typów.

Kotlin



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

      

Java


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

      

Ten przykładowy kod pokazuje, jak dzwonić pod numer setTypesFilter() na AutocompleteSupportFragment, aby ustawić filtr, który zwraca tylko wyniki z dokładny adres, określając kolekcję typów.

Kotlin



    autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))

      

Java


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

      

Ten przykładowy kod pokazuje, jak dzwonić pod numer setTypesFilter() na IntentBuilder, aby ustawić filtr, który zwraca tylko wyniki z dokładnym adresem, określając kolekcję typów.

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

      

Filtruj wyniki według kraju

Aby filtrować wyniki autouzupełniania do maksymalnie 5 krajów, wywołaj setCountries() aby ustawić kod kraju. Następnie przekaż filtr do fragmentu lub intencji. Kraje muszą być przekazywane jako dwuznakowy, zgodny z normą ISO 3166-1 alfa-2 kraj w kodzie.

Ten przykładowy kod pokazuje, jak dzwonić pod numer setCountries() na AutocompleteSupportFragment, aby ustawić filtr, który zwraca tylko wyniki z w określonych krajach.

Kotlin



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

      

Java


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

      

Limity wykorzystania

Korzystanie z interfejsu Places API, w tym pakietu SDK Places na Androida, nie jest już ograniczona do maksymalnej liczby żądań dziennie (QPD). Jednak nadal obowiązują następujące limity wykorzystania:

  • Limit żądań na minutę to 6000 QPM (żądań na minutę). Jest oblicza się jako sumę żądań po stronie klienta i po stronie serwera dla wszystkich przez aplikacje korzystające z danych logowania z tego samego projektu.

Wyświetl atrybucję w swojej aplikacji

  • Jeśli aplikacja korzysta z usługi autouzupełniania automatycznie, interfejs użytkownika musi albo wyświetlić informację „Technologia Google” lub wyświetlać się w mapa marki Google.
  • Jeśli Twoja aplikacja korzysta z widżetu autouzupełniania, nie musisz nic robić. (domyślnie wyświetlana jest wymagana atrybucja).
  • Jeśli pobierzesz i wyświetlisz dodatkowe informacje o miejscu po otrzymaniu miejsce według ID, Ty musi też zawierać informacje o autorze utworu.

Więcej informacji znajdziesz w dokumentacji na temat atrybucje.

Optymalizacja miejsca autouzupełniania

W tej sekcji znajdziesz sprawdzone metody, które pomogą Ci w pełni wykorzystać Usługa autouzupełniania miejsca.

Oto kilka ogólnych wskazówek:

  • Najszybszym sposobem na stworzenie działającego interfejsu użytkownika jest wykorzystanie Maps JavaScript API – widżet autouzupełniania, Widżet autouzupełniania Miejsc Google na Androida, lub pakietu SDK Miejsc dla systemu iOS elementów sterujących w interfejsie autouzupełniania
  • Omówienie najważniejszych zasad autouzupełniania miejsc pola danych.
  • Pola promowania lokalizacji i ograniczenia lokalizacji są opcjonalne, ale mogą mają istotny wpływ na działanie autouzupełniania.
  • Zapewnianie płynnego pogorszenia stanu aplikacji dzięki obsłudze błędów jeśli interfejs API zwróci błąd.
  • Upewnij się, że aplikacja działa, gdy nie ma możliwości wyboru, i daje użytkownikom możliwość wyboru aby kontynuować.

Sprawdzone metody optymalizacji kosztów

Podstawowa optymalizacja kosztów

Optymalizacja kosztów korzystania z autouzupełniania miejsc należy używać masek pól w widżetach Szczegóły miejsca i autouzupełniania, aby zwracać tylko rozmieść pola danych, których potrzebujesz.

Zaawansowana optymalizacja kosztów

Rozważ zautomatyzowaną implementację autouzupełniania miejsc, aby uzyskać dostęp do cen na żądanie i wysyłać żądania wyników interfejsu Geocoding API dotyczących wybranego miejsca zamiast szczegółów miejsca. Model cenowy za żądanie w połączeniu z interfejsem Geocoding API jest bardziej opłacalny niż model cenowy za sesję (na podstawie sesji), jeśli spełnione są oba te warunki:

  • Jeśli potrzebujesz tylko szerokości i długości geograficznej lub adresu wybranego przez użytkownika miejsca, interfejs Geocoding API dostarcza te informacje dla mniej niż wywołania Place Details.
  • Jeśli użytkownicy wybiorą podpowiedź autouzupełniania w zakresie nie więcej niż 4 żądań podpowiedzi autouzupełniania, model cenowy za żądanie może być bardziej opłacalny niż model płatności za sesję.
Aby uzyskać pomoc dotyczącą odpowiedniego wdrożenia autouzupełniania miejsc, wybierz kartę odpowiadającą Twojej odpowiedzi na poniższe pytanie.

Czy aplikacja wymaga innych informacji poza adresem i szerokością geograficzną wybranej prognozy?

Tak, potrzebujemy więcej informacji

Korzystaj z autouzupełniania miejsc opartego na sesji, korzystając z szczegółów miejsca.
Twoja aplikacja wymaga informacji o miejscach, takich jak nazwa miejsca, status firmy czy godziny otwarcia, dlatego implementacja autouzupełniania miejsc powinna korzystać z tokenu sesji (programowego lub wbudowanego w widżety JavaScript, Android lub iOS.Ich łączny koszt wynosi 0,017 USD za sesję i dodatkowe kody SKU danych miejsc w zależności od tego, o jakie pola danych miejsc prosisz}.

Implementacja widżetu
Zarządzanie sesjami jest automatycznie wbudowane w widżety JavaScript oraz Android i iOS. Obejmuje to zarówno żądania autouzupełniania miejsc, jak i żądania szczegółów miejsca dotyczące wybranej prognozy. Określ parametr fields, aby mieć pewność, że żądania są wysyłane tylko umieścić w odpowiednim miejscu pola danych.

Implementacja automatyczna
W żądaniach autouzupełniania miejsc używaj tokena sesji. W żądaniu Szczegóły miejsca dotyczące wybranej prognozy podaj te parametry:

  1. identyfikator miejsca z odpowiedzi na autouzupełnianie miejsca,
  2. Token sesji używany w żądaniu autouzupełniania miejsca.
  3. Parametr fields określający rozmieść pola danych, których potrzebujesz,

Nie, wymaga tylko adresu i lokalizacji

Interfejs Geocoding API może być tańszą opcją niż informacje o miejscu, w zależności od tego, jak dobrze korzystasz z autouzupełniania. Skuteczność autouzupełniania każdej aplikacji różni się w zależności od tego, co wpisują użytkownicy, gdzie aplikacja jest używana i czy wdrożone zostały sprawdzone metody dotyczące optymalizacji wydajności.

Aby odpowiedzieć na poniższe pytanie, przed wybraniem podpowiedzi autouzupełniania miejsca w aplikacji sprawdź, ile znaków średnio wpisuje użytkownik.

Czy użytkownicy wybierają podpowiedzi autouzupełniania miejsca średnio w przypadku 4 żądań lub mniejszej liczby żądań?

Tak

Zaimplementuj autouzupełnianie miejsc automatycznie bez tokenów sesji i wywołuj interfejs Geocoding API dla prognozy wybranego miejsca.
Geocoding API dostarcza adresy oraz współrzędne szerokości i długości geograficznej za 0,005 USD na żądanie. Utworzenie 4 żądań typu Place Autocomplete – Per Request (Autouzupełnianie – według żądania) kosztuje 0,01132 USD, więc łączny koszt 4 żądań plus wywołania Geocoding API dla wybranej prognozy miejsca wynosi 0,01632 USD, czyli mniej niż cena autouzupełniania na sesję, która wynosi 0,017 USD za sesję1.

Zastanów się nad skorzystaniem ze sprawdzonych metod dotyczących skuteczności, aby pomóc użytkownikom uzyskać podpowiedzi, których szukają, przy użyciu jeszcze mniejszej liczby znaków.

Nie

Korzystaj z autouzupełniania miejsc opartego na sesji, korzystając z szczegółów miejsca.
Średnia liczba spodziewanych żądań, które zostaną wysłane przed wybraniem podpowiedzi autouzupełniania miejsca, przekracza koszt ceny za sesję. Dlatego Twoja implementacja autouzupełniania miejsc powinna korzystać z tokenu sesji zarówno dla żądań autouzupełniania miejsc, jak i powiązanych z nimi żądań informacji o miejscach. Ich łączny koszt to 0,017 USD za sesję1.

Implementacja widżetu
Zarządzanie sesjami jest automatycznie wbudowane w widżety JavaScript oraz Android i iOS. Obejmuje to zarówno żądania autouzupełniania miejsc, jak i żądania szczegółów miejsca dotyczące wybranej prognozy. Pamiętaj, by określić parametr fields, aby mieć pewność, że żądanie dotyczy tylko pól danych podstawowych.

Implementacja automatyczna
W żądaniach autouzupełniania miejsc używaj tokena sesji. W żądaniu Szczegóły miejsca dotyczące wybranej prognozy podaj te parametry:

  1. identyfikator miejsca z odpowiedzi na autouzupełnianie miejsca,
  2. Token sesji używany w żądaniu autouzupełniania miejsca.
  3. Parametr fields określający pola Dane podstawowe, takie jak adres i geometria

Rozważ opóźnienie prośby o autouzupełnianie miejsc
Aby zmniejszyć liczbę żądań, możesz zastosować strategie, takie jak opóźnienie żądania autouzupełniania miejsca do czasu wpisania przez użytkownika pierwszych trzech lub czterech znaków. Na przykład wykonywanie żądań autouzupełniania miejsc dla każdego znaku po wpisaniu trzeciego znaku przez użytkownika oznacza, że jeśli użytkownik wpisze 7 znaków, a potem wybierze prognozę, dla której utworzysz jedno żądanie do interfejsu Geocoding API, łączny koszt wyniesie 0,01632 USD (4 * 0,00283 Autouzupełniaj na żądanie + 0,005 USD za kodowanie geograficzne)1.

Jeśli opóźnienie żądań może spowodować, że średnia liczba żądań automatyzacji spadnie poniżej 4, postępuj zgodnie ze wskazówkami dotyczącymi skutecznej implementacji autouzupełniania miejsc za pomocą interfejsu Geocoding API. Pamiętaj, że opóźnienie żądań może być postrzegane jako opóźnienie przez użytkownika, który może oczekiwać podpowiedzi po każdym naciśnięciu klawisza.

Zastanów się nad skorzystaniem ze sprawdzonych metod dotyczących skuteczności, aby pomóc użytkownikom uzyskać spodziewaną prognozę przy użyciu mniejszej liczby znaków.


  1. Podane tu koszty są podane w dolarach amerykańskich. Pełne ceny znajdziesz na stronie płatności za Google Maps Platform.

Sprawdzone metody zwiększania skuteczności

Poniższe wskazówki opisują sposoby optymalizacji skuteczności autouzupełniania miejsc:

  • Dodaj ograniczenia związane z krajem, promowanie lokalizacji, (w przypadku implementacji automatycznych) ustawienia języka na autouzupełnianie miejsc. implementacji. Nie musisz wybierać języka dzięki widżetom, które wybierają język z przeglądarki użytkownika lub urządzenia mobilnego.
  • Jeśli wraz z mapą jest wyświetlana mapa, możesz dostosować lokalizację według widocznego obszaru mapy.
  • Jeśli użytkownik nie wybierze żadnej z podpowiedzi autouzupełniania, ponieważ żadne z tych podpowiedzi nie są pożądanym adresem wynikowym, możesz ponownie użyć oryginalnego adresu dane wejściowe użytkownika, aby uzyskać trafniejsze wyniki:
    • Jeśli spodziewasz się, że użytkownik wpisze tylko informacje adresowe, użyj tych samych danych wejściowych co użytkownik w wywołaniu Geocoding API.
    • Jeśli spodziewasz się, że użytkownicy będą wpisywać zapytania dotyczące konkretnego miejsca po nazwie lub adresie, skorzystaj z prośby o znajdowanie miejsca. Jeśli oczekiwane wyniki dotyczą tylko konkretnego regionu, użyj funkcji promowanie lokalizacji.
    Inne sytuacje, w których najlepiej użyć interfejsu Geocoding API, to:
    • Użytkownicy podający adresy podrzędne w krajach, w których autouzupełnianie obsługuje adresy obiektów podrzędnych są niekompletne, np. Czechy, Estonia i Litwa. Na przykład parametr Adres czeski „Stroupežnického 3191/17, Praha” daje częściową prognozę w miejscu Autouzupełnianie.
    • użytkownicy, którzy wpisują adresy z prefiksami fragmentu drogi, np. „23–30 29th St, Wrocław”; cale New York City lub „47-380 Kamehameha Hwy, Kaneohe” na wyspie Kauai na Hawajach.

Rozwiązywanie problemów

Błędy mogą występować w aplikacji, jednak większość z nich są zwykle spowodowane błędami konfiguracji (na przykład użyto złego klucza interfejsu API, klucz API został nieprawidłowo skonfigurowany) lub limitu błędów (aplikacja przekroczyła limit). Zobacz wykorzystanie Limity informacje o limitach.

Błędy, które wystąpią w przypadku korzystania z elementów sterujących autouzupełniania, są zwracane w sekcji onActivityResult() oddzwonienie. Zadzwoń pod numer Autocomplete.getStatus(), aby poznać stan .