जगहों के सुझाव ऑटोकंप्लीट करने की सुविधा

यूरोपियन इकनॉमिक एरिया (ईईए) के डेवलपर

Places SDK for Android में ऑटोकंप्लीट सेवा, उपयोगकर्ता की खोज क्वेरी के जवाब में जगह के बारे में अनुमानित जानकारी दिखाती है. जब उपयोगकर्ता टाइप करता है, तो अपने-आप पूरे होने वाले सुझाव देने वाली सेवा, जगहों के सुझाव देती है. जैसे, कारोबार, पते, प्लस कोड, और लोकप्रिय जगहें.

अपने ऐप्लिकेशन में, अपने-आप भरने की सुविधा को इन तरीकों से जोड़ा जा सकता है:

ऑटोकंप्लीट विजेट जोड़ना

ऑटोकंप्लीट विजेट, खोज करने का एक डायलॉग बॉक्स होता है. इसमें ऑटोकंप्लीट की सुविधा पहले से मौजूद होती है. जब कोई उपयोगकर्ता खोज के लिए शब्द डालता है, तो विजेट उसे अनुमानित जगहों की एक सूची दिखाता है. इसमें से वह अपनी पसंद की जगह चुन सकता है. जब उपयोगकर्ता कोई विकल्प चुनता है, तो Place इंस्टेंस दिखता है. इसके बाद, आपका ऐप्लिकेशन इस इंस्टेंस का इस्तेमाल करके, चुनी गई जगह के बारे में जानकारी पा सकता है.

अपने ऐप्लिकेशन में अपने-आप पूरा होने वाला विजेट जोड़ने के लिए, आपके पास दो विकल्प हैं:

पहला विकल्प: AutocompleteSupportFragment को एम्बेड करना

अपने ऐप्लिकेशन में AutocompleteSupportFragment जोड़ने के लिए, यह तरीका अपनाएं:

  1. अपनी ऐक्टिविटी के एक्सएमएल लेआउट में कोई फ़्रैगमेंट जोड़ें.
  2. अपनी गतिविधि या फ़्रैगमेंट में कोई लिसनर जोड़ें.

किसी गतिविधि में AutocompleteSupportFragment जोड़ना

किसी गतिविधि में AutocompleteSupportFragment जोड़ने के लिए, किसी एक्सएमएल लेआउट में नया फ़्रैगमेंट जोड़ें. उदाहरण के लिए:

<fragment android:id="@+id/autocomplete_fragment"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
  />
  • डिफ़ॉल्ट रूप से, फ़्रैगमेंट में कोई बॉर्डर या बैकग्राउंड नहीं होता. विज़ुअल को एक जैसा दिखाने के लिए, फ़्रैगमेंट को किसी दूसरे लेआउट एलिमेंट में नेस्ट करें. जैसे, CardView.
  • अगर ऑटोकंप्लीट फ़्रैगमेंट का इस्तेमाल किया जा रहा है और आपको onActivityResult को बदलना है, तो आपको super.onActivityResult को कॉल करना होगा. ऐसा न करने पर, फ़्रैगमेंट ठीक से काम नहीं करेगा.

किसी गतिविधि में PlaceSelectionListener जोड़ना

PlaceSelectionListener, उपयोगकर्ता के चुने गए विकल्प के हिसाब से जगह की जानकारी दिखाता है. नीचे दिए गए कोड में, फ़्रैगमेंट का रेफ़रंस बनाने और अपने AutocompleteSupportFragment में लिसनर जोड़ने का तरीका दिखाया गया है:

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.DISPLAY_NAME))

    // Set up a PlaceSelectionListener to handle the response.
    autocompleteFragment.setOnPlaceSelectedListener(object : PlaceSelectionListener {
        override fun onPlaceSelected(place: Place) {
            binding.autocompleteResult.text = getString(
                R.string.place_selection,
                place.displayName,
                place.id,
                place.formattedAddress
            )
            Log.i(TAG, "Place: ${place.displayName}, ${place.id}")
        }

        override fun onError(status: Status) {
            binding.autocompleteResult.text = getString(R.string.an_error_occurred, status)
            Log.i(TAG, "An error occurred: $status")
        }
    })

      

Java

    // Initialize the AutocompleteSupportFragment.
    AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
            getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);

    // Specify the types of place data to return.
    assert autocompleteFragment != null;
    autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS));

    // Set up a PlaceSelectionListener to handle the response.
    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(@NonNull Place place) {
            binding.autocompleteResult.setText(
                    getString(
                            R.string.place_selection,
                            place.getDisplayName(),
                            place.getId(),
                            place.getFormattedAddress()
                    )
            );
            Log.i(TAG, "Place: " + place.getDisplayName() + ", " + place.getId());
        }


        @Override
        public void onError(@NonNull Status status) {
            binding.autocompleteResult.setText(getString(R.string.an_error_occurred, status));
            Log.e(TAG, "An error occurred: " + status);
        }
    });

      

दूसरा विकल्प: अपने-आप पूरा होने की सुविधा वाली गतिविधि को लॉन्च करने के लिए, इंटेंट का इस्तेमाल करना

अगर आपको अपने ऐप्लिकेशन में नेविगेशन के लिए किसी दूसरे फ़्लो का इस्तेमाल करना है (उदाहरण के लिए, खोज फ़ील्ड के बजाय किसी आइकॉन से अपने-आप पूरा होने की सुविधा को ट्रिगर करना है), तो आपका ऐप्लिकेशन इंटेंट का इस्तेमाल करके, अपने-आप पूरा होने की सुविधा को लॉन्च कर सकता है.

किसी इंटेंट का इस्तेमाल करके, अपने-आप पूरा होने वाला विजेट लॉन्च करने के लिए, यह तरीका अपनाएं:

  1. Autocomplete.IntentBuilder का इस्तेमाल करके, इंटेंट बनाएं. इसके लिए, Autocomplete मोड को पास करें.
  2. गतिविधि के नतीजे को लॉन्च करने वाले registerForActivityResult को तय करें. इसका इस्तेमाल, इंटेंट को लॉन्च करने और नतीजे में उपयोगकर्ता की चुनी गई जगह के अनुमान को मैनेज करने के लिए किया जा सकता है.

