Place Autocomplete

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Platform seçin: Android iOS JavaScript Web Hizmeti

Android için Yerler SDK'sındaki otomatik tamamlama hizmeti, kullanıcı arama sorgularına yanıt olarak yer tahminlerini döndürür. Kullanıcı yazarken otomatik tamamlama hizmeti işletmeler, adresler, artı kodları ve önemli yerler gibi yerler için öneriler sunar.

Otomatik tamamlama özelliğini uygulamanıza aşağıdaki şekillerde ekleyebilirsiniz:

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, aralarından seçim yapabileceğiniz tahmini yerlerin listesini sunar. Kullanıcı bir seçim yaptığında, uygulamanızın seçili yer hakkındaki ayrıntıları almak için kullanabileceği bir Place örneği döndürülür.

Otomatik tamamlama widget'ını uygulamanıza eklemek için iki seçeneğiniz vardır:

1. Seçenek: AutocompleteSupportFragment'i yerleştirme

Uygulamanıza AutocompleteSupportFragment eklemek için aşağıdaki adımları uygulayın:

  1. Etkinliğinizin XML düzenine bir parça ekleyin.
  2. Etkinliğinize veya parçanıza bir dinleyici ekleyin.

Bir etkinliğe AutocompleteSupportFragment öğesini 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 öğesinin içine yerleştirin.
  • Otomatik tamamlama parçasını kullanıyorsanız ve onActivityResult öğesini geçersiz kılmanız gerekiyorsa super.onActivityResult öğesini çağırmanız gerekir. Aksi takdirde parça düzgün çalışmaz.

Etkinliğe yer seçici 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 cihazınıza 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 niyet kullanın

Uygulamanızın farklı bir gezinme akışı kullanmasını istiyorsanız (örneğin, otomatik tamamlama deneyimini bir arama alanından ziyade tetiklemek için) bir niyeti kullanarak otomatik tamamlamayı başlatabilirsiniz.

Bir amaç kullanarak otomatik tamamlama widget'ını başlatmak için şu adımları uygulayın:

  1. İstenen Autocomplete modundan başlayarak niyet oluşturmak için Autocomplete.IntentBuilder aracını kullanın. Niyet, startActivityForResult öğesini çağırarak niyeti tanımlayan bir istek kodu iletmelidir.
  2. Seçili yeri almak için onActivityResult geri çağırmasını geçersiz kılın.

Otomatik tamamlama amacı oluşturun

Aşağıdaki örnekte, otomatik tamamlama widget'ını amaç olarak başlatmak amacıyla Autocomplete.IntentBuilder kullanılmalıdır:

Java


    private static int AUTOCOMPLETE_REQUEST_CODE = 1;

    // 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);
    startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE);

      

Kotlin


    private val AUTOCOMPLETE_REQUEST_CODE = 1

    // 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)
    startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE)

      

Otomatik tamamlama widget'ını başlatmak için amaç kullanırken, yer paylaşımı veya tam ekran görüntüleme modları arasından seçim yapabilirsiniz. Aşağıdaki ekran görüntüleri sırasıyla her bir görüntüleme modunu gösterir:

Yer paylaşımlı modda gösterildiğinde, otomatik tamamlama widget&#39;ı çağrı kullanıcı arayüzünün üzerine yerleştirilmiş olarak görünür.
Şekil 1: OVERLAY modunda otomatik tamamlama widget'ı
Tam ekran modunda görüntülendiğinde otomatik tamamlama widget&#39;ı tüm ekranı kaplar.
Şekil 2: Widget'ı Tam Ekran modunda otomatik tamamlama

onActivityResult geri çağırmasını geçersiz kıl

Kullanıcı bir yer seçtiğinde bildirim almak için uygulamanızın, aşağıdaki örnekte gösterildiği gibi amacınız için ilettiğiniz istek kodunu kontrol ederek etkinliğin onActivityResult() değerini geçersiz kılması gerekir.

Java


@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    if (requestCode == AUTOCOMPLETE_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            Place place = Autocomplete.getPlaceFromIntent(data);
            Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
        } else if (resultCode == AutocompleteActivity.RESULT_ERROR) {
            // TODO: Handle the error.
            Status status = Autocomplete.getStatusFromIntent(data);
            Log.i(TAG, status.getStatusMessage());
        } else if (resultCode == RESULT_CANCELED) {
            // The user canceled the operation.
        }
        return;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

      

