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

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

Android के लिए स्थल 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 को कॉल करना होगा. ऐसा न करने पर, फ़्रैगमेंट ठीक से काम नहीं करेगा.

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

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() को कॉल करके, 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 के लिए Places SDK टूल में जगह के आईडी के बारे में ज़्यादा जानकारी के लिए, जगह की जानकारी देखें. जगह के आईडी के बारे में सामान्य जानकारी के लिए, जगह के आईडी की खास जानकारी देखें.
  • getPlaceTypes() इस जगह से जुड़ी अलग-अलग तरह की जगहों की सूची दिखाता है.
  • getDistanceMeters() इस जगह और अनुरोध में बताए गए मूल के बीच की दूरी को मीटर में दिखाता है.

सेशन के टोकन

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

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

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

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

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

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

  • तय किए गए क्षेत्र में नतीजों को प्राथमिकता देने के लिए, setLocationBias() पर कॉल करें (तय किए गए क्षेत्र से बाहर के कुछ नतीजे अब भी दिखाए जा सकते हैं).
  • तय किए गए क्षेत्र में नतीजे सिर्फ़ दिखाने के लिए, setLocationRestriction() को कॉल करें (सिर्फ़ तय किए गए इलाके के नतीजे दिखाए जाएंगे).
  • सिर्फ़ किसी खास तरह की जगह के मुताबिक नतीजे दिखाने के लिए, setTypesFilter() को कॉल करें (उदाहरण के लिए, TypeFilter.ADDRESS तय करने से सिर्फ़ सटीक पते वाले नतीजे दिखेंगे).
  • सिर्फ़ पांच देशों के अंदर के नतीजे पाने के लिए, setCountries() को कॉल करें. देशों को दो वर्ण वाले ISO 3166-1 ऐल्फ़ा-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"));

      

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

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 का आपका इस्तेमाल, अब हर दिन ज़्यादा से ज़्यादा अनुरोधों (क्यूपीडी) तक सीमित नहीं है. हालांकि, इस्तेमाल करने की ये सीमाएं अब भी लागू होंगी:

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

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

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

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

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

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

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