अपने-आप पूरा होने वाला इंटेंट बनाना

यहां दिए गए उदाहरण में, इंटेंट के तौर पर अपने-आप पूरा होने वाले विजेट को लॉन्च करने के लिए, Autocomplete.IntentBuilder का इस्तेमाल किया गया है:

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.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS)

    val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
        .setTypesFilter(listOf(PlaceTypes.ESTABLISHMENT))
        .build(this)

    startAutocomplete.launch(intent)

      

Java

    // Set the fields to specify which types of place data to
    // return after the user has made a selection.
    List<Place.Field> fields = Arrays.asList(Place.Field.ID, Place.Field.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS);

    // Start the autocomplete intent.
    Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
            .setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT))
            .build(this);
    startAutocomplete.launch(intent);

      

अपने-आप पूरा होने की सुविधा वाले विजेट को लॉन्च करने के लिए इंटेंट का इस्तेमाल करते समय, ओवरले या फ़ुल-स्क्रीन डिसप्ले मोड में से किसी एक को चुना जा सकता है. यहां दिए गए स्क्रीनशॉट में, हर डिसप्ले मोड दिखाया गया है:

ओवरले मोड में दिखने पर, अपने-आप पूरा होने वाला विजेट, कॉलिंग यूज़र इंटरफ़ेस (यूआई) पर दिखता है.
पहली इमेज: ओवरले मोड में अपने-आप पूरा होने वाला विजेट
फ़ुलस्क्रीन मोड में दिखने पर, अपने-आप पूरा होने वाला विजेट पूरी स्क्रीन पर दिखता है.
इमेज 2: फ़ुलस्क्रीन मोड में अपने-आप पूरा होने वाला विजेट

इंटेंट के नतीजे के लिए कॉलबैक रजिस्टर करना

जब उपयोगकर्ता कोई जगह चुन ले, तब सूचना पाने के लिए, registerForActivityResult() लॉन्चर तय करें. यह लॉन्चर, ऐक्टिविटी लॉन्च करता है. साथ ही, यहां दिए गए उदाहरण में दिखाए गए तरीके से नतीजे को भी मैनेज करता है. अगर उपयोगकर्ता ने कोई अनुमान चुना है, तो उसे नतीजे वाले ऑब्जेक्ट में मौजूद इंटेंट में डिलीवर किया जाएगा. Autocomplete.IntentBuilder ने इंटेंट बनाया है. इसलिए, Autocomplete.getPlaceFromIntent() वाला तरीका, इससे Place ऑब्जेक्ट को निकाल सकता है.

Kotlin

private val startAutocomplete =
    registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
        if (result.resultCode == RESULT_OK) {
            val intent = result.data
            if (intent != null) {
                val place = Autocomplete.getPlaceFromIntent(intent)
                binding.autocompleteResult.text = getString(
                    R.string.place_selection,
                    place.displayName,
                    place.id,
                    place.formattedAddress)
                Log.i(
                    TAG, "Place: ${place.displayName}, ${place.id}"
                )
            }
        } else if (result.resultCode == RESULT_CANCELED) {
            // The user canceled the operation.
            binding.autocompleteResult.setText(R.string.user_canceled_autocomplete)
            Log.i(TAG, "User canceled autocomplete")
        }
    }

      

Java

private final ActivityResultLauncher<Intent> startAutocomplete = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            if (result.getResultCode() == Activity.RESULT_OK) {
                Intent intent = result.getData();
                if (intent != null) {
                    Place place = Autocomplete.getPlaceFromIntent(intent);
                    binding.autocompleteResult.setText(
                            getString(
                                    R.string.place_selection,
                                    place.getDisplayName(),
                                    place.getId(),
                                    place.getFormattedAddress()
                            )
                    );
                    Log.i(TAG, "Place: " + place.getDisplayName() + ", " + place.getId());
                }
            } else if (result.getResultCode() == Activity.RESULT_CANCELED) {
                // The user canceled the operation.
                binding.autocompleteResult.setText(R.string.user_canceled_autocomplete);
                Log.i(TAG, "User canceled autocomplete");
            }
        });

      

प्रोग्राम के ज़रिए जगह के सुझाव पाना