Kotlin


override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (requestCode == AUTOCOMPLETE_REQUEST_CODE) {
        when (resultCode) {
            Activity.RESULT_OK -> {
                data?.let {
                    val place = Autocomplete.getPlaceFromIntent(data)
                    Log.i(TAG, "Place: ${place.name}, ${place.id}")
                }
            }
            AutocompleteActivity.RESULT_ERROR -> {
                // TODO: Handle the error.
                data?.let {
                    val status = Autocomplete.getStatusFromIntent(data)
                    Log.i(TAG, status.statusMessage ?: "")
                }
            }
            Activity.RESULT_CANCELED -> {
                // The user canceled the operation.
            }
        }
        return
    }
    super.onActivityResult(requestCode, resultCode, data)
}

      

Programatik olarak yer tahminleri 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, aşağıdaki parametreleri içeren bir FindAutocompletePredictionsRequest nesnesini ileterek PlacesClient.findAutocompletePredictions() yöntemini çağırarak autocomplete API'den tahmini 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 oturumda gruplandırır. Oturum, kullanıcı bir sorgu yazmaya başladığında başlar ve bir yer seçildiğinde sona erer.
  • Önerilen: 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 iki veya daha fazla iki harfli ülke kodu (ISO 3166-1 Alpha-2).
  • İsteğe bağlı: Sonuçları belirtilen yer türüyle kısıtlamak için kullanabileceğiniz bir 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 adresi içeren otomatik tamamlama sonuçlarını döndürür. Kullanıcının tam olarak belirtilen bir adres aradığını bildiğinizde 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ızca LOCALITY veya ADMINISTRATIVE_AREA_LEVEL_3 ile eşleşen sonuçları döndürür.

  • İsteğe bağlı: İstek için çıkış konumunu belirten LatLng. setOrigin() yöntemini çağırdığınızda hizmet, belirtilen kaynaktaki metre (distanceMeters) cinsinden yanıtı, yanıttaki her otomatik tamamlama tahmini için 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ının tamamı 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(TypeFilter.ADDRESS.toString()))
        .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(TypeFilter.ADDRESS.toString()))
            .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çinde FindAutocompletePredictionsResponse değerini döndürür. FindAutocompletePredictionsResponse, tahmini yerleri temsil eden AutocompletePrediction nesne listesini içerir. Sorguya ve filtre ölçütlerine karşılık gelen bilinmeyen bir yer yoksa liste boş olabilir.

Tahmini her 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". Bu yöntem, CharacterStyle kullanarak açıklamanın arama stilinizle eşleşen bölümlerini vurgulamanıza da olanak tanır. CharacterStyle parametresi isteğe bağlıdır. Herhangi bir vurgulamaya ihtiyacınız yoksa null (boş değer) 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: "Anadolu 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 metinsel bir tanımlayıcıdır. Daha sonra Place nesnesini almak için bu kimliği kullanabilirsiniz. Android için Yerler SDK'sındaki yer kimlikleri hakkında daha fazla bilgi için Yer Ayrıntıları'na bakın. Yer kimlikleri hakkında genel bilgi 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ı otomatik tamamlama sorgusunun 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 olabilir. 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ı kullanmanızı öneririz (bir parçayı yerleştirdiğinizde veya bir niyeti kullanarak otomatik tamamlamayı başlattığınızda API bunu otomatik olarak yapar).

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 kullanıcı tarafından seçilen yerin Yer Ayrıntılarını almak için sonraki çağrıda fetchPlace() çağrısıyla aynı jetonu iletmelidir.

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 en fazla beş ülkeye göre filtreleyebilirsiniz. Bu sınırlamaları 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ışındaki sonuçlar yine de 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).
  • Yalnızca en fazla 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 geçirilmelidir.

Belirli bir bölgeyle ilgili taraflı sonuçlar

Otomatik tamamlama sonuçlarına belirli bir coğrafi bölgede ağırlık vermek için setLocationBias() çağrısı yaparak RectangularBounds değerini iletin. Aşağıdaki kod örneği, otomatik tamamlama önerilerini Avustralya, Sidney'in bir bölgesine ağırlık vermek için bir parça örneğinde setLocationBias() çağrısını göstermektedir.

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() numaralı telefonu arayarak RectangularBounds kodunu iletin. Aşağıdaki kod örneği, otomatik tamamlama önerilerini Avustralya, Sidney'in bir bölgesine ağırlık vermek için bir parça örneğinde setLocationRestriction() çağrısını göstermektedir.

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. Konum kısıtlamasıyla örtüşen bir rotaya bağlı olarak, dikdörtgen sınırların dışında bulunan yapay sonuçlar döndürülebilir.

