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

प्लैटफ़ॉर्म चुनें: Android iOS JavaScript वेब सेवा

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

ऐप्लिकेशन में ऑटोकंप्लीट की सुविधा को इन तरीकों से जोड़ा जा सकता है:

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

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

आपके ऐप्लिकेशन में ऑटोकंप्लीट विजेट जोड़ने के दो विकल्प हैं:

पहला विकल्प: ऑटोकंप्लीट सपोर्ट फ़्रैगमेंट एम्बेड करना

अपने ऐप्लिकेशन में 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"
  />
  • डिफ़ॉल्ट रूप से, फ़्रैगमेंट में कोई बॉर्डर या बैकग्राउंड नहीं होता. एक जैसा विज़ुअल दिखाने के लिए, फ़्रैगमेंट को कार्डव्यू जैसे किसी दूसरे लेआउट एलिमेंट में नेस्ट करें.
  • अगर अपने-आप पूरा होने वाले फ़्रैगमेंट का इस्तेमाल किया जा रहा है और आपको onActivityResult को बदलना है, तो आपको super.onActivityResult को कॉल करना होगा. ऐसा न होने पर, फ़्रैगमेंट ठीक से काम नहीं करेगा.

किसी गतिविधि में PlacesSelectionListen जोड़ें

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

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")
        }
    })

      

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

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

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

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

ऑटोकंप्लीट इंटेंट बनाना

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

Java



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

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

      

Kotlin



    // Set the fields to specify which types of place data to
    // return after the user has made a selection.
    val fields = listOf(Place.Field.ID, Place.Field.NAME)

    // Start the autocomplete intent.
    val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
        .build(this)
    startAutocomplete.launch(intent)

      

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

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

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

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

Java


private final ActivityResultLauncher<Intent> startAutocomplete = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            if (result.getResultCode() == Activity.RESULT_OK) {
                Intent intent = result.getData();
                if (intent != null) {
                    Place place = Autocomplete.getPlaceFromIntent(intent);
                    Log.i(TAG, "Place: ${place.getName()}, ${place.getId()}");
                }
            } else if (result.getResultCode() == Activity.RESULT_CANCELED) {
                // The user canceled the operation.
                Log.i(TAG, "User canceled autocomplete");
            }
        });

      

Kotlin


private val startAutocomplete =
    registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
        if (result.resultCode == Activity.RESULT_OK) {
            val intent = result.data
            if (intent != null) {
                val place = Autocomplete.getPlaceFromIntent(intent)
                Log.i(
                    TAG, "Place: ${place.name}, ${place.id}"
                )
            }
        } else if (result.resultCode == Activity.RESULT_CANCELED) {
            // The user canceled the operation.
            Log.i(TAG, "User canceled autocomplete")
        }
    }

      

प्रोग्राम के हिसाब से, जगह के लिए अनुमान पाना

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

  • ज़रूरी: query स्ट्रिंग, जिसमें उपयोगकर्ता का टाइप किया गया टेक्स्ट होता है.
  • इसका सुझाव दिया जाता है: A AutocompleteSessionToken, जो उपयोगकर्ता की खोज की क्वेरी और चुने जाने के चरणों को बिलिंग के मकसद से, अलग-अलग सेशन में ग्रुप करता है. सेशन तब शुरू होता है, जब उपयोगकर्ता कोई क्वेरी टाइप करना शुरू करता है और कोई जगह चुनते ही खत्म हो जाता है.
  • इसका सुझाव दिया जाता है: एक RectangularBounds ऑब्जेक्ट, जो अक्षांश और देशांतर की सीमा के बारे में बताता है. यह ऑब्जेक्ट तय किए गए इलाके तक सीमित नतीजे दिखाता है.
  • ज़रूरी नहीं: एक या दो से ज़्यादा अक्षरों वाला देश कोड (ISO 3166-1 Alpha-2), जो उस देश या उन देशों की जानकारी देते हैं जहां नतीजों पर पाबंदी लगाई जानी चाहिए.
  • ज़रूरी नहीं: A 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() को पूरा कॉल करने की जानकारी दी गई है.

Java


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

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

    placesClient.findAutocompletePredictions(request).addOnSuccessListener((response) -> {
        for (AutocompletePrediction prediction : response.getAutocompletePredictions()) {
            Log.i(TAG, prediction.getPlaceId());
            Log.i(TAG, prediction.getPrimaryText(null).toString());
        }
    }).addOnFailureListener((exception) -> {
        if (exception instanceof ApiException) {
            ApiException apiException = (ApiException) exception;
            Log.e(TAG, "Place not found: " + apiException.getStatusCode());
        }
    });

      

Kotlin


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

    // Create a RectangularBounds object.
    val bounds = RectangularBounds.newInstance(
        LatLng(-33.880490, 151.184363),
        LatLng(-33.858754, 151.229596)
    )
    // Use the builder to create a FindAutocompletePredictionsRequest.
    val request =
        FindAutocompletePredictionsRequest.builder()
            // Call either setLocationBias() OR setLocationRestriction().
            .setLocationBias(bounds)
            //.setLocationRestriction(bounds)
            .setOrigin(LatLng(-33.8749937, 151.2041382))
            .setCountries("AU", "NZ")
            .setTypesFilter(listOf(PlaceTypes.ADDRESS))
            .setSessionToken(token)
            .setQuery(query)
            .build()
    placesClient.findAutocompletePredictions(request)
        .addOnSuccessListener { response: FindAutocompletePredictionsResponse ->
            for (prediction in response.autocompletePredictions) {
                Log.i(TAG, prediction.placeId)
                Log.i(TAG, prediction.getPrimaryText(null).toString())
            }
        }.addOnFailureListener { exception: Exception? ->
            if (exception is ApiException) {
                Log.e(TAG, "Place not found: ${exception.statusCode}")
            }
        }

      

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

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

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