ऑटोकंप्लीट विजेट से मिले यूज़र इंटरफ़ेस (यूआई) के विकल्प के तौर पर, कस्टम सर्च यूज़र इंटरफ़ेस (यूआई) बनाया जा सकता है. इसके लिए, आपके ऐप्लिकेशन को प्रोग्राम के हिसाब से जगह की जानकारी का अनुमान लगाना होगा. आपका ऐप्लिकेशन, ऑटोकंप्लीट एपीआई से जगह के नामों और/या पतों की सूची पा सकता है. इसके लिए, उसे PlacesClient.findAutocompletePredictions() को कॉल करना होगा. साथ ही, FindAutocompletePredictionsRequest ऑब्जेक्ट को इन पैरामीटर के साथ पास करना होगा:

  • ज़रूरी है: query स्ट्रिंग, जिसमें उपयोगकर्ता की ओर से टाइप किया गया टेक्स्ट शामिल हो.
  • सुझाया गया: A AutocompleteSessionToken, जो बिलिंग के लिए, उपयोगकर्ता की खोज के क्वेरी और चुनने के चरणों को अलग सेशन में ग्रुप करता है. सेशन तब शुरू होता है, जब उपयोगकर्ता कोई क्वेरी टाइप करना शुरू करता है. यह तब खत्म होता है, जब वह कोई जगह चुनता है.
  • सुझाया गया: यह एक RectangularBounds ऑब्जेक्ट है. इसमें अक्षांश और देशांतर की सीमाएं तय की जाती हैं, ताकि नतीजों को तय किए गए इलाके तक सीमित किया जा सके.
  • ज़रूरी नहीं: एक या एक से ज़्यादा दो अक्षरों वाले देश के कोड (आईएसओ 3166-1 ऐल्फ़ा-2). इनसे पता चलता है कि नतीजे किस देश या देशों के लिए सीमित होने चाहिए.
  • वैकल्पिक: TypeFilter, जिसका इस्तेमाल करके नतीजों को किसी खास जगह के टाइप तक सीमित किया जा सकता है. जगह की जानकारी के लिए, इन टाइप का इस्तेमाल किया जा सकता है:

    • TypeFilter.GEOCODE – यह सिर्फ़ जियोकोडिंग के नतीजे दिखाता है, कारोबारों के नहीं. इस अनुरोध का इस्तेमाल उन नतीजों को अलग-अलग करने के लिए करें जिनमें बताई गई जगह के बारे में साफ़ तौर पर जानकारी नहीं दी गई है.
    • TypeFilter.ADDRESS – इससे सिर्फ़ ऑटोकंप्लीट वाले ऐसे नतीजे मिलते हैं जिनमें सटीक पता दिया गया हो. इस टाइप का इस्तेमाल तब करें, जब आपको पता हो कि उपयोगकर्ता पूरा पता ढूंढ रहा है.
    • TypeFilter.ESTABLISHMENT – इससे सिर्फ़ कारोबारों की जानकारी मिलती है.
    • TypeFilter.REGIONS – इससे सिर्फ़ ऐसी जगहें दिखती हैं जो इनमें से किसी एक टाइप से मेल खाती हैं:

    • LOCALITY

    • SUBLOCALITY

    • POSTAL_CODE

    • COUNTRY

    • ADMINISTRATIVE_AREA_LEVEL_1

    • ADMINISTRATIVE_AREA_LEVEL_2

    • TypeFilter.CITIES – सिर्फ़ LOCALITY या ADMINISTRATIVE_AREA_LEVEL_3 से मेल खाने वाले नतीजे दिखाता है.

  • ज़रूरी नहीं: LatLng, अनुरोध की जगह की जानकारी देता है. setOrigin() पर कॉल करने पर, सेवा जवाब में खोज क्वेरी के अपने-आप पूरे होने के हर सुझाव के लिए, तय की गई जगह से दूरी (distanceMeters) मीटर में दिखाती है.

जगह के टाइप के बारे में जानकारी पाने के लिए, जगह के टाइप की गाइड देखें.

नीचे दिए गए उदाहरण में, 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.ESTABLISHMENT))
            .setSessionToken(token)
            .setQuery(query)
            .build()
    placesClient.findAutocompletePredictions(request)
        .addOnSuccessListener { response: FindAutocompletePredictionsResponse ->
            val builder = StringBuilder()
            for (prediction in response.autocompletePredictions) {
                builder.append(prediction.getPrimaryText(null).toString()).append("\n")
                Log.i(TAG, prediction.placeId)
                Log.i(TAG, prediction.getPrimaryText(null).toString())
            }
            binding.autocompleteResult.text = builder.toString()
        }.addOnFailureListener { exception: Exception? ->
            if (exception is ApiException) {
                Log.e(TAG, "Place not found: ${exception.statusCode}")
                binding.autocompleteResult.text = getString(R.string.place_not_found, exception.message)
            }
        }

      

Java

    // Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest,
    // and once again when the user makes a selection (for example when calling fetchPlace()).
    AutocompleteSessionToken token = AutocompleteSessionToken.newInstance();

    // Create a RectangularBounds object.
    RectangularBounds bounds = RectangularBounds.newInstance(
            new LatLng(-33.880490, 151.184363),
            new LatLng(-33.858754, 151.229596));
    // Use the builder to create a FindAutocompletePredictionsRequest.
    FindAutocompletePredictionsRequest request = FindAutocompletePredictionsRequest.builder()
            // Call either setLocationBias() OR setLocationRestriction().
            .setLocationBias(bounds)
            //.setLocationRestriction(bounds)
            .setOrigin(new LatLng(-33.8749937, 151.2041382))
            .setCountries("AU", "NZ")
            .setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT))
            .setSessionToken(token)
            .setQuery(query)
            .build();

    placesClient.findAutocompletePredictions(request).addOnSuccessListener((response) -> {
        StringBuilder builder = new StringBuilder();
        for (AutocompletePrediction prediction : response.getAutocompletePredictions()) {
            builder.append(prediction.getPrimaryText(null).toString()).append("\n");
            Log.i(TAG, prediction.getPlaceId());
            Log.i(TAG, prediction.getPrimaryText(null).toString());
        }
        binding.autocompleteResult.setText(builder.toString());
    }).addOnFailureListener((exception) -> {
        if (exception instanceof ApiException apiException) {
            Log.e(TAG, "Place not found: " + apiException.getStatusCode());
            binding.autocompleteResult.setText(getString(R.string.place_not_found, apiException.getMessage()));
        }
    });

      

एपीआई, Task में FindAutocompletePredictionsResponse दिखाता है. FindAutocompletePredictionsResponse में, अनुमानित जगहों को दिखाने वाले AutocompletePrediction ऑब्जेक्ट की सूची होती है. अगर क्वेरी और फ़िल्टर करने की शर्तों से मेल खाने वाली कोई जगह नहीं है, तो सूची खाली हो सकती है.