Sonuçları yer türlerine veya tür koleksiyonuna göre filtreleyin

Bir otomatik tamamlama isteğindeki sonuçları, yalnızca belirli bir yer türü döndürecek şekilde kısıtlayabilirsiniz. Yer Türleri konusunda 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 Yer Türleri'nde gösterilen 1. Tablo ve 2. Tablo'dan en fazla beş tür değeri belirtin. Tür değerleri, PlaceTypes'taki sabitlerle tanımlanır.

  • setTypesFilter() yöntemini çağırın ve Yer Türleri bölümünde gösterilen 3. Tablo'da bulunan bir tür koleksiyonu belirtin. Koleksiyon değerleri, PlaceTypes'taki sabitlerle tanımlanır.

    İstekte Tablo 3'ten yalnızca bir türe izin verilir. Tablo 3'ten bir değer belirtirseniz 1. Tablo'dan veya 2. Tablo'dan bir değer belirtemezsiniz. Aksi takdirde bir hata oluşur.

Aşağıdaki kod örneği, bir AutocompleteSupportFragment üzerinde setTypesFilter() öğesini çağırır ve birden fazla tür değeri 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 kesin adres içeren sonuçlar döndüren bir filtre oluşturmak için AutocompleteSupportFragment üzerinde setTypesFilter() çağrısını gösterir.

Java


    autocompleteFragment.setTypesFilter(Arrays.asList(TypeFilter.ADDRESS.toString()));

      

Kotlin


    autocompleteFragment.setTypesFilter(listOf(TypeFilter.ADDRESS.toString()))

      

Aşağıdaki kod örneği, bir tür koleksiyonu belirterek yalnızca tam adresle sonuç veren bir filtre oluşturmak üzere IntentBuilder üzerinde setTypesFilter() çağrısı yapmayı göstermektedir.

Java


    Intent intent = new Autocomplete.IntentBuilder(
        AutocompleteActivityMode.FULLSCREEN, fields)
        .setTypesFilter(Arrays.asList(TypeFilter.ADDRESS.toString()))
        .build(this);
    startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE);

      

Kotlin


    val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
        .setTypesFilter(listOf(TypeFilter.ADDRESS.toString()))
        .build(this)
    startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE)

      

Sonuçları ülkeye göre filtrele

Otomatik tamamlama sonuçlarını beş ülkeye kadar filtrelemek için ülke kodunu ayarlamak üzere setCountries() yöntemini çağırın. Ardından, filtreyi bir parçaya veya amaca iletin. Ülkeler, iki karakterli, ISO 3166-1 Alpha-2 uyumlu ülke kodu olarak geçirilmelidir.

Aşağıdaki kod örneği, yalnızca belirtilen ülkelerde sonuç döndüren bir filtre oluşturmak için bir AutocompleteSupportFragment içinde setCountries() işlevini çağırmayı göstermektedir.

Java


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

      

Kotlin


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

      

Kullanım sınırları

Android için Yerler SDK'sı dahil Yerler API'si kullanımınız artık günlük maksimum istek sayısıyla (QPD) sınırlı değil. Ancak aşağıdaki kullanım sınırları geçerliliğini korur:

  • Hız sınırı 100 istek/saniye (QPS). Aynı projenin kimlik bilgilerini kullanan tüm uygulamalar için istemci taraflı ve sunucu tarafı isteklerin toplamı olarak hesaplanır.

İlişkilendirmeleri uygulamanızda gösterin

  • Uygulamanız otomatik olarak otomatik tamamlama hizmetini kullanıyorsa kullanıcı arayüzünüz "Google tarafından desteklenmektedir" ilişkilendirmesi görüntülemeli veya Google markalı bir harita içinde görünmelidir.
  • Uygulamanız otomatik tamamlama widget'ını kullanıyorsa ek bir işlem yapmanız gerekmez (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östermeniz gerekir.

Daha fazla ayrıntı için ilişkilendirmelere ilişkin belgeleri inceleyin.

Yer otomatik tamamlama optimizasyonu

