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

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

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

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

अपने-आप पूरा होने वाला विजेट जोड़ें

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

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

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

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

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

किसी गतिविधि में AutocompleteSupportफ़्रैगमेंट जोड़ें

किसी गतिविधि में 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.NAME))

    // Set up a PlaceSelectionListener to handle the response.
    autocompleteFragment.setOnPlaceSelectedListener(object : PlaceSelectionListener {
        override fun onPlaceSelected(place: Place) {
            // TODO: Get info about the selected place.
            Log.i(TAG, "Place: ${place.name}, ${place.id}")
        }

        override fun onError(status: Status) {
            // TODO: Handle the error.
            Log.i(TAG, "An error occurred: $status")
        }
    })

      

Java


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

    // Specify the types of place data to return.
    autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));

    // Set up a PlaceSelectionListener to handle the response.
    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(@NonNull Place place) {
            // TODO: Get info about the selected place.
            Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
        }


        @Override
        public void onError(@NonNull Status status) {
            // TODO: Handle the error.
            Log.i(TAG, "An error occurred: " + status);
        }
    });

      

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

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

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

  1. मनचाहे Autocomplete मोड को पास करते हुए, इंटेंट बनाने के लिए Autocomplete.IntentBuilder का इस्तेमाल करें.
  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.NAME)

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

      

Java



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

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

      

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

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

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

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

Kotlin



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

      

Java


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

      

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

अपने-आप पूरा होने वाले विजेट से मिले यूज़र इंटरफ़ेस (यूआई) के विकल्प के तौर पर, पसंद के मुताबिक सर्च यूज़र इंटरफ़ेस (यूआई) बनाया जा सकता है. ऐसा करने के लिए, आपके ऐप्लिकेशन को प्रोग्राम के हिसाब से जगह के अनुमान मिलने चाहिए. PlacesClient.findAutocompletePredictions() को कॉल करके, आपके ऐप्लिकेशन को 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() को पूरा कॉल करने की जानकारी दी गई है.

Kotlin



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

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

      

Java


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

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

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

      

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

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

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

सेशन के टोकन

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

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

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

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

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

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

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

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

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

Kotlin



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

      

Java


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

      

किसी खास क्षेत्र के लिए नतीजों को सीमित करें

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

Kotlin



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

      

Java


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

      

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

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

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

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

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

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

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

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

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

Kotlin



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

      

Java


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

      

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

Kotlin



    autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))

      

Java


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

      

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

Kotlin



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

      

Java


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

      

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

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

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

Kotlin



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

      

Java


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

      

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

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

  • दर की सीमा 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 के बिलिंग पेज पर जाएं.

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

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

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

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

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

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