अनुमानित हर जगह के लिए, जगह की जानकारी पाने के लिए यहां दिए गए तरीकों का इस्तेमाल किया जा सकता है:

  • getFullText(CharacterStyle) किसी जगह की जानकारी का पूरा टेक्स्ट दिखाता है. यह प्राइमरी और सेकंडरी टेक्स्ट का कॉम्बिनेशन है. उदाहरण: "आइफ़िल टावर, ऐवन्यू ऐनाटोल फ़्रांस, पेरिस, फ़्रांस". इसके अलावा, इस तरीके से आपको अपनी पसंद की स्टाइल में, ब्यौरे के उन सेक्शन को हाइलाइट करने की सुविधा मिलती है जो खोज से मेल खाते हैं. इसके लिए, CharacterStyle का इस्तेमाल करें. CharacterStyle पैरामीटर ज़रूरी नहीं है. अगर आपको हाइलाइट करने की सुविधा की ज़रूरत नहीं है, तो इसे null पर सेट करें.
  • getPrimaryText(CharacterStyle) किसी जगह के बारे में बताने वाला मुख्य टेक्स्ट दिखाता है. यह आम तौर पर जगह का नाम होता है. उदाहरण: "कुतुब मीनार" और "123 पिट स्ट्रीट".
  • getSecondaryText(CharacterStyle) किसी जगह की जानकारी का सहायक टेक्स्ट दिखाता है. यह उदाहरण के लिए, ऑटोकंप्लीट के सुझाव दिखाते समय दूसरी लाइन के तौर पर काम आता है. उदाहरण: "Avenue Anatole France, Paris, France" और "Sydney, New South Wales".
  • getPlaceId() अनुमानित जगह का आईडी दिखाता है. जगह का आईडी, टेक्स्ट वाला एक आइडेंटिफ़ायर होता है. यह किसी जगह की यूनीक पहचान करता है. इसका इस्तेमाल करके, बाद में Place ऑब्जेक्ट को फिर से पाया जा सकता है. Places SDK for Android में जगह के आईडी के बारे में ज़्यादा जानने के लिए, जगह की जानकारी देखें. जगह के आईडी के बारे में सामान्य जानकारी के लिए, जगह के आईडी की खास जानकारी देखें.
  • getPlaceTypes() इस जगह से जुड़े टाइप की सूची दिखाता है.
  • getDistanceMeters() इस जगह और अनुरोध में बताए गए मूल स्थान के बीच की सीधी दूरी को मीटर में दिखाता है.

सेशन टोकन

सेशन टोकन, उपयोगकर्ता के ऑटोकंप्लीट खोज के क्वेरी और चुनने के चरणों को बिलिंग के लिए अलग-अलग सेशन में ग्रुप करते हैं. सेशन तब शुरू होता है, जब उपयोगकर्ता कोई क्वेरी टाइप करना शुरू करता है. यह तब खत्म होता है, जब वह कोई जगह चुन लेता है. हर सेशन में, एक से ज़्यादा क्वेरी हो सकती हैं. इसके बाद, एक जगह चुनी जाती है. सेशन खत्म होने के बाद, टोकन मान्य नहीं रहता. आपके ऐप्लिकेशन को हर सेशन के लिए नया टोकन जनरेट करना होगा. हमारा सुझाव है कि प्रोग्राम के हिसाब से पूरे होने वाले सभी ऑटोमैटिक सेशन के लिए, सेशन टोकन का इस्तेमाल करें. जब कोई फ़्रैगमेंट एम्बेड किया जाता है या किसी इंटेंट का इस्तेमाल करके ऑटोमैटिक सुविधा लॉन्च की जाती है, तो एपीआई इसे अपने-आप मैनेज करता है.

Places SDK for Android, हर सेशन की पहचान करने के लिए AutocompleteSessionToken का इस्तेमाल करता है. आपका ऐप्लिकेशन, हर नए सेशन की शुरुआत में एक नया सेशन टोकन पास करे. इसके बाद, fetchPlace() को किए गए अगले कॉल में, उसी टोकन को Place ID के साथ पास करे. इससे, उपयोगकर्ता की चुनी गई जगह की जानकारी वापस मिल जाएगी.

सेशन टोकन के बारे में ज़्यादा जानें.

ऑटोकंप्लीट की सुविधा से मिलने वाले नतीजों को सीमित करना

ऑटोकंप्लीट के नतीजों को किसी खास भौगोलिक क्षेत्र तक सीमित किया जा सकता है. इसके अलावा, नतीजों को एक या उससे ज़्यादा जगहों के टाइप या ज़्यादा से ज़्यादा पांच देशों के हिसाब से फ़िल्टर किया जा सकता है. इन पाबंदियों को, ऑटोकंप्लीट सुविधा, AutocompleteSupportFragment, और प्रोग्राम के हिसाब से ऑटोकंप्लीट एपीआई पर लागू किया जा सकता है.

नतीजों को सीमित करने के लिए, यह तरीका अपनाएं:

  • तय किए गए इलाके में खोज के नतीजों को प्राथमिकता देने के लिए, setLocationBias() को कॉल करें (हालांकि, तय किए गए इलाके के बाहर से भी कुछ नतीजे मिल सकते हैं).
  • तय किए गए क्षेत्र में सिर्फ़ नतीजे दिखाने के लिए, setLocationRestriction() कॉल करें. इससे, तय किए गए क्षेत्र में मौजूद नतीजे ही दिखेंगे.
  • सिर्फ़ किसी खास तरह की जगह के हिसाब से नतीजे पाने के लिए, setTypesFilter() को कॉल करें. उदाहरण के लिए, TypeFilter.ADDRESS को तय करने पर, सिर्फ़ सटीक पते वाले नतीजे दिखेंगे.
  • सिर्फ़ पांच देशों के नतीजे पाने के लिए, setCountries() को कॉल करें. देशों के नाम, दो वर्णों वाले देश के कोड के तौर पर पास किए जाने चाहिए. यह कोड, ISO 3166-1 ऐल्फ़ा-2 के साथ काम करने वाला होना चाहिए.

किसी खास इलाके के हिसाब से नतीजे दिखाना