Bu bölümde, Otomatik Yer Tamamlama hizmetinden 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, Haritalar JavaScript API'si Otomatik tamamlama widget'ını, Android için Yerler SDK'sını Otomatik tamamlama widget'ı veya iOS için Yerler SDK'sını kullanmaktır Otomatik tamamlama kullanıcı arayüzü kontrolü
  • Temel Otomatik Tamamlama veri alanları'nı başından itibaren anlayın.
  • 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 etkileyebilir.
  • API hata döndürürse uygulamanızın düzgün bir şekilde bozulmasını sağlamak için hata işleme yöntemini kullanın.
  • Uygulamanızın seçenek olmadığında işlendiğinden ve kullanıcılara devam etmek için bir yol sunduğundan emin olun.

Maliyet optimizasyonu 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 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ı düşünebilirsiniz. Ayrıca, Yer Ayrıntıları yerine seçilen yer hakkında Geocoded API sonuçları isteğinde bulunabilirsiniz. Aşağıdaki koşulların her ikisi de sağlanıyorsa istek başına fiyatlandırma, Geocode API ile eşlenmiş oturum başına fiyatlandırmaya (oturuma dayalı) fiyatlandırmadan daha maliyetlidir:

  • Kullanıcının seçtiği yerin enlem/boylamı veya adresine ihtiyacınız varsa Geo kodlama API'si, bu bilgileri Yer Ayrıntıları çağrısından daha düşük bir fiyatla sunar.
  • 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.
İhtiyaçlarınıza uygun Otomatik Yer Tamamlama uygulamasını seçme konusunda yardım almak için aşağıdaki soruya vereceğiniz yanıta karşılık gelen sekmeyi seçin.

Uygulamanız, seçilen tahminin adresi ve enlem/boylam bilgileri dışında 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ını gerektirdiğinden, Yer Otomatik Tamamlama uygulamanızda, istediğiniz yer veri alanına bağlı olarak, toplamda 0,017 ABD doları oturum başına maliyete sahip bir oturum jetonu (programatik olarak veya JavaScript, Android ya da iOS widget'ları kullanılarak ve geçerli Yerler Veri SKU'ları kullanmanız gerekir}.

Widget uygulama
Oturum yönetimi otomatik olarak
JavaScript, Android veya iOS widget'larına yerleştirilir. Buna, seçilen tahmindeki hem Yer Otomatik Tamamlama istekleri hem de Yer Ayrıntıları istekleri 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 birlikte bir oturum jetonu kullanın. Seçilen tahmin hakkında Yer Ayrıntıları isterken aşağıdaki parametreleri ekleyin:

  1. Otomatik Yer Tamamlama yanıtındaki yer kimliği
  2. Otomatik Yer Tamamlama isteğinde kullanılan oturum jetonu
  3. İhtiyacınız olan yer verisi alanlarını belirten fields parametresi

Hayır, yalnızca adres ve konum bilgisi gerekiyor

Coğrafi kodlama API'si, Yer Otomatik Tamamlama kullanımınızın performansına bağlı olarak, Yer Ayrıntıları'ndan daha uygun maliyetli bir seçenek olabilir. Her uygulamanın otomatik tamamlama verimliliği, kullanıcıların girdiği işlemlere, uygulamanın kullanıldığı yere ve performans optimizasyonu için 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 kaç karakter girdiğini analiz edin.

Kullanıcılarınız otomatik olarak ortalama dört veya daha az istekte Yer Otomatik Tamamlama tahminini mi seçiyor?

Evet

Yer Otomatik Tamamlama'yı oturum jetonları olmadan programatik olarak uygulayın ve seçilen yer tahmininde Geocoded API'yi çağırın.
Geocode API, istek başına 0,005 ABD doları karşılığında adresler ve enlem/boylam koordinatları yayınlar. Dört Yer Otomatik Tamamlama - İstek Başına isteğinde bulunmanın maliyeti 0,01132 ABD dolarıdır. Bu nedenle, dört isteğin toplam maliyetiyle birlikte seçilen yer tahmini hakkında bir Geocoded API çağrısının fiyatı 0,01632 ABD doları olur. Bu durumda, oturum başına 0,017 ABD doları tutarındaki otomatik tamamlama fiyatından düşük olur.1

