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ı yazarken otomatik tamamlama hizmeti, şunun gibi yerler için öneriler döndürüyor: adresler, artı kodları ve noktaları anlatacağım.
Uygulamanıza otomatik tamamlama özelliğini aşağıdaki yöntemlerle ekleyebilirsiniz:
- Geliştirme süresinden tasarruf etmek ve tutarlı bir kullanıcı deneyimi sağlamak için otomatik tamamlama widget'ı ekleyin.
- Yer tahminleri alın programlı bir şekilde özelleştirilmiş kullanıcı deneyimi sağlar.
Otomatik tamamlama widget'ı ekleme
Otomatik tamamlama widget'ı, yerleşik otomatik tamamlama işlevine sahip bir arama iletişim kutusudur. Kullanıcı arama terimlerini girdiğinde widget, kullanıcılara
tahmin edilen yerler var. Kullanıcı bir seçim yaptığında bir Place
örneği döndürülür. Uygulamanız, seçilen yerle ilgili ayrıntıları almak için bu örneği kullanabilir.
Otomatik tamamlama widget'ını uygulamanıza eklemek için iki seçenek vardır:
- 1. Seçenek:
AutocompleteSupportFragment
yerleştirme - 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 fragman ekleyin.
- Etkinliğinize veya parçanıza bir dinleyici ekleyin.
Bir etkinliğe AutocompleteSupportFragment ekleme
Bir etkinliğe AutocompleteSupportFragment
eklemek için
XML düzeni. Ö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"
/>
- Parçanın varsayılan olarak kenarlık veya arka planı yoktur. Size tutarlı bir görsel görünüm sağlar, parçayı başka bir düzenin içine yerleştirme öğe gibi CardView öğesini seçin.
- Otomatik tamamlama parçasını kullanıyorsanız ve bunu geçersiz kılmanız gerekiyorsa
onActivityResult
,super.onActivityResult
çağrısı yapmanız gerekir, aksi takdirde parçası düzgün çalışmaz.
Bir etkinliğe PlaceSelectionListener ekleme
PlaceSelectionListener
, kullanıcının seçimine yanıt olarak bir yer döndürür. Aşağıdaki kodda, parçaya referans oluşturma ve AutocompleteSupportFragment
öğenize bir dinleyici ekleme gösterilmektedir:
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); } });
2. Seçenek: Otomatik tamamlama etkinliğini başlatmak için bir amaç kullanma
Uygulamanızın farklı bir gezinme akışı kullanmasını istiyorsanız (ör. otomatik tamamlama deneyimini bir arama alanından değil, simgeyle tetiklemek için) uygulamanız bir intent kullanarak otomatik tamamlamayı başlatabilir.
Otomatik tamamlama widget'ını bir amaç kullanarak başlatmak için aşağıdaki adımları uygulayın:
- İstediğiniz
Autocomplete
modunu ileterek bir intent oluşturmak içinAutocomplete.IntentBuilder
öğesini kullanın. - Amacın başlatılması ve sonuçta kullanıcının seçtiği yer tahmininin işlenmesi için kullanılabilecek bir etkinlik sonucu başlatıcısı
registerForActivityResult
tanımlayın.
Otomatik tamamlama amacı oluşturun
Aşağıdaki örnekte, otomatik tamamlama widget'ını intent olarak başlatmak için Autocomplete.IntentBuilder
kullanılmaktadır:
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);
Otomatik tamamlama widget'ını başlatmak için bir intent kullanırken aşağıdakilerden birini seçebilirsiniz: yer paylaşımlı veya tam ekran görüntü modları. Aşağıdaki ekran görüntülerinde, görüntüleme moduna geçebilir:
Amaç sonucu için bir geri çağırma kaydedin
Kullanıcı bir yer seçtiğinde bildirim almak için bir
Etkinliği başlatan ve aynı zamanda şunları işleyen registerForActivityResult()
başlatıcısı
aşağıdaki örnekte gösterildiği gibidir. Kullanıcı bir tahmin seçtiyse bu tahmin, sonuç nesnesinde bulunan intent'te yayınlanır. Amaçlarından
Geliştirme yöntemi olan Autocomplete.IntentBuilder
tarafından
Autocomplete.getPlaceFromIntent()
, Yer nesnesini bundan ayıklayabilir.
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"); } });
Yer tahminlerini programatik olarak alma
Otomatik tamamlama widget'ı tarafından sağlanan kullanıcı arayüzüne alternatif olarak özel bir arama kullanıcı arayüzü oluşturabilirsiniz. Bunun için uygulamanızın yer tahminlerini programatik olarak alması gerekir. Uygulamanız, PlacesClient.findAutocompletePredictions()
işlevini çağırarak ve aşağıdaki parametreleri içeren bir FindAutocompletePredictionsRequest
nesnesi ileterek otomatik tamamlama API'sinden tahmin edilen yer adlarının ve/veya adreslerin listesini alabilir:
- Zorunlu: Kullanıcının yazdığı metni içeren bir
query
dizesi. - Önerilen: Bir kullanıcı aramasının sorgu ve seçim aşamalarını faturalandırma amacıyla ayrı bir oturumda gruplandıran
AutocompleteSessionToken
. Oturum, kullanıcı yazmaya başladığında başlar ve bir yer seçtiğinde sona erer. - Önerilen:
RectangularBounds
(enlem ve boylam sınırlarını belirten bir nesnedir ve sonuçları değişiklik gösterebilir. - İsteğe bağlı: Bir veya daha fazla iki harfli ülke kodları (ISO 3166-1) Alfa-2), sonuçların gösterilmesi gereken ülke veya ülkeleri belirtir. kısıtlanmış durumda.
İsteğe bağlı: A
TypeFilter
, Bu seçeneği, sonuçları belirtilen yer türüyle sınırlamak için kullanabilirsiniz. Aşağıdaki yer türleri desteklenir:TypeFilter.GEOCODE
: İşletme yerine yalnızca coğrafi kodlama sonuçlarını döndürür. Belirtilen konum belirsiz olabilir.TypeFilter.ADDRESS
– Yalnızca tam adres. Kullanıcının tam olarak belirtilen bir adres aradığını biliyorsanız bu türü kullanın.TypeFilter.ESTABLISHMENT
– Yalnızca şu var olan yerleri döndürür: işletmeler.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ı: İsteğin kaynak konumunu belirten bir
LatLng
.setOrigin()
işlevini çağırdığınızda hizmet, yanıttaki her otomatik tamamlama tahmini için belirtilen başlangıç noktasına olan mesafeyi metre cinsinden (distanceMeters
) döndürür.
Yer türleri hakkında bilgi edinmek için yer türleri rehberine bakın.
Aşağıdaki örnekte
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()); } });
API,
Task
içinde bir FindAutocompletePredictionsResponse
döndürür. FindAutocompletePredictionsResponse
aşağıdakileri içeren bir liste içerir:
AutocompletePrediction
nesneleri ifade eder. Liste, boş olabilir.
bilinen yerlerle ilgili sonuçları görüntüleyebilirsiniz.
Tahmin edilen her yer için, yer almak üzere aşağıdaki yöntemleri çağırabilirsiniz ayrıntılar:
getFullText(CharacterStyle)
bir yer açıklamasının tam metnini döndürür. Bu, birincil ve ikincil metnin bir birleşimidir. Örnek: "Eyfel Kulesi, Avenue Anatole France, Paris, Fransa". Ayrıca bu yöntem,CharacterStyle
kullanarak açıklamanın aramayla eşleşen bölümlerini istediğiniz bir stille vurgulamanıza olanak tanır.CharacterStyle
parametresi isteğe bağlıdır. İşaretlemezseniz boş olarak ayarlayın herhangi bir vurguya ihtiyacınız olacak.getPrimaryText(CharacterStyle)
bir yeri açıklayan ana metni döndürür. Bu genellikle alan adının yer. Örnekler: "Eyfel Kulesi" ve "İstiklal Caddesi No:123".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 kullanışlıdır. Örnekler: "Ameka Anatole France, 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 tabanlı bir tanımlayıcıdır. Bu kimliği,Place
öğesini daha sonra tekrar almak için kullanabilirsiniz. Android için Yerler SDK'sındaki yer kimlikleri hakkında daha fazla bilgi için Yer Ayrıntıları başlıklı makaleyi inceleyin. Genel hakkında bilgi için Yer Kimliği genel bakış bölümüne bakın.getPlaceTypes()
bu yerle ilişkili yer türlerinin listesini döndürür.getDistanceMeters()
yer ile arasındaki düz çizgi mesafesini metre cinsinden döndürür istekte belirtilen kaynak.
Oturum jetonları
Oturum jetonları, kullanıcı otomatik tamamlama araması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çtiğinde sona erer. Her oturum birden fazla sorgu ve ardından tek bir yer seçimi bulunabilir. Bir oturum sona erdiğinde 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ını kullanmanızı öneririz (Bir parçayı yerleştirdiğinizde veya bir intent kullanarak otomatik tamamlamayı başlattığınızda API bu işlemi otomatik olarak gerçekleştirir).
Android için Yerler SDK'sı, her oturumu tanımlamak için bir AutocompleteSessionToken
kullanır. Uygulamanız, aşağıdaki durumlarda yeni bir oturum jetonu geçirmelidir:
sonra da aynı jetonu bir Yer Kimliği ile birlikte iletir.
müzakere etme becerilerinizi
fetchPlace()
simgesini tıklayın.
Oturum hakkında daha fazla bilgi jetonlar.
Otomatik tamamlama sonuçlarını kısıtlama
Otomatik tamamlama sonuçlarını belirli bir coğrafi bölgeyle sınırlandırabilirsiniz ve/veya
sonuçları bir veya daha fazla yer türüne ya da en fazla beş ülkeye göre filtreleyebilirsiniz. Siz
bu kısıtlamaları otomatik tamamlama etkinliğine uygulayabilir,
AutocompleteSupportFragment
ve programatik otomatik tamamlama API'leri içerir.
Sonuçları sınırlamak için aşağıdakileri yapın:
- Tanımlanmış bölgedeki sonuçları tercih etmek için
setLocationBias()
işlevini çağırın (tanımlanmış bölgenin dışındaki bazı sonuçlar yine de döndürülebilir). - Tanımlanmış bölgedeki sonuçları yalnızca göstermek için
setLocationRestriction()
işlevini çağırın (yalnızca tanımlanmış 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()
(örneğin,TypeFilter.ADDRESS
belirtmek şu sonucu döndürür: kesin adres içeren sonuçlar). - Yalnızca belirtilen beş ülke içindeki sonuçları döndürmek için
setCountries()
numaralı telefonu arayın. Ülkeler, iki karakterli, ISO 3166-1 Alpha-2 uyumlu ülke kodu olarak iletilmelidir.
Belirli bir bölge için yanlı sonuçlar
Otomatik tamamlama sonuçlarına belirli bir coğrafi bölge eklemek için şu numarayı arayın:
setLocationBias()
, başarılı
RectangularBounds
Aşağıdaki kod örneğinde, otomatik tamamlama önerilerini Avustralya'nın Sidney bölgesine yönlendirmek için bir fragment örneğinde setLocationBias()
çağrısı gösterilmektedir.
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)));
Sonuçları belirli bir bölgeyle sınırlandırın
Otomatik tamamlama sonuçlarını belirli bir coğrafi bölgeyle kısıtlamak için şu numarayı arayın:
setLocationRestriction()
, başarılı
RectangularBounds
Aşağıdaki kod örneğinde, setLocationRestriction()
çağrısı gösterilmektedir
parça örneğini Sidney'in bir bölgesine göre şekillendirebilir.
Avustralya.
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)));
Not: Bu kısıtlama yalnızca tüm rotalara uygulanır. Sentetik sonuçlar. dikdörtgen sınırların dışında kalan ve şu anda konum kısıtlamasıyla çakışıyor.
Sonuçları yer türlerine veya koleksiyon türüne göre filtreleyin
Bir otomatik tamamlama isteğinin sonuçlarını, yalnızca bir belirli bir yer türünü seçin. Yer türlerini veya tür koleksiyonunu kullanarak filtre belirleme Yer Türleri hakkındaki 1., 2. ve 3. Tablodaki bilgileri inceleyin. Hiçbir şey belirtilmezse tüm türler döndürülür.
Otomatik tamamlama sonuçlarını filtrelemek için filtreyi ayarlamak üzere setTypesFilter()
düğmesine basın.
Bir tür veya tür koleksiyon filtresi belirtmek için:
setTypesFilter()
yöntemini çağırın ve Tablo 1'den en fazla beş tür değeri belirtin Yer Türleri'nde gösterilen Tablo 2'yi de kapsar. Tür değerleri: sabitlerle tanımlanır PlaceTypes ifadesini ekleyin.setTypesFilter()
işlevini çağırın ve Yer Türleri bölümünde gösterilen Tablo 3'ten bir tür koleksiyonu belirtin. Koleksiyon değerleri, PlaceTypes'taki sabitler tarafından tanımlanır.İstekte Tablo 3'ten yalnızca bir türe izin verilir. Bir değeri tablo 1 veya Tablo 2'den değer belirtemezsiniz. Aksi takdirde hata meydana gelir.
Aşağıdaki kod örneğinde, bir AutocompleteSupportFragment
üzerinde setTypesFilter()
çağrılıyor ve birden fazla tür değeri belirtiliyor.
Kotlin
autocompleteFragment.setTypesFilter(listOf("landmark", "restaurant", "store"))
Java
autocompleteFragment.setTypesFilter(Arrays.asList("landmark", "restaurant", "store"));
Aşağıdaki kod örneği,setTypesFilter()
Yalnızca şuna sahip sonuçları döndüren bir filtre ayarlamak için: AutocompleteSupportFragment
bir tür koleksiyonu belirterek tam adresi.
Kotlin
autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))
Java
autocompleteFragment.setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS, PlaceTypes.ESTABLISHMENT));
Aşağıdaki kod örneği,setTypesFilter()
IntentBuilder
ayarını kullanarak yalnızca kesin adres içeren sonuçları döndüren bir filtre oluşturabilirsiniz.
bir tür koleksiyonu belirtmelisiniz.
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);
Sonuçları ülkeye göre filtreleyin
Otomatik tamamlama sonuçlarını en fazla beş ülkeyle filtrelemek için ülke kodunu ayarlamak üzere setCountries()
düğmesini tıklayın.
Ardından filtreyi bir parçaya veya amaca iletin. Ülkeler
iki karakterli, ISO 3166-1 Alpha-2 uyumlu ülke
girin.
Aşağıdaki kod örneğinde, yalnızca belirtilen ülkelerdeki sonuçları döndüren bir filtre ayarlamak için AutocompleteSupportFragment
üzerinde setCountries()
çağrısı gösterilmektedir.
Kotlin
autocompleteFragment.setCountries("AU", "NZ")
Java
autocompleteFragment.setCountries("AU", "NZ");
Kullanım sınırları
Android için Yerler SDK'sı da dahil olmak üzere Yerler API'sini kullanımınız artık günlük maksimum istek sayısıyla (QPD) sınırlı değildir. Ancak aşağıdaki kullanım sınırları geçerli olmaya devam eder:
- Hız sınırı 6.000 QPM'dir (dakikada istek). Aynı projenin kimlik bilgilerini kullanan tüm uygulamalar için istemci tarafı ve sunucu tarafı isteklerinin toplamı olarak hesaplanır.
Uygulamanızda ilişkilendirmeleri gösterme
- Uygulamanız otomatik tamamlama hizmetini programatik olarak kullanıyorsa kullanıcı arayüzünüzde "Google Tarafından Güçlendirilmiştir" atfı gösterilmeli veya Google markalı bir haritada görünmelidir.
- Uygulamanızda otomatik tamamlama widget'ı kullanılıyorsa ek bir işlem yapmanız gerekmez (varsayılan olarak gerekli atıf gösterilir).
- yer ölçütü: Kimliği, siz üçüncü taraf ilişkilendirmelerini de görüntülemelidir.
Daha fazla bilgi için ilişkilendirmeler.
Yer Otomatik Tamamlama optimizasyonu
Bu bölümde, yer otomatik tamamlama hizmetinden en iyi şekilde yararlanmanıza yardımcı olacak en iyi uygulamalar açıklanmaktadır.
Bazı genel kurallar şunlardır:
- Çalışan bir kullanıcı arayüzü geliştirmenin en hızlı yolu Maps JavaScript API Otomatik tamamlama widget'ı, Android için Yerler SDK'sı Otomatik tamamlama widget'ı, veya Yerler SDK'sı Otomatik tamamlama kullanıcı arayüzü kontrolü
- Temel Yer Otomatik Tamamlama özelliği hakkında bilgi sahibi olun veri alanlarını en baştan iki kez kontrol edin.
- Konuma ağırlık verme ve konum kısıtlama alanları isteğe bağlıdır, ancak otomatik tamamlama performansı üzerinde önemli bir etkisi vardır.
- API hata döndürdüğünde uygulamanızın sorunsuz bir şekilde bozulmasını sağlamak için hata işleme özelliğini kullanın.
- Uygulamanızın seçim yapılmadığı durumlarda bunu yaptığından ve kullanıcılara seçeneğini tıklayın.
Maliyet optimizasyonuyla ilgili en iyi uygulamalar
Temel maliyet optimizasyonu
Yer Otomatik 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 Yer Otomatik Tamamlama widget'larındaki alan maskelerini kullanın.
Gelişmiş maliyet optimizasyonu
İstek Başına fiyatlandırma özelliğine erişmek ve seçilen yer hakkında Yer Ayrıntıları yerine Coğrafi Kodlama API'si sonuçlarını istemek için Otomatik Yer Tamamlama özelliğinin programatik olarak uygulanmasını göz önünde bulundurun. Aşağıdaki koşulların her ikisi de karşılanırsa İstek Başına Fiyatlandırma, Geocoding API ile eşleştirilen Oturum Başına (oturuma dayalı) fiyatlandırmadan daha uygun maliyetlidir:
- Yalnızca kullanıcının seçtiği yerin enlem/boylamına veya adresine ihtiyacınız varsa Coğrafi Kodlama API'si bu bilgileri bir Yer Ayrıntıları çağrısından daha kısa sürede sağlar.
- Kullanıcılar ortalama dört veya daha az Otomatik Tamamlama tahmin isteği içinde bir otomatik tamamlama tahmini seçerse, İstek Başına fiyatlandırma, Oturum Başına fiyatlandırmadan daha uygun maliyetli olabilir.
Uygulamanız, seçilen tahminin adresi ve enlem/boylam dışında başka bilgi gerektiriyor mu?
Evet, daha fazla ayrıntı gerekiyor
Yer Ayrıntıları ile oturuma dayalı Otomatik Yer Tamamlama özelliğini kullanın.
.
Uygulamanız; yer adı, işletme durumu veya çalışma saatleri gibi Yer Ayrıntıları gerektirdiğinden, Otomatik Yer Tamamlama uygulamanız programatik olarak veya JavaScript, Android ya da iOS widget'larında yerleşik olarak bulunan bir oturum jetonu kullanmalıdır.Bu kullanım için toplamda 0,017 ABD doları tutarında oturum başına maliyet ve geçerli Yer Verileri SKU'ları kullanılabilir.
Widget uygulama
Oturum yönetimi, JavaScript, Android veya iOS widget'larına otomatik olarak yerleştirilmiştir. Buna hem otomatik Yer Tamamlama istekleri hem de seçilen tahmindeki Yer Ayrıntısı isteği dahildir. Yalnızcafields
yer verisi alanlarını girin.
Programatik uygulama
Yer Otomatik Tamamlama isteklerinizde oturum jetonu kullanın. Seçilen tahmin hakkında Yer Ayrıntıları isterken aşağıdaki parametreleri ekleyin:
- Otomatik Yer Tamamlama yanıtındaki yer kimliği
- Otomatik Yer 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
Otomatik Yer Tamamlama kullanımınızın performansına bağlı olarak Coğrafi Kodlama API'sı, uygulamanız için Yer Ayrıntıları'ndan daha uygun maliyetli bir seçenek olabilir. Her uygulamanın Otomatik Tamamlama verimliliği, hangi kullanıcıların giriş yaptığına, uygulamanın nerede kullanıldığına ve performans optimizasyonuyla ilgili en iyi uygulamaların uygulanıp uygulanmadığına bağlı olarak değişiklik gösterir.
Aşağıdaki soruyu yanıtlamak için uygulamanızda bir yer otomatik tamamlama tahmini seçmeden önce kullanıcının ortalama olarak kaç karakter yazdığını analiz edin.
Kullanıcılar, ortalama dört veya daha az istekte bir Yer Otomatik Tamamlama tahmini seçiyor mu?
Evet
Oturum jetonları olmadan Yer Otomatik Tamamlama'yı programatik olarak uygulayın ve seçili yer tahmini için Geocoding API'yi çağırın.
Geocoding API, istek başına 0,005 ABD doları karşılığında adresler ve enlem/boylam koordinatları sağlar. Dört Place Autocomplete - Request Per isteği göndermek 0,01132 ABD doları maliyete sahiptir. Bu nedenle, dört istek ve seçilen yer tahminiyle ilgili bir Geocoding API çağrısının toplam maliyeti 0,01632 ABD doları olur. Bu maliyet, oturum başına 0,017 ABD doları olan Otomatik Tamamlama oturumu başına fiyattan daha düşüktür.1
Kullanıcılarınızın aradıkları tahmini daha da az karakterle almasına yardımcı olmak için performansla ilgili en iyi uygulamaları kullanmayı düşünebilirsiniz.
Hayır
Yer Ayrıntıları ile oturum tabanlı yer otomatik tamamlamayı kullanın.
Kullanıcının bir Otomatik Yer Tamamlama tahminini seçmeden önce göndermenizi beklediğiniz ortalama istek sayısı, Oturum Başına fiyatlandırmanın maliyetini aştığından, Otomatik Yer Tamamlama uygulamanızda hem Otomatik Yer Tamamlama istekleri hem de ilişkili Yer Ayrıntıları isteği için bir oturum jetonu kullanılmalıdır. Bu durumda, toplam maliyet oturum başına 0,017 ABD dolarıdır.1
Widget uygulama
Oturum yönetimi, JavaScript, Android veya iOS widget'larına otomatik olarak yerleştirilmiştir. Buna hem otomatik Yer Tamamlama istekleri hem de seçilen tahmindeki Yer Ayrıntısı isteği dahildir. Yalnızca Temel Veriler alanlarını istediğinizden emin olmak için fields
parametresini belirttiğinizden emin olun.
Programatik uygulama
Yer Otomatik Tamamlama isteklerinizde oturum jetonu kullanın. Seçilen tahmin hakkında Yer Ayrıntıları isterken aşağıdaki parametreleri ekleyin:
- Otomatik Yer Tamamlama yanıtındaki yer kimliği
- Yer Otomatik Tamamlama isteğinde kullanılan oturum jetonu
- Adres ve geometri gibi Temel Veri alanlarını belirten
fields
parametresi
Yer Otomatik Tamamlama isteklerini ertelemeyi düşünün
Otomatik Yer Tamamlama isteğini, kullanıcı ilk üç veya dört karakteri yazana kadar ertelemek gibi stratejiler kullanarak uygulamanızın daha az istek göndermesini sağlayabilirsiniz. Örneğin, kullanıcı üçüncü karakteri yazdıktan sonra her karakter için Otomatik Tamamlama isteğinde bulunmak, kullanıcı yedi karakteri yazdıktan sonra bir Coğrafi Kodlama API'si isteği gönderdiğiniz bir tahmin seçerse toplam maliyetin 0,01632 ABD doları (4 * 0,00283 ABD doları Otomatik Tamamlama + 0,005 ABD doları Coğrafi Kodlama) olacağı anlamına gelir.1
İstekleri ertelemeniz ortalama programatik isteğinizin dörtten az olmasını sağlayabilirse Geocoding API ile performanslı Yer Otomatik Tamamlama uygulama kılavuzunu takip edebilirsiniz. Geciken isteklerin, her yeni tuş vuruşuyla tahminler görmeyi bekleyen kullanıcı tarafından gecikme olarak algılanabileceğini unutmayın.
Kullanıcılarınızın aradıkları tahmini daha az karakterle elde etmelerine yardımcı olmak için performansla ilgili en iyi uygulamaları kullanabilirsiniz.
-
Burada listelenen maliyetler ABD doları cinsindendir. Tam fiyatlandırma bilgileri için lütfen Google Haritalar Platformu Faturalandırma sayfasına bakın.
Performansla ilgili en iyi uygulamalar
Aşağıdaki kurallarda, yer otomatik tamamlama performansını optimize etme yöntemleri açıklanmaktadır:
- Yer otomatik tamamlama uygulamanıza ülke kısıtlamaları, konum önyargısı ve (programlı uygulamalar için) dil tercihi ekleyin. Widget'lar, dil tercihlerini kullanıcının tarayıcısından veya mobil cihazından seçtiğinden dil tercihi gerekmez.
- Yer Otomatik Tamamlama özelliğine bir harita eşlik ediyorsa konumu harita görüntü alanına göre kaydırabilirsiniz.
- 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ıdan 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 belirli bir yerle ilgili ad veya adrese göre sorgu girmesini bekliyorsanız Yer Bul isteği kullanın. Sonuçların yalnızca belirli bir bölgede elde edilmesi bekleniyorsa konumlu önyargı kullanın.
- Çekya, Estonya ve Litvanya gibi alt tesis adresleri için yer otomatik tamamlama desteğinin eksik olduğu ülkelerde alt tesis adresleri giren kullanıcılar. Örneğin, "Stroupežnického 3191/17, Praha" şeklindeki Çek adresi, Yer Otomatik Tamamlama özelliğinde kısmi bir tahmin verir.
- New York City'de "23-30 29th St, Queens" veya Hawai'deki Kauai adasında "47-380 Kamehameha Hwy, Kaneohe" gibi yol segmenti ön ekleriyle adres giren kullanıcılar.
Sorun giderme
Çok çeşitli hatalar oluşabilir ancak uygulamanızdaki hataların çoğu genellikle yapılandırma hatalarından kaynaklanır (örneğin, yanlış API anahtarı kullanılmış veya API anahtarı yanlış yapılandırılmıştır) ya da kota (uygulamanız kotasını aştı). Kullanım bölümüne bakın Daha fazlası için sınırlar kotalar hakkında bilgi edinin.
Otomatik tamamlama denetimleri kullanılırken ortaya çıkan hatalar
onActivityResult()
geri arama. Sonuçla ilgili durum mesajını almak için Autocomplete.getStatus()
numaralı telefonu arayın.