अपने-आप पूरे होने वाले नतीजों को किसी खास भौगोलिक इलाके के हिसाब से दिखाने के लिए, setLocationBias() को कॉल करें. इसके लिए, RectangularBounds पास करें. यहां दिए गए कोड के उदाहरण में, फ़्रैगमेंट इंस्टेंस पर setLocationBias() को कॉल करने का तरीका दिखाया गया है, ताकि अपने-आप पूरे होने वाले सुझावों को सिडनी, ऑस्ट्रेलिया के किसी इलाके के हिसाब से दिखाया जा सके.

Kotlin

        autocompleteFragment.setLocationBias(bounds)

      

Java

        autocompleteFragment.setLocationBias(
                RectangularBounds.newInstance(
                        new LatLng(-33.880490, 151.184363),
                        new LatLng(-33.858754, 151.229596)
                )
        );

      

नतीजों को किसी खास इलाके तक सीमित करना

अपने-आप पूरा होने की सुविधा के नतीजों को किसी खास भौगोलिक इलाके तक सीमित करने के लिए, setLocationRestriction() को कॉल करें. इसके लिए, RectangularBounds पास करें. यहां दिए गए कोड के उदाहरण में, फ़्रैगमेंट इंस्टेंस पर setLocationRestriction() को कॉल करने का तरीका दिखाया गया है. इससे, अपने-आप पूरे होने वाले सुझावों को सिडनी, ऑस्ट्रेलिया के किसी इलाके के हिसाब से दिखाया जा सकता है.

Kotlin

        autocompleteFragment.setLocationRestriction(bounds)

      

Java

        autocompleteFragment.setLocationRestriction(
                RectangularBounds.newInstance(
                        new LatLng(-33.880490, 151.184363),
                        new LatLng(-33.858754, 151.229596)
                )
        );

      

ध्यान दें: यह पाबंदी सिर्फ़ पूरे रास्तों पर लागू होती है. रेक्टैंगुलर बाउंड्री से बाहर मौजूद सिंथेटिक नतीजे, उस रास्ते के आधार पर दिखाए जा सकते हैं जो पाबंदी वाली जगह से ओवरलैप होता है.

जगह के टाइप या टाइप कलेक्शन के हिसाब से नतीजे फ़िल्टर करना

अपने-आप पूरा होने वाले अनुरोध से मिले नतीजों को सीमित किया जा सकता है, ताकि वे सिर्फ़ किसी खास तरह की जगह के बारे में जानकारी दिखाएं. जगह के टाइप पेज पर मौजूद टेबल 1, 2, और 3 में दिए गए जगह के टाइप या टाइप कलेक्शन का इस्तेमाल करके, फ़िल्टर तय करें. अगर कोई वैल्यू नहीं दी जाती है, तो सभी टाइप दिखाए जाते हैं.

अपने-आप पूरा होने की सुविधा के नतीजों को फ़िल्टर करने के लिए, फ़िल्टर सेट करने के लिए setTypesFilter() को कॉल करें.

टाइप या टाइप कलेक्शन फ़िल्टर तय करने के लिए:

  • setTypesFilter() को कॉल करें और जगह के टाइप पर दिखाई गई टेबल 1 और टेबल 2 से ज़्यादा से ज़्यादा पांच type वैल्यू तय करें. टाइप की वैल्यू, PlaceTypes में मौजूद कॉन्स्टेंट से तय होती हैं.

  • setTypesFilter() को कॉल करें और जगह के टाइप पर दिखाई गई टेबल 3 में से, टाइप कलेक्शन चुनें. कलेक्शन की वैल्यू, PlaceTypes में मौजूद कॉन्स्टेंट से तय होती हैं.

    अनुरोध में, टेबल 3 में दिए गए टाइप में से सिर्फ़ एक टाइप का इस्तेमाल किया जा सकता है. अगर आपने टेबल 3 से कोई वैल्यू तय की है, तो टेबल 1 या टेबल 2 से कोई वैल्यू तय नहीं की जा सकती. ऐसा करने पर, गड़बड़ी होती है.

यहां दिए गए कोड के उदाहरण में, AutocompleteSupportFragment पर setTypesFilter() को कॉल किया गया है. साथ ही, टाइप की कई वैल्यू तय की गई हैं.

Kotlin

    autocompleteFragment.setTypesFilter(listOf("landmark", "restaurant", "store"))

      

Java

    autocompleteFragment.setTypesFilter(List.of("landmark", "restaurant", "store"));

      

कोड के इस उदाहरण में, टाइप कलेक्शन तय करके, सिर्फ़ सटीक पते वाले नतीजे दिखाने के लिए, AutocompleteSupportFragment पर setTypesFilter() को कॉल करने का तरीका दिखाया गया है.

Kotlin

    autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))

      

Java

    autocompleteFragment.setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT));

      

कोड के इस उदाहरण में, टाइप कलेक्शन तय करके, सिर्फ़ सटीक पते वाले नतीजे दिखाने के लिए, IntentBuilder पर setTypesFilter() को कॉल करने का तरीका दिखाया गया है.

Kotlin

    val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
        .setTypesFilter(listOf(PlaceTypes.ESTABLISHMENT))
        .build(this)

      

Java

    Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
            .setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT))
            .build(this);

      

देश के हिसाब से नतीजे फ़िल्टर करना

अपने-आप पूरा होने की सुविधा के नतीजों को ज़्यादा से ज़्यादा पांच देशों के हिसाब से फ़िल्टर करने के लिए, setCountries() को कॉल करें. इससे देश का कोड सेट हो जाएगा. इसके बाद, फ़िल्टर को किसी फ़्रैगमेंट या इंटेंट में पास करें. देशों के नाम, दो वर्णों वाले देश के कोड के तौर पर पास किए जाने चाहिए. यह कोड, आईएसओ 3166-1 ऐल्फ़ा-2 स्टैंडर्ड के मुताबिक होना चाहिए.

यहां दिए गए कोड के उदाहरण में, AutocompleteSupportFragment पर setCountries() को कॉल करने का तरीका दिखाया गया है. इससे एक ऐसा फ़िल्टर सेट होता है जो सिर्फ़ चुने गए देशों के नतीजे दिखाता है.