Kullanıcılarınızın aradıkları tahmini daha az sayıda karakterle elde etmelerine 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ı, Yer Otomatik Tamamlama tahminini seçmeden önce gerçekleştirmeyi beklediğiniz ortalama istek sayısı, Oturum Başına fiyatlandırma maliyetini aştığından, Yer Otomatik Tamamlama uygulamanızda, hem Otomatik Yer Tamamlama istekleri hem de ilişkili Yer Ayrıntıları istekleri için, oturum başına toplam 0,017 ABD doları maliyet karşılığında bir oturum jetonu kullanılmalıdır.1

Widget uygulama
Oturum yönetimi otomatik olarak JavaScript, Android veya iOS widget'larına yerleştirilir. Buna, seçilen tahmindeki hem Yer Otomatik Tamamlama istekleri hem de Yer Ayrıntıları istekleri dahildir. Yalnızca Temel Veri alanları istediğinizden emin olmak için fields parametresini belirttiğinizden emin olun.

Programatik uygulama
Yer Otomatik Tamamlama isteklerinizle birlikte bir oturum jetonu kullanın. Seçilen tahmin hakkında Yer Ayrıntıları isterken aşağıdaki parametreleri ekleyin:

  1. Otomatik Yer Tamamlama yanıtındaki yer kimliği
  2. Otomatik Yer Tamamlama isteğinde kullanılan oturum jetonu
  3. Adres ve geometri gibi Temel Veriler alanlarını belirten fields parametresi

Otomatik Yer Tamamlama isteklerini ertelemeyi düşünün
Kullanıcı ilk üç veya dört karakteri girene kadar Otomatik Otomatik Tamamlama isteklerini erteleme gibi stratejiler uygulayarak uygulamanızın daha az istek göndermesini sağlayabilirsiniz. Örneğin, kullanıcı üçüncü karakteri yazdıktan sonra her karakter için Yer Otomatik Tamamlama isteklerinde bulunursa, kullanıcı yedi karakter yazıp bir coğrafi kodlama 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 ABD Doları Coğrafi Kodlama).1

Geciken istekler, ortalama programatik isteğinizin dört adetten daha az olmasına yol açıyorsa coğrafi kodlama API'si ile yüksek performanslı yer otomatik tamamlama yönergelerini uygulayabilirsiniz. Gecikmeli istekler, her yeni tuş vuruşuyla ilgili tahminleri görmeyi bekleyecek kullanıcı tarafından gecikme olarak algılanabilir.

Kullanıcılarınızın aradıkları tahmini daha az karakterle alabilmelerine yardımcı olmak için performansla ilgili en iyi uygulamalardan yararlanabilirsiniz.


  1. Burada listelenen maliyetler ABD doları cinsindendir. Tam fiyatlandırma bilgileri için lütfen Google Haritalar Platformu Faturalandırması sayfası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ı, konum ön yargısı ve (programatik uygulamalar için) dil tercihi ekleyin. Widget'larda dil tercihi gerekmez. Çünkü widget'lar, kullanıcının tarayıcısından veya mobil cihazından dil tercihlerini seçer.
  • Yer Otomatik Tamamlama'ya 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 almaya çalışmak için orijinal kullanıcı girişini yeniden kullanabilirsiniz:
    • Kullanıcının yalnızca adres bilgilerini girmesini bekliyorsanız Geocode 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 konum ağırlıklandırma kullanın.
    Geocode API'yi kullanmanın en iyi olduğu diğer senaryolar:
    • Çek Cumhuriyeti, Estonya ve Litvanya gibi alt kuruluş adreslerini otomatik tamamlama özelliğinin eksik olduğu ülkelerde alt kuruluş adresleri giren kullanıcılar. Örneğin, Çek adresi "Stroupežnického 3191/17, Praha", Yer Otomatik Tamamlama'da kısmi bir tahmin verir.
    • Kullanıcılar, New York City'de "23-30 29th St, Queens" gibi yol segmenti ön ekleri veya Hawai'i'deki Kauai adasında yer alan "47-380 Kamehameha Hwy, Kaneohe" gibi adresler giriyor.

Sorun giderme

Uygulamanızın çeşitli hatalarına yol açabilecek olsa da genellikle yapılandırma hataları (örneğin, yanlış API anahtarı kullanıldı veya API anahtarı yanlış yapılandırılmıştır) ya da kota hataları (uygulamanız kotasını aştı) ortaya çıkabilir. 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.