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

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

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

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

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

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

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

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

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

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

किसी गतिविधि में ऑटोकंप्लीट फ़्रैगमेंट जोड़ना

किसी गतिविधि में 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.IntentBuilder का इस्तेमाल करें और मनचाहे Autocomplete मोड को पास करें.
  2. गतिविधि के नतीजे दिखाने वाला लॉन्चर तय करें registerForActivityResult जिसका इस्तेमाल इंटेंट को लॉन्च करने और नतीजे में उपयोगकर्ता की चुनी गई जगह के अनुमान को मैनेज करने के लिए किया जा सकता है.

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

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

Kotlin




    // Set the fields to specify which types of place data to
    // return after the user has made a selection.
    val fields = listOf(Place.Field.ID, Place.Field.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);

      

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

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

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

जब कोई व्यक्ति कोई जगह चुन ले, तो उसकी सूचना पाने के लिए, 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 स्ट्रिंग जिसमें वह टेक्स्ट शामिल है जिसे उपयोगकर्ता ने टाइप किया है.
  • इसका सुझाव दिया जाता है: 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 Pitt Street".
  • getSecondaryText(CharacterStyle) यह, किसी जगह के ब्यौरे के मुख्य कारोबार के तहत आने वाली कंपनी का टेक्स्ट दिखाता है. उदाहरण के लिए, ऑटोकंप्लीट सुविधा के सुझावों को दिखाते समय, यह दूसरी लाइन के तौर पर काम का होता है. उदाहरण: "Avenue Anatole France, France, France" और "Sydney, New South Wales".
  • getPlaceId() अनुमानित जगह की जानकारी का आईडी दिखाता है. जगह का आईडी, टेक्स्ट वाला एक आइडेंटिफ़ायर होता है, जो किसी जगह की खास पहचान करता है. इसका इस्तेमाल करके, बाद में Place ऑब्जेक्ट को फिर से पाया जा सकता है. Android के लिए 'जगहों के लिए 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));

      

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

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 के लिए Places SDK टूल ऑटोकंप्लीट विजेट या iOS के लिए Places SDK टूल ऑटोकंप्लीट यूज़र इंटरफ़ेस (यूआई) कंट्रोल का इस्तेमाल करना है
  • शुरू से ही, जगह के अपने-आप पूरे होने वाले डेटा फ़ील्ड के बारे में ज़रूरी जानकारी हासिल करें.
  • जगह का मापदंड तय करना और जगह के हिसाब से पाबंदी वाले फ़ील्ड ज़रूरी नहीं हैं. हालांकि, ये अपने-आप पूरे होने वाले परफ़ॉर्मेंस पर काफ़ी असर डाल सकते हैं.
  • गड़बड़ी ठीक करने के तरीके का इस्तेमाल करें, ताकि यह पक्का किया जा सके कि एपीआई से गड़बड़ी मिलने पर, आपका ऐप्लिकेशन ग्रेसफ़ुल तरीके से डिग्रेड करे.
  • पक्का करें कि आपका ऐप्लिकेशन तब मैनेज किया जाए, जब कोई विकल्प न चुना गया हो. साथ ही, उपयोगकर्ताओं को आगे बढ़ने का तरीका उपलब्ध कराया हो.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

क्या आपके उपयोगकर्ता औसतन चार या उससे कम अनुरोधों में, किसी जगह के लिए ऑटोकंप्लीट की सुविधा का अनुमान लगाते हैं?

हां

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

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

नहीं

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

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

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

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

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

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

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


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

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

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

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

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

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

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