Android için Yerler SDK'sındaki otomatik tamamlama hizmeti, kullanıcı arama sorgularına yanıt olarak yer tahminleri döndürür. Kullanıcı yazdıkça otomatik tamamlama hizmeti işletmeler, adresler, artı kodları ve önemli yer gibi yerler için öneriler sunar.
Aşağıdaki adımları uygulayarak otomatik tamamlama özelliğini uygulamanıza ekleyebilirsiniz:
- Geliştirme zamanından tasarruf etmek ve tutarlı bir kullanıcı deneyimi sağlamak için bir otomatik tamamlama widget'ı ekleyin.
- Özelleştirilmiş bir kullanıcı deneyimi oluşturmak için yer tahminlerini programatik olarak alın.
Otomatik tamamlama widget'ı ekleme
Otomatik tamamlama widget'ı, yerleşik otomatik tamamlama işlevine sahip bir arama iletişim kutusudur. Kullanıcı arama terimlerini girerken, widget seçilebilecek tahmin edilen yerlerin bir listesini sunar. Kullanıcı bir seçim yaptığında, Place
örneği döndürülür. Bu örnekte uygulamanız, seçilen yerle ilgili ayrıntıları almak için kullanılabilir.
Otomatik tamamlama widget'ını uygulamanıza eklemenin iki yolu vardır:
- 1. Seçenek:
AutocompleteSupportFragment
yerleştirin. - 2. Seçenek: Otomatik tamamlama etkinliğini başlatmak için bir intent kullanın.
1. Seçenek: AutocompleteSupportFragment yerleştirme
Uygulamanıza AutocompleteSupportFragment
eklemek için aşağıdaki adımları uygulayın:
- Etkinliğinizin XML düzenine bir parça ekleyin.
- Etkinliğinize veya parçanıza bir işleyici ekleyin.
Bir etkinliğe AutocompleteSupportFragment öğesi ekleme
Bir etkinliğe AutocompleteSupportFragment
eklemek için XML düzenine yeni bir parça ekleyin. Örneğin:
<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"
/>
- Varsayılan olarak parçanın kenarlığı veya arka planı yoktur. Tutarlı bir görsel görünüm sağlamak için, parçayı CardView gibi başka bir düzen öğesine yerleştirin.
- Otomatik tamamlama parçasını kullanıyorsanız ve
onActivityResult
öğesini geçersiz kılmanız gerekiyorsasuper.onActivityResult
öğesini çağırmanız gerekir. Aksi takdirde parça düzgün çalışmaz.
Bir etkinliğe Yer Seçimi İşleyici ekleyin
PlaceSelectionListener
, kullanıcının seçimine yanıt olarak bir yerin döndürülmesini sağlar. Aşağıdaki kod, parçaya referans oluşturmayı ve AutocompleteSupportFragment
öğenize bir dinleyici eklemeyi göstermektedir:
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); } });
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") } })
2. Seçenek: Otomatik tamamlama etkinliğini başlatmak için bir intent kullanın
Uygulamanızın farklı bir gezinme akışı kullanmasını istiyorsanız (örneğin, otomatik tamamlama deneyimini bir arama alanı yerine bir simgeden tetiklemek) uygulamanız bir intent kullanarak otomatik tamamlamayı başlatabilir.
Otomatik tamamlama widget'ını bir intent kullanarak başlatmak için aşağıdaki adımları uygulayın:
- İstenen
Autocomplete
modunu geçerek bir amaç oluşturmak içinAutocomplete.IntentBuilder
değerini kullanın. - Niyeti başlatmak ve sonuçta kullanıcının seçili yer tahminini işlemek için kullanılabilecek bir etkinlik sonucu başlatıcısı tanımlayın
registerForActivityResult
.
Otomatik tamamlama amacı oluşturma
Aşağıdaki örnekte amaç olarak otomatik tamamlama widget'ını başlatmak için bir amaç oluşturmak üzere Autocomplete.IntentBuilder
kullanılmaktadır:
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);
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)
Otomatik tamamlama widget'ını başlatmak için bir amaç kullanırken yer paylaşımlı veya tam ekran görüntüleme modları arasından seçim yapabilirsiniz. Aşağıdaki ekran görüntülerinde her bir görüntüleme modu gösterilir:


Amaç sonucu için geri çağırma kaydedin
Kullanıcı bir yer seçtiğinde bildirim almak için registerForActivityResult()
başlatıcısını tanımlayın. Bu başlatıcı, aşağıdaki örnekte gösterildiği gibi etkinliği başlatır ve sonucu işler. Kullanıcı bir tahmin seçtiyse sonuç nesnesinde yer alan niyet içinde sunulur. Amaç Autocomplete.IntentBuilder
tarafından oluşturulduğundan Autocomplete.getPlaceFromIntent()
yöntemi, Place nesnesini çıkarabilir.
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"); } });
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") } }
Yerlerle ilgili tahminleri programatik olarak alma
Otomatik tamamlama widget'ının sağladığı kullanıcı arayüzüne alternatif olarak bir özel arama kullanıcı arayüzü oluşturabilirsiniz. Bunu yapmak için uygulamanızın yer tahminlerini programatik olarak alması gerekir. Uygulamanız, PlacesClient.findAutocompletePredictions()
yöntemini çağırarak aşağıdaki parametrelerle bir FindAutocompletePredictionsRequest
nesnesi geçirerek otomatik tamamlama API'sinden tahmin edilen yer adlarının ve/veya adreslerin listesini alabilir:
- Gerekli: Kullanıcı tarafından yazılan metni içeren bir
query
dizesi. - Önerilen:
AutocompleteSessionToken
, kullanıcı aramasının sorgu ve seçim aşamalarını faturalandırma amacıyla ayrı bir oturum halinde gruplandırır. Oturum, kullanıcı bir sorgu yazmaya başladığında başlar ve bir yer seçildiğinde sona erer. - Önerilir: Sonuçları belirtilen bölgeyle sınırlamak için enlem ve boylam sınırlarını belirten bir
RectangularBounds
nesnesi. - İsteğe bağlı: Sonuçların kısıtlanması gereken ülkeyi veya ülkeleri belirten bir veya daha fazla iki harfli ülke kodu (ISO 3166-1 Alpha-2).
İsteğe bağlı: Sonuçları belirli bir yer türüyle sınırlamak için kullanabileceğiniz
TypeFilter
. Aşağıdaki yer türleri desteklenir:TypeFilter.GEOCODE
– İşletmeler yerine yalnızca coğrafi kodlama sonuçlarını döndürür. Belirtilen konumun belirsiz olabileceği sonuçları netleştirmek için bu isteği kullanın.TypeFilter.ADDRESS
- Yalnızca tam adres içeren otomatik tamamlama sonuçlarını döndürür. Kullanıcının tam olarak belirtilmiş bir adres aradığını biliyorsanız bu türü kullanın.TypeFilter.ESTABLISHMENT
– Yalnızca işletme olan yerleri döndürür.TypeFilter.REGIONS
– Yalnızca aşağıdaki türlerden biriyle eşleşen yerleri döndürür:LOCALITY
SUBLOCALITY
POSTAL_CODE
COUNTRY
ADMINISTRATIVE_AREA_LEVEL_1
ADMINISTRATIVE_AREA_LEVEL_2
TypeFilter.CITIES
- YalnızcaLOCALITY
veyaADMINISTRATIVE_AREA_LEVEL_3
ile eşleşen sonuçları döndürür.
İsteğe bağlı: İstek için kaynak konumu belirten bir
LatLng
.setOrigin()
yöntemini çağırdığınızda hizmet, belirtilen kaynaktaki metre (distanceMeters
) cinsinden yanıttaki her otomatik tamamlama tahmini için mesafe döndürür.
Yer türleri hakkında bilgi için yer türleri kılavuzuna bakın.
Aşağıdaki örnekte PlacesClient.findAutocompletePredictions()
çağrısı eksiksiz olarak gösterilmektedir.
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()); } });
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}") } }
API,
Task
içerisinde FindAutocompletePredictionsResponse
döndürür. FindAutocompletePredictionsResponse
, tahmini yerleri temsil eden AutocompletePrediction
nesnelerinin listesini içerir. Sorguya ve filtre ölçütlerine karşılık gelen bilinen bir yer yoksa liste boş olabilir.
Tahmin edilen her bir yer için yer ayrıntılarını almak üzere aşağıdaki yöntemleri çağırabilirsiniz:
getFullText(CharacterStyle)
bir yer açıklamasının tam metnini döndürür. Bu, birincil ve ikincil metnin bir kombinasyonudur. Örnek: "Eyfel Kulesi, Avenue Anatole France, Paris, France". Ayrıca bu yöntem,CharacterStyle
kullanarak açıklamanın seçtiğiniz bir stille eşleşen bölümlerini vurgulamanıza da olanak tanır.CharacterStyle
parametresi isteğe bağlıdır. Vurgulamanız gerekmiyorsa değeri boş olarak ayarlayın.getPrimaryText(CharacterStyle)
bir yeri açıklayan ana metni döndürür. Bu genellikle yerin adıdır. Örnekler: "Eyfel Kulesi" ve "123 Pitt Street".getSecondaryText(CharacterStyle)
bir yer açıklamasının yan metnini döndürür. Bu, örneğin otomatik tamamlama tahminlerini gösterirken ikinci bir satır olarak yararlıdır. Örnekler: "Cadde Anatole Fransa, Paris, Fransa" ve "Sidney, Yeni Güney Galler".getPlaceId()
tahmin edilen yerin yer kimliğini döndürür. Yer kimliği, bir yeri benzersiz şekilde tanımlayan metin kimliğidir. Bu tanımlayıcıyı,Place
nesnesini daha sonra geri almak için kullanabilirsiniz. Android için Yerler SDK'sındaki yer kimlikleri hakkında daha fazla bilgi için Yer Ayrıntıları bölümüne bakın. Yer kimlikleri hakkında genel bilgiler için Yer kimliğine genel bakış konusuna bakın.getPlaceTypes()
bu yerle ilişkili yer türlerinin listesini döndürür.getDistanceMeters()
, bu yer ile istekte belirtilen kaynak arasındaki düz çizgi mesafesini döndürür.
Oturum jetonları
Oturum jetonları, bir kullanıcının otomatik tamamlamasının sorgu ve seçim aşamalarını faturalandırma amacıyla ayrı bir oturumda gruplandırır. Oturum, kullanıcı bir sorgu yazmaya başladığında başlar ve bir yer seçildiğinde sona erer. Her oturumda birden fazla sorgu ve ardından tek bir yer seçimi bulunabilir. Bir oturum kapatıldıktan sonra jeton artık geçerli olmaz. Uygulamanız her oturum için yeni bir jeton oluşturmalıdır. Tüm programatik otomatik tamamlama oturumları için oturum jetonları kullanmanızı öneririz (bir parçayı yerleştirdiğinizde veya bir intent kullanarak otomatik tamamlamayı başlattığınızda API bunu otomatik olarak halleder).
Android için Yerler SDK'sı, her oturumu tanımlamak için bir AutocompleteSessionToken
kullanır. Uygulamanız, her yeni oturuma başladığında yeni bir oturum jetonu iletmeli, ardından aynı jetonu bir yer kimliğiyle birlikte iletmelidir. Yer çağrısı, kullanıcı tarafından seçilen yerin Yer Ayrıntılarını almak için fetchPlace()
çağrısında bulunur.
Oturum jetonları hakkında daha fazla bilgi edinin.
Otomatik tamamlama sonuçlarını kısıtla
Otomatik tamamlama sonuçlarını belirli bir coğrafi bölgeyle sınırlayabilir ve/veya sonuçları bir ya da daha fazla yer türüne veya beş ülkeye kadar filtreleyebilirsiniz. Bu kısıtlamaları otomatik tamamlama etkinliği, AutocompleteSupportFragment
ve programatik otomatik tamamlama API'lerine uygulayabilirsiniz.
Sonuçları kısıtlamak için aşağıdakileri yapın:
- Tanımlanan bölge içindeki sonuçları tercih etmek için
setLocationBias()
yöntemini çağırın (tanımlanmış bölgenin dışından gelen bazı sonuçlar döndürülebilir). - Yalnızca tanımlanan bölgedeki sonuçları göstermek için
setLocationRestriction()
yöntemini çağırın (yalnızca tanımlanan bölgedeki sonuçlar döndürülür). - Yalnızca belirli bir yer türüne uygun sonuçları döndürmek için
setTypesFilter()
yöntemini çağırın (örneğin,TypeFilter.ADDRESS
belirtilmesi yalnızca tam adres içeren sonuçlar döndürür). - En fazla beş ülke için sonuç döndürmek istiyorsanız
setCountries()
numaralı telefonu arayın. Ülkeler, iki karakterli, ISO 3166-1 Alfa-2 ile uyumlu ülke kodu olarak geçirilmelidir.
Belirli bir bölgeyle ilgili önyargı sonuçları
Otomatik tamamlama sonuçlarının belirli bir coğrafi bölgeye göre uyarlanması için setLocationBias()
yöntemini çağırarak bir RectangularBounds
çağrısı yapın.
Aşağıdaki kod örneğinde, otomatik tamamlama önerilerinin Avustralya, Sidney bölgesine sapması için bir parça örneğinde setLocationBias()
çağrılmaktadır.
Java
autocompleteFragment.setLocationBias(RectangularBounds.newInstance( new LatLng(-33.880490, 151.184363), new LatLng(-33.858754, 151.229596)));
Kotlin
autocompleteFragment.setLocationBias( RectangularBounds.newInstance( LatLng(-33.880490, 151.184363), LatLng(-33.858754, 151.229596) ) )
Sonuçları belirli bir bölgeyle kısıtla
Otomatik tamamlama sonuçlarını belirli bir coğrafi bölgeyle kısıtlamak için setLocationRestriction()
yöntemini çağırarak RectangularBounds
çağrısı yapın.
Aşağıdaki kod örneğinde, otomatik tamamlama önerilerinin Avustralya, Sidney bölgesine göre ağırlıklandırılması için bir parça örneğinde setLocationRestriction()
çağrılmaktadır.
Java
autocompleteFragment.setLocationRestriction(RectangularBounds.newInstance( new LatLng(-33.880490, 151.184363), new LatLng(-33.858754, 151.229596)));
Kotlin
autocompleteFragment.setLocationRestriction( RectangularBounds.newInstance( LatLng(-33.880490, 151.184363), LatLng(-33.858754, 151.229596) ) )
Not: Bu kısıtlama yalnızca tüm rotalara uygulanır. Dikdörtgen sınırların dışında bulunan yapay sonuçlar, konum kısıtlamasıyla örtüşen bir rota temel alınarak döndürülebilir.
Sonuçları yer türlerine veya tür koleksiyonuna göre filtreleme
Otomatik tamamlama isteği sonuçlarını yalnızca belirli bir yer türü döndürecek şekilde kısıtlayabilirsiniz. Yer Türleri'nde Tablo 1, 2 ve 3'te listelenen yer türlerini veya tür koleksiyonunu kullanarak bir filtre belirtin. Hiçbir şey belirtilmezse tüm türler döndürülür.
Otomatik tamamlama sonuçlarını filtrelemek için setTypesFilter()
yöntemini çağırarak filtreyi ayarlayın.
Bir tür veya tür koleksiyonu filtresi belirtmek için:
setTypesFilter()
çağrısı yapın ve Tablo Türleri'nde Tablo 1 ile Tablo 2'de gösterilen en fazla beş tür değeri belirtin. Tür değerleri, PlaceTypes'taki sabit değerler tarafından tanımlanır.setTypesFilter()
çağrısı yapın ve Yer Türleri'nde gösterilen Tablo 3'ten bir tür koleksiyonu belirtin. Koleksiyon değerleri, PlaceTypes'taki sabit değerler tarafından tanımlanır.İstekte Tablo 3'ten yalnızca bir türe izin verilir. Tablo 3'ten bir değer belirtirseniz Tablo 1 veya Tablo 2'den değer belirtemezsiniz. Bunu yaparsanız bir hata oluşur.
Aşağıdaki kod örneği, AutocompleteSupportFragment
politikasında setTypesFilter()
yöntemini çağırır ve birden fazla tür değerini belirtir.
Java
autocompleteFragment.setTypesFilter(Arrays.asList("landmark", "restaurant", "store"));
Kotlin
autocompleteFragment.setTypesFilter(listOf("landmark", "restaurant", "store"))
Aşağıdaki kod örneği, bir tür koleksiyonu belirterek yalnızca tam adres içeren sonuçlar döndüren bir filtre ayarlamak için bir AutocompleteSupportFragment
içinde setTypesFilter()
işlevinin çağrılmasını gösterir.
Java
autocompleteFragment.setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS, PlaceTypes.ESTABLISHMENT));
Kotlin
autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))
Aşağıdaki kod örneği, bir tür koleksiyonu belirterek yalnızca tam adresle sonuç veren bir filtre ayarlamak için bir IntentBuilder
içinde setTypesFilter()
çağrısını gösterir.
Java
Intent intent = new Autocomplete.IntentBuilder( AutocompleteActivityMode.FULLSCREEN, fields) .setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS)) .build(this);
Kotlin
val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields) .setTypesFilter(listOf(PlaceTypes.ADDRESS)) .build(this)
Sonuçları ülkeye göre filtrele
Otomatik tamamlama sonuçlarını en fazla beş ülkeye göre filtrelemek için ülke kodunu ayarlamak üzere setCountries()
yöntemini arayın.
Ardından, filtreyi bir parçaya veya amaca iletin. Ülkeler, iki karakterli, ISO 3166-1 Alpha-2 uyumlu bir ülke kodu olarak geçirilmelidir.
Aşağıdaki kod örneğinde, yalnızca belirtilen ülkelerdeki sonuçları döndüren bir filtre oluşturmak için AutocompleteSupportFragment
içinde setCountries()
aranır.
Java
autocompleteFragment.setCountries("AU", "NZ");
Kotlin
autocompleteFragment.setCountries("AU", "NZ")
Kullanım sınırları
Android için Yerler SDK'sı da dahil olmak üzere Yerler API'si kullanımınız artık maksimum gün sayısı (QPD) ile sınırlı olmayacaktır. Ancak aşağıdaki kullanım sınırları geçerliliğini korur:
- Hız sınırı, saniyede 100 istektir (QPS). Aynı projenin kimlik bilgilerini kullanan tüm uygulamalar için istemci taraflı ve sunucu taraflı isteklerin toplamı olarak hesaplanır.
İlişkilendirmeleri uygulamanızda gösterme
- Uygulamanız otomatik olarak otomatik tamamlama hizmetini kullanıyorsa kullanıcı arayüzünüz "Google tarafından desteklenir" ilişkilendirmesi görüntülemeli veya Google markalı bir harita içinde görünmelidir.
- Uygulamanız otomatik tamamlama widget'ını kullanıyorsa herhangi bir ek işleme gerek yoktur (gerekli ilişkilendirme varsayılan olarak gösterilir).
- Yere göre kimlik aldıktan sonra ek yer bilgileri alıp gösterirseniz üçüncü taraf atıflarını da görüntülemeniz gerekir.
Daha fazla bilgi için ilişkilendirmeler ile ilgili belgelere bakın.
Yer Otomatik tamamlama optimizasyonu
Bu bölümde, Otomatik Yer Tamamlama özelliğinden en iyi şekilde yararlanmanıza yardımcı olacak en iyi uygulamalar açıklanmaktadır.
Bazı genel yönergeler şunlardır:
- Çalışan bir kullanıcı arayüzü geliştirmenin en hızlı yolu, Maps JavaScript API Otomatik tamamlama widget'ını, Android için Yerler SDK'sını iOS tamamlama widget'ı veya iOS için Yerler SDK'sını kullanmaktır Otomatik tamamlama kullanıcı arayüzü denetimi
- Temel Otomatik Yer Tamamlama veri alanları hakkında başından itibaren bilgi sahibi olun.
- Konuma ağırlık verme ve konum kısıtlama alanları isteğe bağlıdır ancak otomatik tamamlama performansını önemli ölçüde etkileyebilirler.
- API bir hata döndürürse uygulamanızın düzgün bir şekilde bozulduğundan emin olmak için hata işleme yöntemini kullanın.
- Seçim yapılmadığında uygulamanızın kullanıcılara uygun seçenekler sunduğundan emin olun.
Maliyet optimizasyonu ile ilgili en iyi uygulamalar
Temel maliyet optimizasyonu
Otomatik Yer Tamamlama hizmetini kullanmanın maliyetini optimize etmek için yalnızca ihtiyacınız olan yer verisi alanlarını döndürmek amacıyla Yer Ayrıntıları ve Otomatik Yer Tamamlama widget'larındaki alan maskelerini kullanın.
Gelişmiş maliyet optimizasyonu
İstek Başına Fiyatlandırma özelliğine erişmek için Yer Otomatik Tamamlama özelliğinin programatik olarak uygulanmasını deneyin ve Yer Ayrıntıları yerine seçili yer hakkında Geocoding API sonuçları isteyin. Aşağıdaki koşulların her ikisi de sağlanıyorsa Geocoding API ile eşlenen İstek Başına Fiyatlandırma, Oturum Başına (oturuma dayalı) fiyatlandırmadan daha maliyetlidir:
- Kullanıcının seçtiği yerin enlem/boylamı veya adresine ihtiyacınız varsa, Geokodlama API'si, bu bilgileri Yer Ayrıntıları çağrısından daha düşük bir fiyata gönderir.
- Kullanıcılar, ortalama dört veya daha az otomatik tamamlama tahmini isteği içinde bir otomatik tamamlama tahmini seçerse İstek Başına fiyatlandırma, Oturum Başına fiyatlandırmadan daha uygun olabilir.
Uygulamanız, seçilen tahminin adresi ve enlem/boylamı dışında herhangi bir bilgi gerektiriyor mu?
Evet, daha fazla ayrıntı gerekiyor
Yer Ayrıntılarıyla oturuma dayalı Yer Otomatik Tamamlama özelliğini kullanın.
Uygulamanız yer adı, işletme durumu veya çalışma saatleri gibi Yer Ayrıntıları gerektirdiğinden, Yer Otomatik Tamamlama uygulamanızda oturum başına (programatik olarak veya JavaScript, Android ya da iOS widget'larında yerleşik olarak) toplam 0,017 ABD doları maliyet ve geçerli Yer Veri SKU'ları bulunmalıdır (istediğiniz yer verisi alanlarına bağlı olarak}}
Widget uygulaması
Oturum yönetimi JavaScript, Android veya iOS widget'larına otomatik olarak yerleştirilir. Buna, seçilen tahmindeki hem Yer Otomatik Tamamlama istekleri hem de Yer Ayrıntıları isteği dahildir. Yalnızca ihtiyacınız olan yer verisi alanlarını istediğinizden emin olmak için fields
parametresini belirttiğinizden emin olun.
Programatik uygulama
Yer Otomatik Tamamlama isteklerinizle bir oturum jetonu kullanın. Seçilen tahmin hakkında Yer Ayrıntıları'nı isterken aşağıdaki parametreleri ekleyin:
- Otomatik Yer Tamamlama yanıtından yer kimliği
- Yer Otomatik Tamamlama isteğinde kullanılan oturum jetonu
- İhtiyacınız olan yer verisi alanlarını belirten
fields
parametresi
Hayır, yalnızca adres ve konum gerekiyor
Coğrafi Kodlama API'sı, Yer Otomatik Tamamlama kullanımınızın performansına bağlı olarak, uygulamanız için Yer Ayrıntıları'ndan daha uygun maliyetli bir seçenek olabilir. Her uygulamanın otomatik tamamlama verimliliği, kullanıcıların yazdıklarına, kullanıldığı yere ve performans optimizasyonuyla ilgili en iyi uygulamaların uygulanıp uygulanmadığına bağlı olarak değişir.
Aşağıdaki soruyu yanıtlamak için, kullanıcının uygulamanızda otomatik yerleştirme tahmini seçmeden önce ortalama olarak kaç karakter girdiğini analiz edin.
Kullanıcılarınız otomatik olarak ortalama dört veya daha az istekte Yer Otomatik Tamamlama tahmini seçer mi?
Evet
Yer otomatik tamamlamayı, oturum jetonları olmadan programatik olarak uygulayın ve seçilen yer tahmininde Geocoding API'yi çağırın.
Geocoding API, istek başına 0,005 ABD doları karşılığında adresleri ve enlem/boylam koordinatlarını sunar. Dört Yer Otomatik Tamamlama - İstek Başına istek yapmanın maliyeti 0,01132 ABD dolarıdır. Bu nedenle, dört yer isteğinin ve seçilen yer tahminiyle ilgili bir Geocoding API çağrısının toplam maliyeti, oturum başına 0,017 ABD doları olan oturum başına otomatik tamamlama fiyatından 0,01632 ABD doları olur.1
Kullanıcılarınızın aradıkları tahmini daha da az sayıda karakterle almasına yardımcı olmak için performansla ilgili en iyi uygulamalardan yararlanabilirsiniz.
Hayır
Yer Ayrıntılarıyla oturuma dayalı Yer Otomatik Tamamlama özelliğini kullanın.
Bir kullanıcı otomatik yer tahmini seçmeden önce yapmayı beklediğiniz ortalama istek sayısı, oturum başına fiyatlandırma maliyetini aştığından Yer Otomatik Tamamlama kullanımınız, hem Otomatik Yer Tamamlama istekleri hem de ilişkili Yer Ayrıntıları isteği için toplam oturum başına 0,017 ABD doları şeklinde bir oturum jetonu kullanmalıdır. 1
Widget uygulaması
Oturum yönetimi JavaScript, Android veya iOS widget'larına otomatik olarak yerleştirilir. Buna, seçilen tahmindeki hem Yer Otomatik Tamamlama istekleri hem de Yer Ayrıntıları isteği dahildir. Yalnızca Temel Veri alanları istediğinizden emin olmak için fields
parametresini belirttiğinizden emin olun.
Programatik uygulama
Yer Otomatik Tamamlama isteklerinizle bir oturum jetonu kullanın. Seçilen tahmin hakkında Yer Ayrıntıları'nı isterken aşağıdaki parametreleri ekleyin:
- Otomatik Yer Tamamlama yanıtından yer kimliği
- Yer Otomatik Tamamlama isteğinde kullanılan oturum jetonu
- Adres ve geometri gibi Temel Veriler alanlarını belirten
fields
parametresi
Yer Otomatik Tamamlama isteklerini ertelemeyi göz önünde bulundurun
Kullanıcının otomatik olarak ilk üç veya dört karakter girene kadar Yer Otomatik Tamamlama isteğini geciktirme gibi stratejiler uygulayabilirsiniz. Böylece uygulamanız daha az istek gönderebilir. Örneğin, kullanıcı üçüncü karakteri yazdıktan sonra her karakter için Yer Otomatik Tamamlama isteklerinde bulunursa, kullanıcı yedi karakter yazar ve bir Geocoding API isteğinde bulunduğunuz bir tahmin seçerse toplam maliyet 0,01632 ABD doları olur (4 * 0,00283 İstek Başına Otomatik Tamamlama + 0,005 Coğrafi Kodlama).1
Gecikme istekleri, ortalama programatik isteğinizi dört değerin altına düşebiliyorsa Geocoding API ile yüksek performanslı otomatik yer tamamlama uygulamasına yönelik yönergeleri uygulayabilirsiniz. Gecikme isteklerinin, her yeni tuş vuruşunda tahminleri görmeyi bekleyecek kullanıcılar tarafından gecikme olarak algılanabileceğini unutmayın.
Kullanıcılarınızın aradıkları tahmini daha az karakterden almasına yardımcı olmak için performansla ilgili en iyi uygulamalardan yararlanabilirsiniz.
-
Burada listelenen maliyetler ABD doları cinsindendir. Tam fiyatlandırma bilgileri için lütfen Google Haritalar Platformu Faturalandırması'na bakın.
Performansla ilgili en iyi uygulamalar
Aşağıdaki yönergelerde, Yer Otomatik Tamamlama performansını optimize etmenin yolları açıklanmaktadır:
- Yer Otomatik Tamamlama uygulamanıza ülke kısıtlamaları, konuma ağırlık verme ve (programatik uygulamalar için) dil tercihi ekleyin. Kullanıcının tarayıcısından veya mobil cihazından dil tercihlerini seçtikleri için widget'larla dil tercihi gerekmez.
- Yer otomatik tamamlama özelliğine bir harita eşlik ediyorsa harita görüntü alanına göre konuma ağırlık verebilirsiniz.
- Bir kullanıcının otomatik tamamlama tahminlerinden birini seçmediği durumlarda, genellikle bu tahminlerden hiçbiri istenen sonuç adresi olmadığı için daha alakalı sonuçlar elde etmek amacıyla orijinal kullanıcı girişini yeniden kullanabilirsiniz:
- Kullanıcının yalnızca adres bilgilerini girmesini bekliyorsanız Geocoding API çağrısında orijinal kullanıcı girişini yeniden kullanın.
- Kullanıcının ada veya adrese göre belirli bir yer için sorgu girmesini bekliyorsanız Yer Bulma isteği kullanın. Yalnızca belirli bir bölgede sonuçlar bekleniyorsa konuma ağırlık verme özelliğini kullanın.
- Çek Cumhuriyeti, Estonya ve Litvanya gibi alt tesis adresleri için Yer Otomatik Tamamlama desteğinin tamamlanmadığı ülkelerde alt tesis adresleri giren kullanıcılar. Örneğin, Çek adresi "Stroupežnického 3191/17, Praha", Yer Otomatik Tamamlama özelliğinde kısmi bir tahmin sunar.
- Kullanıcılar, New York'ta "23-30 29th St, Queens" gibi yol segmenti ön eklerine veya Hawai'i, Kauai adasındaki "47-380 Kamehameha Hwy, Kaneohe" gibi adresler giren kullanıcılar.
Sorun giderme
Uygulamanızın karşılaştığı hataların çoğu farklı olsa da, genellikle yapılandırma hatalarından (örneğin, yanlış API anahtarının kullanılması ya da API anahtarının yanlış yapılandırılması) veya kota hatalarından (uygulamanız kotasını aştı) kaynaklanır. Kotalar hakkında daha fazla bilgi için Kullanım Sınırları bölümüne bakın.
Otomatik tamamlama kontrollerinin kullanımında oluşan hatalar onActivityResult()
geri çağırmasında döndürülür. Sonucun durum mesajını almak için Autocomplete.getStatus()
yöntemini arayın.