Kotlin

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

      

Java

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

      

इस्तेमाल करने की सीमा

Places API और Places SDK for Android के इस्तेमाल पर, अब हर दिन (QPD) ज़्यादा से ज़्यादा अनुरोध करने की सीमा लागू नहीं होगी. हालांकि, इस्तेमाल करने की ये सीमाएं अब भी लागू होंगी:

  • रेट लिमिट 6,000 क्यूपीएम (हर मिनट में किए जाने वाले अनुरोध) है. इसकी गिनती, एक ही प्रोजेक्ट के क्रेडेंशियल का इस्तेमाल करने वाले सभी ऐप्लिकेशन के लिए, क्लाइंट-साइड और सर्वर-साइड के अनुरोधों को जोड़कर की जाती है.

अपने ऐप्लिकेशन में एट्रिब्यूशन दिखाना

  • अगर आपका ऐप्लिकेशन, ऑटोकंप्लीट सेवा का इस्तेमाल प्रोग्राम के हिसाब से करता है, तो आपके यूज़र इंटरफ़ेस (यूआई) में, 'Powered by Google' एट्रिब्यूशन दिखना चाहिए. इसके अलावा, यह Google के ब्रैंड वाले मैप में भी दिख सकता है.
  • अगर आपका ऐप्लिकेशन, अपने-आप पूरा होने वाले विजेट का इस्तेमाल करता है, तो आपको कुछ और करने की ज़रूरत नहीं है. एट्रिब्यूशन की ज़रूरी जानकारी डिफ़ॉल्ट रूप से दिखती है.
  • अगर जगह की आईडी से जगह की जानकारी पाने के बाद, जगह की अतिरिक्त जानकारी को वापस लाया जाता है और दिखाया जाता है, तो आपको तीसरे पक्ष के एट्रिब्यूशन भी दिखाने होंगे.

ज़्यादा जानकारी के लिए, एट्रिब्यूशन के बारे में दस्तावेज़ देखें.

जगह के शुरुआती अक्षर लिखने पर पूरा नाम सुझाने की सुविधा (लेगसी) के लिए ऑप्टिमाइज़ेशन

इस सेक्शन में, Place Autocomplete (लेगसी) सेवा का ज़्यादा से ज़्यादा फ़ायदा पाने के लिए, सबसे सही तरीकों के बारे में बताया गया है.

यहां कुछ सामान्य दिशा-निर्देश दिए गए हैं:

लागत को ऑप्टिमाइज़ करने के सबसे सही तरीके

लागत ऑप्टिमाइज़ेशन की बुनियादी सेटिंग

Place Autocomplete (लेगसी) सेवा का इस्तेमाल करने की लागत को कम करने के लिए, Place Details (लेगसी) और Place Autocomplete (लेगसी) विजेट में फ़ील्ड मास्क का इस्तेमाल करें. इससे आपको सिर्फ़ ज़रूरी जगह की जानकारी वाले फ़ील्ड मिलेंगे.

लागत को ऑप्टिमाइज़ करने की बेहतर सुविधा

हर अनुरोध के लिए कीमत को ऐक्सेस करने के लिए, Place Autocomplete (लेगसी) को प्रोग्राम के हिसाब से लागू करें. साथ ही, Place Details (लेगसी) के बजाय, चुनी गई जगह के बारे में Geocoding API के नतीजे पाने का अनुरोध करें. अगर ये दोनों शर्तें पूरी होती हैं, तो हर अनुरोध के हिसाब से तय की गई कीमत, हर सेशन (सेशन के आधार पर) के हिसाब से तय की गई कीमत से ज़्यादा किफ़ायती होती है:

  • अगर आपको सिर्फ़ उपयोगकर्ता की चुनी गई जगह का अक्षांश/देशांतर या पता चाहिए, तो Geocoding API, Place Details (लेगसी) API के कॉल की तुलना में कम समय में यह जानकारी उपलब्ध कराता है.
  • अगर उपयोगकर्ता, Place Autocomplete (लेगसी) के औसतन चार या इससे कम सुझावों के अनुरोधों में से किसी एक को चुनते हैं, तो अनुरोध के हिसाब से तय की गई कीमत, सेशन के हिसाब से तय की गई कीमत से ज़्यादा किफ़ायती हो सकती है.
अपनी ज़रूरतों के हिसाब से Place Autocomplete (लेगसी) लागू करने का तरीका चुनने के लिए, उस टैब को चुनें जो नीचे दिए गए सवाल के आपके जवाब से मेल खाता हो.

क्या आपके ऐप्लिकेशन को चुनी गई जगह के पते और अक्षांश/देशांतर के अलावा किसी और जानकारी की ज़रूरत है?

हां, ज़्यादा जानकारी चाहिए

सेशन पर आधारित Place Autocomplete (लेगसी) सुविधा का इस्तेमाल, Place Details (लेगसी) के साथ करें.
आपके ऐप्लिकेशन को जगह की जानकारी (लेगसी) की ज़रूरत होती है. जैसे, जगह का नाम, कारोबार की स्थिति या खुले होने का समय. इसलिए, जगह के नाम अपने-आप पूरे होने की सुविधा (लेगसी) को लागू करते समय, आपको सेशन टोकन का इस्तेमाल करना चाहिए. यह टोकन, प्रोग्राम के हिसाब से या JavaScript, Android या iOS विजेट में बनाया गया होना चाहिए. हर सेशन के लिए, साथ ही जगहों के डेटा के एसकेयू लागू होते हैं. यह इस बात पर निर्भर करता है कि आपने जगह के डेटा के किन फ़ील्ड का अनुरोध किया है.1

