Сервис автозаполнения в Places SDK для Android возвращает подсказки о местах в ответ на поисковые запросы пользователя. По мере ввода текста сервис автозаполнения выдает предложения по таким местам, как предприятия, адреса, абонементы и достопримечательности.
Добавить функцию автозаполнения в приложение можно следующими способами:
- Добавьте виджет автозаполнения , чтобы сэкономить время на разработке и обеспечить единообразный пользовательский опыт.
- Получайте прогнозы местоположения программным способом для создания персонализированного пользовательского опыта.
Добавить виджет автозаполнения

Виджет автозаполнения — это диалоговое окно поиска со встроенной функцией автозаполнения. Когда пользователь вводит поисковые запросы, виджет отображает список предполагаемых мест на выбор. После выбора пользователем возвращается экземпляр объекта Place , который ваше приложение может использовать для получения подробной информации о выбранном месте.
Существует два варианта добавления виджета автозаполнения в ваше приложение:
- Вариант 1: Встроить
AutocompleteSupportFragment. - Вариант 2: Используйте намерение для запуска действия автозаполнения .
Вариант 1: Встроить AutocompleteSupportFragment
Чтобы добавить AutocompleteSupportFragment в ваше приложение, выполните следующие действия:
- Добавьте фрагмент в XML-макет вашего приложения.
- Добавьте обработчик событий к вашей активности или фрагменту.
Добавьте AutocompleteSupportFragment в активность.
Чтобы добавить AutocompleteSupportFragment в активность, добавьте новый фрагмент в XML-макет. Например:
<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"
/>
- По умолчанию фрагмент не имеет рамки или фона. Для обеспечения единообразного визуального оформления вложите фрагмент в другой элемент макета, например, CardView .
- Если вы используете фрагмент автозаполнения и вам необходимо переопределить
onActivityResult, вы должны вызватьsuper.onActivityResult, иначе фрагмент не будет работать должным образом.
Добавьте PlaceSelectionListener в активность.
PlaceSelectionListener отвечает за возврат места в ответ на выбор пользователя. Следующий код показывает создание ссылки на фрагмент и добавление слушателя к вашему AutocompleteSupportFragment :
Котлин
// 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.DISPLAY_NAME)) // Set up a PlaceSelectionListener to handle the response. autocompleteFragment.setOnPlaceSelectedListener(object : PlaceSelectionListener { override fun onPlaceSelected(place: Place) { binding.autocompleteResult.text = getString( R.string.place_selection, place.displayName, place.id, place.formattedAddress ) Log.i(TAG, "Place: ${place.displayName}, ${place.id}") } override fun onError(status: Status) { binding.autocompleteResult.text = getString(R.string.an_error_occurred, status) 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. assert autocompleteFragment != null; autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS)); // Set up a PlaceSelectionListener to handle the response. autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { @Override public void onPlaceSelected(@NonNull Place place) { binding.autocompleteResult.setText( getString( R.string.place_selection, place.getDisplayName(), place.getId(), place.getFormattedAddress() ) ); Log.i(TAG, "Place: " + place.getDisplayName() + ", " + place.getId()); } @Override public void onError(@NonNull Status status) { binding.autocompleteResult.setText(getString(R.string.an_error_occurred, status)); Log.e(TAG, "An error occurred: " + status); } });
Вариант 2: Используйте намерение для запуска действия автозаполнения.
Если вы хотите, чтобы ваше приложение использовало другой навигационный поток (например, чтобы автозаполнение запускалось по значку, а не по полю поиска), вы можете запустить автозаполнение с помощью Intent.
Чтобы запустить виджет автозаполнения с помощью Intent, выполните следующие действия:
- Используйте
Autocomplete.IntentBuilderдля создания интента, передав желаемый режимAutocomplete. - Определите средство запуска результатов активности
registerForActivityResult, которое можно использовать для запуска намерения и обработки прогноза выбранного пользователем места в результате.
Создайте намерение автозаполнения
В приведенном ниже примере используется Autocomplete.IntentBuilder для создания интента, запускающего виджет автозаполнения в качестве интента:
Котлин
// 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.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS) val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields) .setTypesFilter(listOf(PlaceTypes.ESTABLISHMENT)) .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.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS); // Start the autocomplete intent. Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields) .setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT)) .build(this); startAutocomplete.launch(intent);
При использовании Intent для запуска виджета автозаполнения вы можете выбрать режим отображения: наложение или полноэкранный режим. На следующих скриншотах показаны оба режима отображения:


Зарегистрировать функцию обратного вызова для результата запроса намерения.
Чтобы получать уведомления о выборе пользователем места, определите метод запуска registerForActivityResult() , который запускает активность и обрабатывает результат, как показано в следующем примере. Если пользователь выбрал предсказание, оно будет передано в интенте, содержащемся в объекте результата. Поскольку интент был создан с помощью Autocomplete.IntentBuilder , метод Autocomplete.getPlaceFromIntent() может извлечь из него объект Place.
Котлин
private val startAutocomplete = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> if (result.resultCode == RESULT_OK) { val intent = result.data if (intent != null) { val place = Autocomplete.getPlaceFromIntent(intent) binding.autocompleteResult.text = getString( R.string.place_selection, place.displayName, place.id, place.formattedAddress) Log.i( TAG, "Place: ${place.displayName}, ${place.id}" ) } } else if (result.resultCode == RESULT_CANCELED) { // The user canceled the operation. binding.autocompleteResult.setText(R.string.user_canceled_autocomplete) 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); binding.autocompleteResult.setText( getString( R.string.place_selection, place.getDisplayName(), place.getId(), place.getFormattedAddress() ) ); Log.i(TAG, "Place: " + place.getDisplayName() + ", " + place.getId()); } } else if (result.getResultCode() == Activity.RESULT_CANCELED) { // The user canceled the operation. binding.autocompleteResult.setText(R.string.user_canceled_autocomplete); Log.i(TAG, "User canceled autocomplete"); } });
Получение прогнозов местоположения программным способом
В качестве альтернативы интерфейсу автозаполнения можно создать собственный интерфейс поиска. Для этого ваше приложение должно получать прогнозы мест программным способом. Список прогнозируемых названий мест и/или адресов можно получить из API автозаполнения, вызвав метод PlacesClient.findAutocompletePredictions() и передав объект FindAutocompletePredictionsRequest со следующими параметрами:
- Обязательно: строка
query, содержащая текст, введенный пользователем. - Рекомендуется:
AutocompleteSessionToken, который объединяет этапы запроса и выбора в поисковой выдаче пользователя в отдельную сессию для целей выставления счетов. Сессия начинается, когда пользователь начинает вводить запрос, и заканчивается, когда он выбирает место. - Рекомендуется: объект
RectangularBounds, который задает границы широты и долготы для ограничения результатов указанным регионом . - Необязательно: один или несколько двухбуквенных кодов стран (ISO 3166-1 Alpha-2), указывающих страну или страны, к которым следует ограничить результаты поиска.
Необязательно:
TypeFilter, который можно использовать для ограничения результатов указанным типом места. Поддерживаются следующие типы мест:-
TypeFilter.GEOCODE– Возвращает только результаты геокодирования, а не информацию о компаниях. Используйте этот запрос для уточнения результатов, где указанное местоположение может быть неопределенным. -
TypeFilter.ADDRESS– Возвращает только результаты автозаполнения с точным адресом. Используйте этот тип, если вы знаете, что пользователь ищет полный адрес. -
TypeFilter.ESTABLISHMENT– Возвращает только те места, которые являются предприятиями. TypeFilter.REGIONS– Возвращает только те места, которые соответствуют одному из следующих типов:LOCALITYSUBLOCALITYPOSTAL_CODECOUNTRYADMINISTRATIVE_AREA_LEVEL_1ADMINISTRATIVE_AREA_LEVEL_2TypeFilter.CITIES– Возвращает только результаты, соответствующиеLOCALITYилиADMINISTRATIVE_AREA_LEVEL_3.
-
Необязательно: значение
LatLngуказывающее местоположение отправной точки запроса. При вызове методаsetOrigin()сервис возвращает расстояние в метрах (distanceMeters) от указанной отправной точки для каждого варианта автозаполнения в ответе.
Для получения информации о типах мест см. руководство по типам мест .
В приведенном ниже примере показан полный вызов метода PlacesClient.findAutocompletePredictions() .
Котлин
// 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.ESTABLISHMENT)) .setSessionToken(token) .setQuery(query) .build() placesClient.findAutocompletePredictions(request) .addOnSuccessListener { response: FindAutocompletePredictionsResponse -> val builder = StringBuilder() for (prediction in response.autocompletePredictions) { builder.append(prediction.getPrimaryText(null).toString()).append("\n") Log.i(TAG, prediction.placeId) Log.i(TAG, prediction.getPrimaryText(null).toString()) } binding.autocompleteResult.text = builder.toString() }.addOnFailureListener { exception: Exception? -> if (exception is ApiException) { Log.e(TAG, "Place not found: ${exception.statusCode}") binding.autocompleteResult.text = getString(R.string.place_not_found, exception.message) } }
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(List.of(PlaceTypes.ESTABLISHMENT)) .setSessionToken(token) .setQuery(query) .build(); placesClient.findAutocompletePredictions(request).addOnSuccessListener((response) -> { StringBuilder builder = new StringBuilder(); for (AutocompletePrediction prediction : response.getAutocompletePredictions()) { builder.append(prediction.getPrimaryText(null).toString()).append("\n"); Log.i(TAG, prediction.getPlaceId()); Log.i(TAG, prediction.getPrimaryText(null).toString()); } binding.autocompleteResult.setText(builder.toString()); }).addOnFailureListener((exception) -> { if (exception instanceof ApiException apiException) { Log.e(TAG, "Place not found: " + apiException.getStatusCode()); binding.autocompleteResult.setText(getString(R.string.place_not_found, apiException.getMessage())); } });
API возвращает объект FindAutocompletePredictionsResponse в Task . Объект FindAutocompletePredictionsResponse содержит список объектов AutocompletePrediction , представляющих прогнозируемые места. Список может быть пустым, если нет известного места, соответствующего запросу и критериям фильтра.
Для каждого прогнозируемого места можно вызвать следующие методы, чтобы получить подробную информацию о месте:
-
getFullText(CharacterStyle)возвращает полный текст описания места. Это комбинация основного и дополнительного текста. Пример: " Эйфелева башня, авеню Анатоля Франса, Париж, Франция ". Кроме того, этот метод позволяет выделить разделы описания, соответствующие поисковому запросу, с помощью выбранного вами стиля, используяCharacterStyle. ПараметрCharacterStyleявляется необязательным. Установите его значение равным `null`, если выделение не требуется. -
getPrimaryText(CharacterStyle)возвращает основной текст, описывающий место. Обычно это название места. Примеры: « Эйфелева башня » и « Питт-стрит, 123 ». -
getSecondaryText(CharacterStyle)возвращает дополнительный текст описания места. Это полезно, например, в качестве второй строки при отображении подсказок автозаполнения. Примеры: " Avenue Anatole France, Paris, France " и " Sydney, New South Wales ". -
getPlaceId()возвращает идентификатор места, которое было предсказано. Идентификатор места — это текстовый идентификатор, который однозначно определяет место и может быть использован для повторного получения объектаPlace. Дополнительную информацию об идентификаторах мест в Places SDK для Android см. в разделе « Подробная информация о местах» . Общую информацию об идентификаторах мест см. в разделе « Обзор идентификаторов мест» . -
getPlaceTypes()возвращает список типов мест, связанных с данным местом. -
getDistanceMeters()возвращает расстояние по прямой в метрах между этим местом и начальной точкой, указанной в запросе.
Токены сессии
Токены сессии объединяют этапы запроса и выбора в поиске с автозаполнением в отдельную сессию для целей выставления счетов. Сессия начинается, когда пользователь начинает вводить запрос, и заканчивается, когда он выбирает место. Каждая сессия может содержать несколько запросов, за которыми следует один выбор места. После завершения сессии токен становится недействительным; ваше приложение должно генерировать новый токен для каждой сессии. Мы рекомендуем использовать токены сессии для всех программных сессий автозаполнения (при встраивании фрагмента или запуске автозаполнения с помощью интента API автоматически позаботится об этом).
В SDK Places для Android для идентификации каждой сессии используется AutocompleteSessionToken . Ваше приложение должно передавать новый токен сессии при начале каждой новой сессии, а затем передавать тот же токен вместе с идентификатором места (Place ID) в последующем вызове функции fetchPlace() для получения подробной информации о месте, выбранном пользователем.
Узнайте больше о токенах сессии .
Ограничить результаты автозаполнения
Вы можете ограничить результаты автозаполнения определенным географическим регионом и/или отфильтровать результаты по одному или нескольким типам мест или по пяти странам. Эти ограничения можно применять к действию автозаполнения, AutocompleteSupportFragment и программным API автозаполнения.
Для ограничения результатов выполните следующие действия:
- Чтобы отдавать предпочтение результатам в пределах заданной области, вызовите метод
setLocationBias()(некоторые результаты за пределами заданной области также могут быть возвращены). - Чтобы отображать только результаты в пределах заданного региона, вызовите метод
setLocationRestriction()(будут возвращены только результаты в пределах заданного региона). - Чтобы получить только результаты, соответствующие определенному типу местоположения, вызовите метод
setTypesFilter()(например, указаниеTypeFilter.ADDRESSвернет только результаты с точным адресом). - Чтобы получить результаты только из пяти указанных стран, вызовите функцию
setCountries(). Страны должны быть переданы в виде двухсимвольного кода страны , совместимого с ISO 3166-1 Alpha-2.
Результаты, искаженные из-за предвзятости в отношении конкретного региона.
Чтобы сместить результаты автозаполнения в сторону определенного географического региона, вызовите setLocationBias() , передав в качестве параметра объект RectangularBounds . В следующем примере кода показано, как вызвать setLocationBias() для экземпляра фрагмента, чтобы сместить его предложения автозаполнения в сторону региона Сидней, Австралия.
Котлин
autocompleteFragment.setLocationBias(bounds)
Java
autocompleteFragment.setLocationBias( RectangularBounds.newInstance( new LatLng(-33.880490, 151.184363), new LatLng(-33.858754, 151.229596) ) );
Ограничить результаты определенным регионом
Чтобы ограничить результаты автозаполнения определенным географическим регионом, вызовите setLocationRestriction() , передав в качестве параметра объект RectangularBounds . В следующем примере кода показано, как вызвать setLocationRestriction() для экземпляра фрагмента, чтобы сместить подсказки автозаполнения в сторону региона Сидней, Австралия.
Котлин
autocompleteFragment.setLocationRestriction(bounds)
Java
autocompleteFragment.setLocationRestriction( RectangularBounds.newInstance( new LatLng(-33.880490, 151.184363), new LatLng(-33.858754, 151.229596) ) );
Примечание: это ограничение применяется только ко всем маршрутам целиком; синтетические результаты, расположенные за пределами прямоугольных границ, могут быть получены на основе маршрута, который перекрывается с ограничением по местоположению.
Фильтрация результатов по типам мест или типам коллекций
Вы можете ограничить результаты запроса автозаполнения, чтобы возвращались только определенные типы мест. Укажите фильтр, используя типы мест или набор типов, перечисленных в таблицах 1, 2 и 3, посвященных типам мест . Если ничего не указано, будут возвращены все типы.
Для фильтрации результатов автозаполнения вызовите метод setTypesFilter() , чтобы установить фильтр.
Чтобы указать фильтр по типу или коллекции типов:
Вызовите
setTypesFilter()и укажите до пяти значений типов из таблиц 1 и 2, представленных в PlaceTypes . Значения типов определяются константами в PlaceTypes .Вызовите
setTypesFilter()и укажите коллекцию типов из таблицы 3, показанной на странице «Типы мест» . Значения коллекции определяются константами в PlaceTypes .В запросе допускается указание только одного типа из Таблицы 3. Если вы указываете значение из Таблицы 3, вы не можете указать значение из Таблицы 1 или Таблицы 2. В противном случае возникнет ошибка.
В приведенном ниже примере кода вызывается метод setTypesFilter() для объекта AutocompleteSupportFragment и указываются значения нескольких типов.
Котлин
autocompleteFragment.setTypesFilter(listOf("landmark", "restaurant", "store"))
Java
autocompleteFragment.setTypesFilter(List.of("landmark", "restaurant", "store"));
В следующем примере кода показано, как вызвать setTypesFilter() для объекта AutocompleteSupportFragment , чтобы установить фильтр, возвращающий только результаты с точным адресом, указав коллекцию типов.
Котлин
autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))
Java
autocompleteFragment.setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT));
В следующем примере кода показано, как вызвать setTypesFilter() для IntentBuilder , чтобы установить фильтр, возвращающий только результаты с точным адресом, указав коллекцию типов.
Котлин
val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields) .setTypesFilter(listOf(PlaceTypes.ESTABLISHMENT)) .build(this)
Java
Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields) .setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT)) .build(this);
Фильтрация результатов по стране
Чтобы отфильтровать результаты автозаполнения по пяти странам, вызовите setCountries() для установки кода страны . Затем передайте фильтр фрагменту или интенту. Страны должны передаваться в виде двухсимвольного кода страны , совместимого с ISO 3166-1 Alpha-2.
В следующем примере кода показано, как вызвать setCountries() для элемента AutocompleteSupportFragment , чтобы установить фильтр, возвращающий только результаты в указанных странах.
Котлин
autocompleteFragment.setCountries("AU", "NZ")
Java
autocompleteFragment.setCountries("AU", "NZ");
Ограничения на использование
На использование API Places, включая SDK Places для Android, больше не распространяется ограничение на максимальное количество запросов в день (QPD). Однако следующие ограничения по использованию по-прежнему действуют:
- Ограничение скорости составляет 6000 запросов в минуту (QPM). Оно рассчитывается как сумма запросов на стороне клиента и на стороне сервера для всех приложений, использующих учетные данные одного и того же проекта.
Отображайте атрибуцию в своем приложении
- Если ваше приложение использует сервис автозаполнения программным способом, ваш пользовательский интерфейс должен либо отображать ссылку «Powered by Google», либо отображаться на карте с логотипом Google.
- Если ваше приложение использует виджет автозаполнения, никаких дополнительных действий не требуется (необходимая информация об авторстве отображается по умолчанию).
- Если вы получаете и отображаете дополнительную информацию о месте после определения его по идентификатору , вам также необходимо отображать информацию, предоставленную третьими сторонами.
Для получения более подробной информации см. документацию по атрибуции .
Оптимизация автозаполнения (устаревшая функция)
В этом разделе описаны лучшие практики, которые помогут вам максимально эффективно использовать сервис автозаполнения мест (устаревшая версия).
Вот некоторые общие рекомендации:
- Самый быстрый способ разработать работающий пользовательский интерфейс — использовать виджет Maps JavaScript API Place Autocomplete (Legacy) , виджет Places SDK для Android Place Autocomplete (Legacy) или элемент управления Place Autocomplete (Legacy) UI из Places SDK для iOS.
- С самого начала разберитесь с основными полями данных для автозаполнения (устаревшая функция).
- Поля, указывающие на географическое смещение и ограничение местоположения, являются необязательными, но могут существенно повлиять на эффективность автозаполнения.
- Используйте обработку ошибок, чтобы ваше приложение корректно работало, если API возвращает ошибку.
- Убедитесь, что ваше приложение обрабатывает ситуацию, когда выбор отсутствует, и предлагает пользователям способ продолжить.
Передовые методы оптимизации затрат
Базовая оптимизация затрат
Для оптимизации затрат на использование сервиса автозаполнения мест (устаревшая версия) используйте маски полей в виджетах «Подробности места» (устаревшая версия) и «Автозаполнение места» (устаревшая версия), чтобы возвращать только необходимые поля данных из сервиса автозаполнения места (устаревшая версия).
Расширенная оптимизация затрат
Рассмотрите возможность программной реализации функции автозаполнения мест (устаревшая версия), чтобы получить доступ к ценообразованию SKU: Автозаполнение — за запрос и запрашивать результаты API геокодирования для выбранного места вместо подробных сведений о месте (устаревшая версия). Ценообразование за запрос в сочетании с API геокодирования более экономически выгодно, чем ценообразование за сессию (на основе сессии), если выполняются оба следующих условия:
- Если вам нужны только широта/долгота или адрес выбранного пользователем места, API геокодирования предоставит эту информацию дешевле, чем вызов функции «Подробная информация о месте» (устаревшая версия).
- Если пользователи выбирают вариант автозаполнения в среднем в четырех или менее запросах на автозаполнение Place Autocomplete (Legacy), то ценообразование за запрос может оказаться более экономически выгодным, чем ценообразование за сессию.
Требует ли ваше приложение какой-либо дополнительной информации, помимо адреса и широты/долготы выбранного прогноза?
Да, требуется более подробная информация.
Используйте функцию автозаполнения мест на основе сессий (устаревшая версия) с подробным описанием мест (устаревшая версия).
Поскольку вашему приложению требуются подробные сведения о месте (устаревшая версия), такие как название места, статус предприятия или часы работы, ваша реализация автозаполнения для мест (устаревшая версия) должна использовать токен сессии ( программно или встроенный в виджеты JavaScript , Android или iOS ) для каждой сессии, а также соответствующие SKU данных о местах , в зависимости от того, какие поля данных о местах вы запрашиваете. 1
Реализация виджета
Управление сессиями автоматически встраивается в виджеты JavaScript , Android или iOS . Это включает в себя как запросы автозаполнения (устаревшая версия), так и запросы сведений о выбранном прогнозе (устаревшая версия). Обязательно укажите параметр fields , чтобы гарантировать, что вы запрашиваете только необходимые поля данных для автозаполнения (устаревшая версия).
Программная реализация
Используйте токен сессии в запросах автозаполнения мест (устаревшая версия). При запросе подробной информации о выбранном прогнозе места (устаревшая версия) укажите следующие параметры:
- Идентификатор места из ответа функции автозаполнения мест (устаревшая версия).
- Токен сессии, используемый в запросе Place Autocomplete (Legacy).
- Параметр
fieldsуказывает, какие поля данных для автозаполнения (устаревшая версия) вам необходимы.
Нет, достаточно указать адрес и местоположение.
API геокодирования может оказаться более экономически выгодным вариантом, чем Place Details (устаревшая версия), для вашего приложения, в зависимости от производительности функции автозаполнения Place Autocomplete (устаревшая версия). Эффективность функции автозаполнения Place Autocomplete (устаревшая версия) в каждом приложении варьируется в зависимости от того, что вводят пользователи, где используется приложение и были ли внедрены лучшие практики оптимизации производительности .
Чтобы ответить на следующий вопрос, проанализируйте, сколько символов пользователь вводит в среднем перед выбором функции автозаполнения (устаревшая версия) в вашем приложении.
В среднем, пользователи выбирают вариант автозаполнения «Местоположение» (устаревшая версия) не более чем в четырех запросах?
Да
Реализуйте функцию автозаполнения мест (устаревшая версия) программным способом без использования токенов сессии и вызывайте API геокодирования для предсказания выбранного места.
API геокодирования предоставляет адреса и координаты широты/долготы. Выполнение четырех запросов автозаполнения за запрос плюс вызов API геокодирования для прогнозирования выбранного места обходится дешевле, чем стоимость автозаполнения мест (устаревшая версия) за сессию. 1
Рассмотрите возможность применения лучших практик повышения производительности , чтобы помочь вашим пользователям получить желаемый результат, используя еще меньше символов.
Нет
Используйте функцию автозаполнения мест на основе сессий (устаревшая версия) с подробным описанием мест (устаревшая версия).
Поскольку среднее количество запросов, которые, как ожидается, будут отправлены до того, как пользователь выберет вариант автозаполнения места (устаревшая версия), превышает стоимость за сессию, ваша реализация автозаполнения места (устаревшая версия) должна использовать токен сессии как для запросов автозаполнения места (устаревшая версия), так и для связанного с ними запроса сведений о месте (устаревшая версия) за сессию . 1
Реализация виджета
Управление сессиями автоматически встраивается в виджеты JavaScript , Android или iOS . Это включает в себя как запросы автозаполнения (устаревшая версия), так и запросы сведений (устаревшая версия) для выбранного прогноза. Обязательно укажите параметр fields , чтобы гарантировать запрос только необходимых полей.
Программная реализация
Используйте токен сессии в запросах автозаполнения мест (устаревшая версия). При запросе подробной информации о выбранном прогнозе места (устаревшая версия) укажите следующие параметры:
- Идентификатор места из ответа функции автозаполнения мест (устаревшая версия).
- Токен сессии, используемый в запросе Place Autocomplete (Legacy).
- Параметр
fieldsзадает поля основных данных , такие как адрес и геометрия.
Рассмотрите возможность отложить запросы на автозаполнение мест (устаревшие версии).
Вы можете использовать такие стратегии, как задержка запроса автозаполнения места (Legacy) до тех пор, пока пользователь не введёт первые три или четыре символа, чтобы ваше приложение выполняло меньше запросов. Например, если отправлять запросы автозаполнения места (Legacy) для каждого символа после того, как пользователь введёт третий символ, это означает, что если пользователь введёт семь символов, а затем выберет предсказание, для которого вы отправите один запрос API геокодирования, общая стоимость составит 4 запроса автозаполнения места (Legacy) + геокодирование. 1
Если задержка запросов позволяет снизить среднее количество программных запросов до менее чем четырех, вы можете следовать рекомендациям по эффективной реализации автозаполнения мест (устаревшая версия) с использованием API геокодирования . Обратите внимание, что задержка запросов может восприниматься пользователем как задержка, поскольку он может ожидать увидеть подсказки при каждом новом нажатии клавиши.
Рассмотрите возможность применения лучших практик повышения производительности , чтобы помочь вашим пользователям получить желаемый результат за меньшее количество символов.
Информацию о стоимости можно найти в прайс-листах платформы Google Maps .
лучшие практики повышения производительности
В следующих рекомендациях описаны способы оптимизации работы функции автозаполнения мест (устаревшая версия):
- Добавьте в свою реализацию функции автозаполнения мест (устаревшая версия) ограничения по странам, учет местоположения и (для программных реализаций) предпочтения языка. Предпочтения языка не требуются для виджетов, поскольку они получают информацию о языке из браузера или мобильного устройства пользователя.
- Если функция автозаполнения мест (устаревшая версия) сопровождается картой, вы можете изменять местоположение в зависимости от области просмотра карты.
- В ситуациях, когда пользователь не выбирает один из вариантов автозаполнения поля "Расположение" (устаревшая версия), как правило, потому что ни один из этих вариантов не соответствует желаемому адресу, вы можете повторно использовать исходный ввод пользователя, чтобы попытаться получить более релевантные результаты:
- Если вы ожидаете, что пользователь введёт только адресную информацию, используйте исходные данные, введённые пользователем, при вызове API геокодирования .
- Если вы ожидаете, что пользователь будет вводить запросы для конкретного места по названию или адресу, используйте запрос «Подробная информация о месте (устаревшая версия)». Если результаты ожидаются только в определенном регионе, используйте предвзятость по местоположению .
- Пользователи вводят адреса подобъектов, например, адреса конкретных квартир или апартаментов в здании. Например, чешский адрес "Stroupežnického 3191/17, Praha" выдает частичное предсказание в функции автозаполнения мест (устаревшая версия).
- Пользователи вводят адреса с префиксами, обозначающими участки дорог, например, "23-30 29th St, Queens" в Нью-Йорке или "47-380 Kamehameha Hwy, Kaneohe" на острове Кауаи на Гавайях.
Смещение в сторону местоположения
Отображение результатов в заданной области осуществляется путем передачи параметра location и параметра radius . Это указывает функции автозаполнения мест (устаревшая версия) отдавать предпочтение отображению результатов в пределах определенной области. Результаты за пределами определенной области также могут отображаться. Вы можете использовать параметр components для фильтрации результатов, чтобы отображать только те места, которые находятся в пределах указанной страны.
Ограничение местоположения
Ограничьте результаты указанной областью, передав параметр locationRestriction .
Вы также можете ограничить результаты областью, определенной параметром location и radius , добавив параметр strictbounds . Это указывает функции автозаполнения мест (устаревшая версия) возвращать только результаты в пределах этой области.
Поиск неисправностей
Хотя могут возникать самые разные ошибки, большинство ошибок, с которыми, скорее всего, столкнется ваше приложение, обычно вызваны ошибками конфигурации (например, был использован неправильный ключ API или ключ API был настроен некорректно) или ошибками квоты (ваше приложение превысило свою квоту). Дополнительную информацию о квотах см. в разделе «Ограничения использования» .
Ошибки, возникающие при использовании элементов управления автозаполнения, возвращаются в функции обратного вызова onActivityResult() . Вызовите Autocomplete.getStatus() чтобы получить сообщение о состоянии результата.