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:
- Dodaj widżet autouzupełniania, aby zapisać zmiany. czasu na tworzenie rozwiązań i zapewniać użytkownikom jednolite wrażenia.
- Uzyskiwanie prognoz dotyczących miejsc automatycznie, aby utworzyć do własnych potrzeb.
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ść
AutocompleteSupportFragment
. - Opcja 2. Wykorzystaj zamiar uruchomienia działania autouzupełniania.
Opcja 1. Umieść fragment AutocompleteSupportFragment
Aby dodać AutocompleteSupportFragment
do aplikacji, wykonaj te czynności:
- Dodaj fragment do układu XML aktywności.
- 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 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:
- Użyj formatu
Autocomplete.IntentBuilder
aby utworzyć intencję, przekazując odpowiedni trybAutocomplete
. - 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.
Tworzenie intencji 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ń.](https://developers-dot-devsite-v2-prod.appspot.com/static/maps/documentation/places/images/acw_overlay.png?authuser=4&hl=pl)
![W trybie pełnoekranowym widżet autouzupełniania wypełnia cały ekran.](https://developers-dot-devsite-v2-prod.appspot.com/static/maps/documentation/places/images/acw_fullscreen.png?authuser=4&hl=pl)
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ź,
będą 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 momencie wyboru 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 doLOCALITY
lubADMINISTRATIVE_AREA_LEVEL_3
Opcjonalnie: pole
LatLng
określające lokalizację, z której pochodzi żądanie. Gdy dzwoniszsetOrigin()
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 France'a, Paryż, Francja”. Ta metoda pozwala dodatkowo wyróżnić sekcje pasującego do wyszukiwania i wybranego stylu. UżyjCharacterStyle
ParametrCharacterStyle
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ślenieTypeFilter.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 w formacie 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 wymienione 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 atrybutem
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 zadzwonić 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 szybkości 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 źródłach autorstwa osób trzecich.
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ść 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ę.
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 lub godziny otwarcia, dlatego wdrożenie autouzupełniania miejsc powinno korzystać z tokena sesji (automatycznie lub wbudowanego w widżety JavaScript, Androida 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 wyłącznie
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:
- identyfikator miejsca z odpowiedzi na autouzupełnianie miejsca,
- Token sesji używany w żądaniu autouzupełniania miejsca.
- 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ń, zanim użytkownik wybierze prognozę autouzupełniania miejsca, przekracza koszt ceny za sesję, dlatego Twoja implementacja autouzupełniania miejsc powinna korzystać z tokena sesji zarówno dla żądań autouzupełniania miejsc, jak i powiązanych z nimi żądań informacji o miejscach.Całkowity koszt tych żądań wynosi więc 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:
- identyfikator miejsca z odpowiedzi na autouzupełnianie miejsca,
- Token sesji używany w żądaniu autouzupełniania miejsca.
- 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.
-
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.
- 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łędy (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 sprawdzić stan
.