विजेट लागू करना
सेशन मैनेजमेंट की सुविधा, JavaScript, Android या iOS विजेट में अपने-आप शामिल होती है. इसमें, चुने गए अनुमान के लिए Place Autocomplete (लेगसी) और Place Details (लेगसी), दोनों तरह के अनुरोध शामिल होते हैं. fields पैरामीटर की वैल्यू तय करना न भूलें. इससे यह पक्का किया जा सकेगा कि आपने सिर्फ़ उन जगह के डेटा फ़ील्ड का अनुरोध किया है जिनकी आपको ज़रूरत है.

प्रोग्राम के हिसाब से लागू करना
जगह के शुरुआती अक्षर लिखने पर पूरा नाम सुझाने की सुविधा (लेगसी) के अनुरोधों के साथ, सेशन टोकन का इस्तेमाल करें. चुने गए अनुमान के बारे में जगह की जानकारी (लेगसी) का अनुरोध करते समय, ये पैरामीटर शामिल करें:

  1. जगह के शुरुआती अक्षर लिखने पर पूरा नाम सुझाने की सुविधा (लेगसी) के जवाब से मिला जगह का आईडी
  2. Place Autocomplete (लेगसी) के अनुरोध में इस्तेमाल किया गया सेशन टोकन
  3. fields पैरामीटर, जिसमें आपको ज़रूरी जगह की जानकारी वाले डेटा फ़ील्ड की जानकारी मिलती है

नहीं, सिर्फ़ पता और जगह की जानकारी चाहिए

आपके ऐप्लिकेशन के लिए, Geocoding API, Place Details (लेगसी) की तुलना में ज़्यादा किफ़ायती विकल्प हो सकता है. यह इस बात पर निर्भर करता है कि Place Autocomplete (लेगसी) का इस्तेमाल करने पर, आपके ऐप्लिकेशन की परफ़ॉर्मेंस कैसी है. हर ऐप्लिकेशन के लिए, जगह की जानकारी अपने-आप भरने की सुविधा (लेगसी) की परफ़ॉर्मेंस अलग-अलग होती है. यह इस बात पर निर्भर करती है कि उपयोगकर्ता क्या डाल रहे हैं, ऐप्लिकेशन का इस्तेमाल कहां किया जा रहा है, और परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के सबसे सही तरीके लागू किए गए हैं या नहीं.

इस सवाल का जवाब देने के लिए, यह विश्लेषण करें कि कोई उपयोगकर्ता आपके ऐप्लिकेशन में, Place Autocomplete (लेगसी) सुविधा के सुझाव को चुनने से पहले औसतन कितने वर्ण टाइप करता है.

क्या आपके उपयोगकर्ता, औसतन चार या इससे कम अनुरोधों में Place Autocomplete (लेगसी) की सुविधा से मिले सुझाव को चुनते हैं?

हां

सेशन टोकन के बिना, प्रोग्राम के हिसाब से Place Autocomplete (लेगसी) को लागू करें. साथ ही, चुनी गई जगह के अनुमान पर Geocoding API को कॉल करें.
Geocoding API, पते और अक्षांश/देशांतर के निर्देशांक उपलब्ध कराता है. चुनी गई जगह के बारे में, जगह के नाम अपने-आप भरने की सुविधा (लेगसी) - हर अनुरोध के चार अनुरोध और Geocoding API कॉल करने पर, हर सेशन के लिए जगह के नाम अपने-आप भरने की सुविधा (लेगसी) की लागत से कम खर्च होता है.1

परफ़ॉर्मेंस के सबसे सही तरीकों का इस्तेमाल करें, ताकि आपके उपयोगकर्ताओं को कम वर्णों में भी वह अनुमान मिल सके जिसकी वे तलाश कर रहे हैं.

नहीं

सेशन पर आधारित Place Autocomplete (लेगसी) सुविधा का इस्तेमाल, Place Details (लेगसी) के साथ करें.
किसी उपयोगकर्ता के Place Autocomplete (लेगसी) की सुविधा से मिले सुझाव को चुनने से पहले, आपको औसतन जितने अनुरोध करने पड़ते हैं उनकी कीमत, हर सेशन के हिसाब से तय की गई कीमत से ज़्यादा है. इसलिए, Place Autocomplete (लेगसी) की सुविधा को लागू करते समय, आपको Place Autocomplete (लेगसी) के अनुरोधों और उससे जुड़े Place Details (लेगसी) के अनुरोध के लिए, हर सेशन में एक सेशन टोकन का इस्तेमाल करना चाहिए.1

विजेट लागू करना
सेशन मैनेजमेंट की सुविधा, JavaScript, Android या iOS विजेट में अपने-आप शामिल होती है. इसमें, चुने गए अनुमान के लिए Place Autocomplete (लेगसी) और Place Details (लेगसी), दोनों तरह के अनुरोध शामिल होते हैं. fields पैरामीटर को सेट करना न भूलें, ताकि यह पक्का किया जा सके कि आपने सिर्फ़ बुनियादी डेटा फ़ील्ड का अनुरोध किया है.

प्रोग्राम के हिसाब से लागू करना
जगह के शुरुआती अक्षर लिखने पर पूरा नाम सुझाने की सुविधा (लेगसी) के अनुरोधों के साथ, सेशन टोकन का इस्तेमाल करें. चुने गए अनुमान के बारे में जगह की जानकारी (लेगसी) का अनुरोध करते समय, ये पैरामीटर शामिल करें:

  1. जगह के शुरुआती अक्षर लिखने पर पूरा नाम सुझाने की सुविधा (लेगसी) के जवाब से मिला जगह का आईडी
  2. Place Autocomplete (लेगसी) के अनुरोध में इस्तेमाल किया गया सेशन टोकन
  3. fields पैरामीटर, बुनियादी डेटा फ़ील्ड के बारे में बताता है. जैसे, पता और ज्यामिति