सेशन के टोकन

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

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

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

अपने-आप पूरा होने वाले नतीजों पर पाबंदी लगाएं

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

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

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

किसी खास क्षेत्र के लिए पक्षपात के नतीजे

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

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

      

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

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

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

      

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

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

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

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

कलेक्शन फ़िल्टर का टाइप तय करने या उसके टाइप के बारे में बताने के लिए:

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

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

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

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

Java


    autocompleteFragment.setTypesFilter(Arrays.asList("landmark", "restaurant", "store"));

      

Kotlin


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

      

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

Java


    autocompleteFragment.setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS, PlaceTypes.ESTABLISHMENT));

      

Kotlin


    autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))

      

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

Java


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

      

Kotlin


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

      

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

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

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

Java


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

      

Kotlin


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

      

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

Android के लिए Places SDK टूल के साथ-साथ, Places के एपीआई का इस्तेमाल करने से, अब आपको हर दिन ज़्यादा से ज़्यादा अनुरोधों (क्यूपीडी) की संख्या तय करने में मदद मिलेगी. हालांकि, इस्तेमाल करने की ये सीमाएं अब भी लागू होंगी:

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

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

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

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

स्थान ऑटोकंप्लीट ऑप्टिमाइज़ेशन

इस सेक्शन में, जगहों की जानकारी अपने-आप पूरी होने की सुविधा का ज़्यादा से ज़्यादा फ़ायदा पाने के सबसे सही तरीके बताए गए हैं.

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

  • सही यूज़र इंटरफ़ेस डेवलप करने का सबसे तेज़ तरीका है Maps JavaScript API ऑटोकंप्लीट विजेट, Android के लिए जगहें SDK टूल ऑटोकंप्लीट विजेट, या iOS के लिए Places SDK टूल ऑटोकंप्लीट यूज़र इंटरफ़ेस (यूआई) कंट्रोल
  • जगह की जानकारी के अपने-आप पूरा होने की सुविधा के ज़रूरी डेटा फ़ील्ड को शुरू से ही समझ लें.
  • लोकेशन बायसिंग और जगह की पाबंदी वाले फ़ील्ड ज़रूरी नहीं हैं. हालांकि, ये अपने-आप पूरा होने की सुविधा की परफ़ॉर्मेंस पर काफ़ी असर डाल सकते हैं.
  • गड़बड़ी को मैनेज करने की सुविधा का इस्तेमाल करें, ताकि यह पक्का किया जा सके कि अगर एपीआई कोई गड़बड़ी दिखाता है, तो आपका ऐप्लिकेशन ग्रेसफ़ुली डिग्रेड हो जाए.
  • पक्का करें कि जब कोई ऐप्लिकेशन न चुना गया हो, तो आपके ऐप्लिकेशन को हैंडल किया जा सकता है. साथ ही, यह भी पक्का करें कि उपयोगकर्ताओं को आगे बढ़ने का तरीका बताया गया हो.

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

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

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

बेहतर लागत ऑप्टिमाइज़ेशन

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

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

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

हां, ज़्यादा जानकारी की ज़रूरत है

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

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

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

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

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

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

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

क्या आपके उपयोगकर्ता औसतन चार या इससे कम अनुरोधों में, 'जगह की जानकारी अपने-आप पूरा होने की सुविधा' का अनुमान चुनते हैं?

हां

जगह के डेटा का अपने-आप पूरा होना, सेशन टोकन के बिना प्रोग्राम के हिसाब से लागू करें. साथ ही, चुनी गई जगह के अनुमान पर जियोकोडिंग एपीआई को कॉल करें.
जियोकोडिंग एपीआई, हर अनुरोध के लिए 0.005 डॉलर के हिसाब से पते और अक्षांश/देशांतर कोऑर्डिनेट डिलीवर करता है. चार स्थान ऑटोकंप्लीट - हर अनुरोध के लिए, चार अनुरोधों की कीमत 0.01132 डॉलर है. इसलिए, चुने गए जगह के अनुमान के लिए चार अनुरोधों के साथ-साथ जियोकोडिंग एपीआई कॉल की कुल लागत 0.01632 डॉलर होगी, जो हर सेशन के लिए हर सेशन ऑटोकंप्लीट की कीमत 0.017 डॉलर से कम है.1

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

नहीं

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

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

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

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

जगह की जानकारी अपने-आप पूरा होने की सुविधा के अनुरोध में देरी करें
जब तक उपयोगकर्ता पहले तीन या चार वर्ण टाइप न कर ले, तब तक अपने-आप जगह की जानकारी के अनुरोध में देरी जैसी रणनीतियां अपना सकते हैं, ताकि आपका ऐप्लिकेशन कम अनुरोध करे. उदाहरण के लिए, अगर उपयोगकर्ता के तीसरा वर्ण टाइप करने के बाद, हर वर्ण के लिए अपने-आप पूरा होने की सुविधा के अनुरोध करने का मतलब है कि अगर उपयोगकर्ता सात वर्ण टाइप करता है और उसके लिए कोई अनुमान चुनता है, जिसके लिए आपको एक जियोकोडिंग एपीआई अनुरोध करना है, तो कुल लागत $0.01632 (4 * $0.00283 अपने-आप पूरा होने की सुविधा + $0.005 जियोकोडिंग).1

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

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


  1. यहां दी गई कीमतें डॉलर में हैं. कीमत के बारे में पूरी जानकारी के लिए, कृपया Google Maps Platform के बिलिंग पेज पर जाएं.

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

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

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

समस्या हल करना

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

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