Place Autocomplete (लेगसी) के अनुरोधों को कुछ समय के लिए रोकें
Place Autocomplete (लेगसी) के अनुरोध को तब तक के लिए रोका जा सकता है, जब तक उपयोगकर्ता पहले तीन या चार वर्ण टाइप न कर ले. इससे आपका ऐप्लिकेशन कम अनुरोध करेगा. उदाहरण के लिए, अगर उपयोगकर्ता ने तीन वर्ण टाइप कर लिए हैं, तो इसके बाद हर वर्ण के लिए Place Autocomplete (लेगसी) अनुरोध करना. इसका मतलब है कि अगर उपयोगकर्ता सात वर्ण टाइप करता है और फिर किसी ऐसे सुझाव को चुनता है जिसके लिए आपको Geocoding API का एक अनुरोध करना है, तो कुल लागत, Place Autocomplete (लेगसी) के चार अनुरोध + Geocoding के लिए होगी.1

अगर अनुरोधों को कुछ समय के लिए रोकने से, आपके प्रोग्राम के हिसाब से किए गए अनुरोधों की औसत संख्या चार से कम हो जाती है, तो Geocoding API के साथ Place Autocomplete (लेगसी) की परफ़ॉर्मेंस को बेहतर बनाने से जुड़े दिशा-निर्देशों का पालन करें. ध्यान दें कि अनुरोधों में देरी होने पर, उपयोगकर्ता को ऐसा लग सकता है कि खोज के नतीजे दिखने में समय लग रहा है. ऐसा इसलिए, क्योंकि वह हर नए कीस्ट्रोक पर अनुमानित नतीजे देखने की उम्मीद कर रहा होता है.

परफ़ॉर्मेंस के सबसे सही तरीकों का इस्तेमाल करें, ताकि आपके उपयोगकर्ताओं को कम वर्णों में वह अनुमान मिल सके जिसकी वे तलाश कर रहे हैं.


  1. लागत के बारे में जानने के लिए, Google Maps Platform के प्रॉडक्ट के लिए कीमतें देखें.

परफ़ॉर्मेंस के सबसे सही तरीके

यहां दिए गए दिशा-निर्देशों में, Place Autocomplete (लेगसी) की परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के तरीके बताए गए हैं:

  • देश के हिसाब से पाबंदियां, जगह के हिसाब से नतीजे दिखाने की सुविधा, और (प्रोग्राम के हिसाब से लागू करने के लिए) भाषा की प्राथमिकता को Place Autocomplete (Legacy) लागू करने की सुविधा में जोड़ें. विजेट के लिए भाषा की प्राथमिकता सेट करने की ज़रूरत नहीं होती, क्योंकि वे उपयोगकर्ता के ब्राउज़र या मोबाइल डिवाइस से भाषा की प्राथमिकताएं चुनते हैं.
  • अगर जगह के नाम अपने-आप भरने की सुविधा (लेगसी) के साथ मैप मौजूद है, तो मैप व्यूपोर्ट के हिसाब से जगह की जानकारी को प्राथमिकता दी जा सकती है.
  • जब कोई उपयोगकर्ता, जगह के नाम अपने-आप भरने की सुविधा (लेगसी) के तहत मिले सुझावों में से किसी एक को नहीं चुनता है, तो आम तौर पर ऐसा इसलिए होता है, क्योंकि इनमें से कोई भी सुझाव, उपयोगकर्ता के हिसाब से सही नहीं होता. ऐसे में, ज़्यादा काम के नतीजे पाने के लिए, उपयोगकर्ता के ओरिजनल इनपुट का फिर से इस्तेमाल किया जा सकता है:
    • अगर आपको लगता है कि उपयोगकर्ता सिर्फ़ पते की जानकारी डालेगा, तो Geocoding API को कॉल करने के लिए, उपयोगकर्ता के ओरिजनल इनपुट का फिर से इस्तेमाल करें.
    • अगर आपको लगता है कि उपयोगकर्ता किसी जगह का नाम या पता डालकर क्वेरी करेगा, तो जगह ढूंढने का अनुरोध (लेगसी) का इस्तेमाल करें. अगर आपको नतीजे सिर्फ़ किसी खास इलाके में चाहिए, तो जगह के हिसाब से नतीजे दिखाने की सुविधा का इस्तेमाल करें.
    Geocoding API का इस्तेमाल करने के लिए, यहां कुछ और उदाहरण दिए गए हैं:
    • ऐसे उपयोगकर्ता जो सबप्रीमाइज़ के पते डालते हैं. जैसे, किसी बिल्डिंग में मौजूद खास यूनिट या अपार्टमेंट के पते. उदाहरण के लिए, चेक गणराज्य के पते "Stroupežnického 3191/17, Praha" के लिए, Place Autocomplete (लेगसी) में आंशिक सुझाव मिलता है.
    • ऐसे उपयोगकर्ता जो न्यूयॉर्क शहर में "23-30 29th St, Queens" या हवाई के काउआई द्वीप पर "47-380 Kamehameha Hwy, Kaneohe" जैसे सड़क-सेगमेंट के प्रीफ़िक्स वाले पते डालते हैं.

समस्या का हल

हालांकि, कई तरह की गड़बड़ियां हो सकती हैं. आपके ऐप्लिकेशन में होने वाली ज़्यादातर गड़बड़ियां, कॉन्फ़िगरेशन से जुड़ी गड़बड़ियों की वजह से होती हैं. उदाहरण के लिए, गलत एपीआई पासकोड का इस्तेमाल किया गया या एपीआई पासकोड को गलत तरीके से कॉन्फ़िगर किया गया. इसके अलावा, कोटा से जुड़ी गड़बड़ियों की वजह से भी गड़बड़ियां हो सकती हैं. जैसे, आपके ऐप्लिकेशन ने अपना कोटा पार कर लिया है. कोटा के बारे में ज़्यादा जानकारी के लिए, इस्तेमाल की सीमाएं देखें.

ऑटोकंप्लीट कंट्रोल का इस्तेमाल करते समय होने वाली गड़बड़ियों को onActivityResult() कॉलबैक में दिखाया जाता है. नतीजे का स्टेटस मैसेज पाने के लिए, Autocomplete.getStatus() को कॉल करें.