Android के लिए Places SDK टूल में ऑटोकंप्लीट की सुविधा, उपयोगकर्ता की खोज क्वेरी के हिसाब से जगहों के सुझाव दिखाती है. उपयोगकर्ता के टाइप करते ही, ऑटोमैटिक भरने की सुविधा, जगहों के सुझाव दिखाती है. जैसे, कारोबार, पते, प्लस कोड, और दिलचस्प जगहें.
अपने ऐप्लिकेशन में, अपने-आप पूरा होने की सुविधा को इन तरीकों से जोड़ा जा सकता है:
- ऑटोकंप्लीट विजेट जोड़ें, ताकि डेवलपमेंट में लगने वाला समय कम हो और उपयोगकर्ताओं को एक जैसा अनुभव मिल सके.
- उपयोगकर्ताओं को पसंद के मुताबिक अनुभव देने के लिए, जगह के सुझाव प्रोग्राम के हिसाब से पाएं.
ऑटोकंप्लीट विजेट जोड़ना
ऑटोकंप्लीट विजेट, खोज डायलॉग बॉक्स होता है. इसमें ऑटोकंप्लीट की सुविधा पहले से मौजूद होती है. जब कोई उपयोगकर्ता खोज के लिए शब्द डालता है, तो विजेट उन जगहों की सूची दिखाता है जिनके बारे में अनुमान लगाया गया है. जब उपयोगकर्ता कोई विकल्प चुनता है, तो Place
का एक इंस्टेंस दिखाया जाता है. इसके बाद, आपका ऐप्लिकेशन चुनी गई जगह की जानकारी पाने के लिए इसका इस्तेमाल कर सकता है.
अपने ऐप्लिकेशन में अपने-आप पूरा होने वाला टेक्स्ट वाला विजेट जोड़ने के दो विकल्प हैं:
- पहला विकल्प:
AutocompleteSupportFragment
एम्बेड करना. - दूसरा विकल्प: ऑटोकंप्लीट की सुविधा को लॉन्च करने के लिए, इंटेंट का इस्तेमाल करना.
पहला विकल्प: AutocompleteSupportFragment को एम्बेड करना
अपने ऐप्लिकेशन में AutocompleteSupportFragment
जोड़ने के लिए, यह तरीका अपनाएं:
- अपनी ऐक्टिविटी के एक्सएमएल लेआउट में कोई फ़्रैगमेंट जोड़ें.
- अपनी गतिविधि या फ़्रैगमेंट में कोई लिस्नर जोड़ें.
किसी गतिविधि में AutocompleteSupportFragment जोड़ना
किसी गतिविधि में AutocompleteSupportFragment
जोड़ने के लिए, एक्सएमएल लेआउट में नया फ़्रैगमेंट जोड़ें. उदाहरण के लिए:
<fragment android:id="@+id/autocomplete_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
/>
- डिफ़ॉल्ट रूप से, फ़्रैगमेंट में कोई बॉर्डर या बैकग्राउंड नहीं होता. एक जैसा विज़ुअल दिखाने के लिए, फ़्रैगमेंट को किसी दूसरे लेआउट एलिमेंट में नेस्ट करें. जैसे, CardView.
- अगर ऑटोकंप्लीट फ़्रैगमेंट का इस्तेमाल किया जा रहा है और आपको
onActivityResult
को बदलना है, तो आपकोsuper.onActivityResult
को कॉल करना होगा. ऐसा न करने पर, फ़्रैगमेंट ठीक से काम नहीं करेगा.
किसी गतिविधि में PlaceSelectionListener जोड़ना
PlaceSelectionListener
, उपयोगकर्ता की चुनी गई जगह को दिखाने की सुविधा को मैनेज करता है. नीचे दिया गया कोड, फ़्रैगमेंट का रेफ़रंस बनाने और अपने AutocompleteSupportFragment
में एक लिसनर जोड़ने का तरीका दिखाता है:
Kotlin
// Initialize the AutocompleteSupportFragment. val autocompleteFragment = supportFragmentManager.findFragmentById(R.id.autocomplete_fragment) as AutocompleteSupportFragment // Specify the types of place data to return. autocompleteFragment.setPlaceFields(listOf(Place.Field.ID, Place.Field.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); } });
दूसरा विकल्प: अपने-आप पूरा होने वाली गतिविधि को लॉन्च करने के लिए, इंटेंट का इस्तेमाल करना
अगर आपको अपने ऐप्लिकेशन में किसी दूसरे नेविगेशन फ़्लो का इस्तेमाल करना है, तो आपका ऐप्लिकेशन किसी इंटेंट का इस्तेमाल करके, अपने-आप पूरा होने की सुविधा को लॉन्च कर सकता है. उदाहरण के लिए, खोज फ़ील्ड के बजाय किसी आइकॉन से अपने-आप पूरा होने की सुविधा को ट्रिगर करने के लिए.
इंटेंट का इस्तेमाल करके, अपने-आप पूरा होने वाला टेक्स्ट वाला विजेट लॉन्च करने के लिए, यह तरीका अपनाएं:
- अपनी पसंद का
Autocomplete
मोड डालकर, इंटेंट बनाने के लिएAutocomplete.IntentBuilder
का इस्तेमाल करें. - गतिविधि के नतीजे लॉन्चर
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
स्ट्रिंग, जिसमें उपयोगकर्ता ने जो टेक्स्ट टाइप किया है वह शामिल हो. - सुझाया गया:
AutocompleteSessionToken
, जो बिलिंग के मकसद से, उपयोगकर्ता की खोज के क्वेरी और चुनने के चरणों को अलग-अलग सेशन में ग्रुप करता है. सेशन तब शुरू होता है, जब उपयोगकर्ता कोई क्वेरी टाइप करना शुरू करता है और तब खत्म होता है, जब वह कोई जगह चुनता है. - इसका सुझाव दिया जाता है:
RectangularBounds
ऑब्जेक्ट, जिसमें अक्षांश और देशांतर की सीमाएं बताई गई हैं. इससे नतीजों को तय किए गए इलाके तक सीमित किया जा सकता है. - ज़रूरी नहीं: एक या एक से ज़्यादा दो अक्षर वाले देश के कोड (ISO 3166-1 ऐल्फ़ा-2), जिनसे पता चलता है कि खोज के नतीजों को किन देशों में दिखाना है.
ज़रूरी नहीं:
TypeFilter
, इसका इस्तेमाल करके नतीजों को किसी खास जगह के टाइप तक सीमित किया जा सकता है. इन जगहों के लिए,TypeFilter.GEOCODE
– कारोबारों के बजाय, सिर्फ़ जियोकोडिंग के नतीजे दिखाता है. इस अनुरोध का इस्तेमाल करके, उन नतीजों में अंतर करने के लिए किया जा सकता है जिनमें बताई गई जगह की जानकारी अस्पष्ट हो सकती है.TypeFilter.ADDRESS
– सिर्फ़ सटीक पते के साथ ऑटोकंप्लीट के नतीजे दिखाता है. इस टाइप का इस्तेमाल तब करें, जब आपको पता हो कि उपयोगकर्ता किसी पूरी तरह से तय किए गए पते को खोज रहा है.TypeFilter.ESTABLISHMENT
– सिर्फ़ कारोबार वाली जगहें दिखाता है.TypeFilter.REGIONS
– सिर्फ़ ऐसी जगहें दिखाता है जो इनमें से किसी एक टाइप से मेल खाती हैं:LOCALITY
SUBLOCALITY
POSTAL_CODE
COUNTRY
ADMINISTRATIVE_AREA_LEVEL_1
ADMINISTRATIVE_AREA_LEVEL_2
TypeFilter.CITIES
– सिर्फ़LOCALITY
याADMINISTRATIVE_AREA_LEVEL_3
से मैच होने वाले नतीजे दिखाता है.
ज़रूरी नहीं: अनुरोध के लिए ऑरिजिन की जगह की जानकारी देने वाला
LatLng
.setOrigin()
को कॉल करने पर, रिस्पॉन्स में ऑटोमैटिक तरीके से भरी गई जगह की जानकारी के लिए, सेवा बताई गई जगह से मीटर (distanceMeters
) में दूरी दिखाती है.
जगह के टाइप के बारे में जानने के लिए, जगह के टाइप की गाइड देखें.
नीचे दिए गए उदाहरण में, PlacesClient.findAutocompletePredictions()
को पूरा कॉल दिखाया गया है.
Kotlin
// Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest, // and once again when the user makes a selection (for example when calling fetchPlace()). val token = AutocompleteSessionToken.newInstance() // Create a RectangularBounds object. val bounds = RectangularBounds.newInstance( LatLng(-33.880490, 151.184363), LatLng(-33.858754, 151.229596) ) // Use the builder to create a FindAutocompletePredictionsRequest. val request = FindAutocompletePredictionsRequest.builder() // Call either setLocationBias() OR setLocationRestriction(). .setLocationBias(bounds) //.setLocationRestriction(bounds) .setOrigin(LatLng(-33.8749937, 151.2041382)) .setCountries("AU", "NZ") .setTypesFilter(listOf(PlaceTypes.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 France, Paris, France" और "Sydney, New South Wales".getPlaceId()
जगह का अनुमान लगाने के लिए, जगह का आईडी दिखाता है. जगह का आईडी, टेक्स्ट वाला एक आइडेंटिफ़ायर होता है. इससे किसी जगह की यूनीक पहचान की जा सकती है. इसका इस्तेमाल, बाद मेंPlace
ऑब्जेक्ट को फिर से पाने के लिए किया जा सकता है. Places SDK for Android में जगह के आईडी के बारे में ज़्यादा जानने के लिए, जगह की जानकारी देखें. जगह के आईडी के बारे में सामान्य जानकारी पाने के लिए, जगह के आईडी की खास जानकारी देखें.getPlaceTypes()
इससे, इस जगह से जुड़ी जगह के टाइप की सूची मिलती है.getDistanceMeters()
, इस जगह और अनुरोध में बताए गए ऑरिजिन के बीच की सीधी दूरी को मीटर में दिखाता है.
सेशन टोकन
सेशन टोकन, उपयोगकर्ता की ऑटोमैटिक तरीके से पूरी होने वाली खोज की क्वेरी और चुनने के चरणों को बिलिंग के मकसद से अलग सेशन में ग्रुप करते हैं. सेशन तब शुरू होता है, जब उपयोगकर्ता कोई क्वेरी टाइप करना शुरू करता है और तब खत्म होता है, जब वह कोई जगह चुनता है. हर सेशन में कई क्वेरी हो सकती हैं. इसके बाद, एक जगह चुनी जा सकती है. सेशन खत्म होने के बाद, टोकन अमान्य हो जाता है. इसलिए, आपके ऐप्लिकेशन को हर सेशन के लिए नया टोकन जनरेट करना होगा. हमारा सुझाव है कि प्रोग्राम के हिसाब से ऑटोमैटिक भरने की सुविधा वाले सभी सेशन के लिए सेशन टोकन का इस्तेमाल करें. जब किसी फ़्रैगमेंट को एम्बेड किया जाता है या किसी इंटेंट का इस्तेमाल करके ऑटोमैटिक भरने की सुविधा को लॉन्च किया जाता है, तो एपीआई अपने-आप इसकी देखभाल करता है.
Places SDK for Android, हर सेशन की पहचान करने के लिए 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 से कोई वैल्यू नहीं दी जा सकती. ऐसा करने पर, गड़बड़ी का मैसेज दिखता है.
यहां दिए गए कोड के उदाहरण में, AutocompleteSupportFragment
पर setTypesFilter()
को कॉल किया गया है और एक से ज़्यादा टाइप की वैल्यू दी गई हैं.
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");
इस्तेमाल करने की सीमा
अब Places API और Android के लिए Places SDK टूल का इस्तेमाल करने पर, हर दिन किए जा सकने वाले अनुरोधों की संख्या (क्यूपीडी) की सीमा नहीं है. हालांकि, इस्तेमाल करने की ये सीमाएं अब भी लागू होंगी:
- रेट लिमिट 6,000 क्यूपीएम (हर मिनट में अनुरोध) है. इसकी गिनती, एक ही प्रोजेक्ट के क्रेडेंशियल का इस्तेमाल करने वाले सभी ऐप्लिकेशन के लिए, क्लाइंट-साइड और सर्वर-साइड अनुरोधों के योग के तौर पर की जाती है.
अपने ऐप्लिकेशन में एट्रिब्यूशन दिखाना
- अगर आपका ऐप्लिकेशन, ऑटोकंप्लीट की सुविधा को प्रोग्राम के हिसाब से इस्तेमाल करता है, तो आपके यूज़र इंटरफ़ेस (यूआई) में 'Google की मदद से' एट्रिब्यूशन दिखना चाहिए या वह Google के ब्रैंड वाले मैप में दिखना चाहिए.
- अगर आपका ऐप्लिकेशन ऑटोमैटिक भरने वाले विजेट का इस्तेमाल करता है, तो आपको कुछ और करने की ज़रूरत नहीं है. ज़रूरी एट्रिब्यूशन डिफ़ॉल्ट रूप से दिखता है.
- अगर आईडी से जगह की जानकारी पाने के बाद, जगह की ज़्यादा जानकारी हासिल की जाती है और उसे दिखाया जाता है, तो आपको तीसरे पक्ष के एट्रिब्यूशन भी दिखाने होंगे.
ज़्यादा जानकारी के लिए, एट्रिब्यूशन के बारे में दस्तावेज़ देखें.
जगह के शुरुआती अक्षर लिखने पर पूरा नाम सुझाने की सुविधा को ऑप्टिमाइज़ करना
इस सेक्शन में, जगह की जानकारी अपने-आप पूरी होने की सुविधा का ज़्यादा से ज़्यादा फ़ायदा पाने के लिए, सबसे सही तरीकों के बारे में बताया गया है.
यहां कुछ सामान्य दिशा-निर्देश दिए गए हैं:
- काम करने वाला यूज़र इंटरफ़ेस बनाने का सबसे तेज़ तरीका यह है कि आप Maps JavaScript API के ऑटोकंप्लीट विजेट, Android के लिए Places SDK टूल के ऑटोकंप्लीट विजेट या iOS के लिए Places SDK टूल के ऑटोकंप्लीट यूज़र इंटरफ़ेस कंट्रोल का इस्तेमाल करें
- जगह की जानकारी अपने-आप भरने की सुविधा के लिए ज़रूरी डेटा फ़ील्ड के बारे में शुरुआत से ही जानकारी रखें.
- जगह के हिसाब से सुझाव और जगह की पाबंदी वाले फ़ील्ड का इस्तेमाल करना ज़रूरी नहीं है. हालांकि, इनका इस्तेमाल करने से ऑटोमैटिक भरने की सुविधा की परफ़ॉर्मेंस पर काफ़ी असर पड़ सकता है.
- गड़बड़ी को मैनेज करने की सुविधा का इस्तेमाल करके, पक्का करें कि एपीआई से गड़बड़ी का मैसेज मिलने पर, आपका ऐप्लिकेशन सही तरीके से काम करना बंद कर दे.
- पक्का करें कि आपका ऐप्लिकेशन, कोई विकल्प न चुनने पर भी काम करता हो और उपयोगकर्ताओं को आगे बढ़ने का तरीका बताता हो.
लागत को ऑप्टिमाइज़ करने के सबसे सही तरीके
बुनियादी लागत ऑप्टिमाइज़ेशन
जगह की जानकारी अपने-आप भरने की सुविधा का इस्तेमाल करने की लागत को ऑप्टिमाइज़ करने के लिए, जगह की जानकारी और जगह की जानकारी अपने-आप भरने की सुविधा वाले विजेट में फ़ील्ड मास्क का इस्तेमाल करें. इससे, आपको सिर्फ़ वही जगह का डेटा फ़ील्ड दिखेगा जिसकी ज़रूरत है.
लागत का बेहतर ऑप्टिमाइज़ेशन
हर अनुरोध के हिसाब से कीमत को ऐक्सेस करने के लिए, जगह की जानकारी अपने-आप पूरी होने की सुविधा को प्रोग्राम के तौर पर लागू करें. साथ ही, जगह की जानकारी के बजाय, चुनी गई जगह के बारे में Geocoding API के नतीजों का अनुरोध करें. अगर ये दोनों शर्तें पूरी होती हैं, तो जियोकोडिंग एपीआई के साथ हर अनुरोध के हिसाब से तय की गई कीमत, हर सेशन (सेशन के हिसाब से) के हिसाब से तय की गई कीमत के मुकाबले ज़्यादा किफ़ायती होती है:
- अगर आपको उपयोगकर्ता की चुनी गई जगह का सिर्फ़ अक्षांश/देशांतर या पता चाहिए, तो Geocoding API इस जानकारी को जगह की जानकारी वाले कॉल से कम समय में डिलीवर करता है.
- अगर उपयोगकर्ता, ऑटोकंप्लीट के अनुमान के चार या उससे कम अनुरोधों में से कोई सुझाव चुनते हैं, तो हर अनुरोध के हिसाब से कीमत, हर सेशन के हिसाब से कीमत से ज़्यादा किफ़ायती हो सकती है.
क्या आपके ऐप्लिकेशन को, चुने गए अनुमान के पते और अक्षांश/देशांतर के अलावा, कोई और जानकारी चाहिए?
हां, ज़्यादा जानकारी चाहिए
जगह की जानकारी के साथ, सेशन के हिसाब से जगह की जानकारी अपने-आप पूरी होने की सुविधा का इस्तेमाल करें.
आपके ऐप्लिकेशन को जगह की जानकारी की ज़रूरत होती है, जैसे कि जगह का नाम, कारोबार की स्थिति या खुले होने का समय. इसलिए, जगह की जानकारी अपने-आप भरने की सुविधा को लागू करने के लिए, सेशन टोकन का इस्तेमाल किया जाना चाहिए. यह प्रोग्राम के हिसाब से या JavaScript, Android या iOS विजेट में पहले से मौजूद होता है. इसके लिए, हर सेशन के लिए 0.017 डॉलर और Places Data के SKU की लागत चुकाई जाती है. यह लागत, जगह की जानकारी के उन फ़ील्ड पर निर्भर करती है जिनका अनुरोध किया जाता है.1
विजेट लागू करना
सेशन मैनेजमेंट, JavaScript, Android या iOS विजेट में अपने-आप बन जाता है. इसमें, चुनी गई जगह के लिए, जगह की जानकारी के अनुरोध और जगह के नाम के ऑटोकंप्लीट होने से जुड़े अनुरोध, दोनों शामिल होते हैं. fields
पैरामीटर की वैल्यू डालना न भूलें, ताकि यह पक्का किया जा सके कि आपने सिर्फ़ उन जगह के डेटा फ़ील्ड के लिए अनुरोध किया है जिनकी आपको ज़रूरत है.
प्रोग्रामैटिक तरीके से लागू करना
जगह की जानकारी अपने-आप भरने के अनुरोधों के साथ सेशन टोकन का इस्तेमाल करें. चुने गए अनुमान के बारे में जगह की जानकारी का अनुरोध करते समय, इन पैरामीटर को शामिल करें:
- जगह के नाम के शुरुआती अक्षर लिखने पर पूरा नाम सुझाने की सुविधा के जवाब में मौजूद जगह का आईडी
- जगह के शुरुआती अक्षर लिखने पर पूरा नाम सुझाने की सुविधा के अनुरोध में इस्तेमाल किया गया सेशन टोकन
fields
पैरामीटर, जिसमें आपके ज़रूरी जगह के डेटा फ़ील्ड की जानकारी होती है
नहीं, सिर्फ़ पते और जगह की जानकारी की ज़रूरत है
आपके ऐप्लिकेशन के लिए, जगह की जानकारी की तुलना में जियोकोडिंग एपीआई का इस्तेमाल करना ज़्यादा किफ़ायती हो सकता है. यह इस बात पर निर्भर करता है कि जगह की जानकारी अपने-आप पूरी होने की सुविधा की परफ़ॉर्मेंस कैसी है. हर ऐप्लिकेशन में ऑटोमैटिक भरने की सुविधा की परफ़ॉर्मेंस अलग-अलग होती है. यह इस बात पर निर्भर करता है कि उपयोगकर्ता क्या डाल रहे हैं, ऐप्लिकेशन का इस्तेमाल कहां किया जा रहा है, और परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के सबसे सही तरीके लागू किए गए हैं या नहीं.
नीचे दिए गए सवाल का जवाब देने के लिए, यह विश्लेषण करें कि आपके ऐप्लिकेशन में, जगह के अपने-आप पूरे होने वाले सुझाव चुनने से पहले, उपयोगकर्ता औसतन कितने वर्ण टाइप करता है.
क्या आपके उपयोगकर्ता, जगह के लिए ऑटोकंप्लीट की सुविधा से मिलने वाले सुझावों में से, औसतन चार या उससे कम अनुरोधों में कोई सुझाव चुनते हैं?
हां
सेशन टोकन के बिना, प्रोग्राम के हिसाब से जगह की जानकारी के लिए ऑटोकंप्लीट की सुविधा लागू करें. साथ ही, चुनी गई जगह के सुझाव पर जियोकोडिंग एपीआई को कॉल करें.
Geocoding API, हर अनुरोध के लिए 0.005 डॉलर में पते और अक्षांश/देशांतर के निर्देशांक उपलब्ध कराता है. जगह की जानकारी के लिए ऑटोकंप्लीट की सुविधा - हर अनुरोध के लिए चार अनुरोध करने पर, 0.01132 डॉलर का शुल्क लगता है. इसलिए, चुनी गई जगह के सुझाव के लिए चार अनुरोधों और Geocoding API कॉल की कुल कीमत 0.01632 डॉलर होगी. यह कीमत, हर सेशन के लिए ऑटोकंप्लीट की सुविधा के लिए, हर सेशन के 0.017 डॉलर से कम है.1
परफ़ॉर्मेंस के सबसे सही तरीकों का इस्तेमाल करें, ताकि आपके उपयोगकर्ता कम वर्णों में भी अपनी खोज के नतीजे पा सकें.
नहीं
जगह की जानकारी के साथ, सेशन के हिसाब से जगह की जानकारी अपने-आप पूरी होने की सुविधा का इस्तेमाल करें.
उपयोगकर्ता के किसी जगह की जानकारी के ऑटोकंप्लीट के सुझाव को चुनने से पहले, आपके अनुरोधों की औसत संख्या, हर सेशन के लिए तय की गई कीमत से ज़्यादा हो सकती है. इसलिए, जगह की जानकारी के ऑटोकंप्लीट के अनुरोधों और उससे जुड़ी जगह की जानकारी के अनुरोध, दोनों के लिए सेशन टोकन का इस्तेमाल किया जाना चाहिए. इसकी कुल कीमत हर सेशन के लिए 0.017 डॉलर होगी.1
विजेट लागू करना
सेशन मैनेजमेंट, JavaScript, Android या iOS विजेट में अपने-आप बन जाता है. इसमें, चुनी गई जगह के लिए, जगह की जानकारी के अनुरोध और जगह के नाम के ऑटोकंप्लीट होने से जुड़े अनुरोध, दोनों शामिल होते हैं. fields
पैरामीटर की जानकारी ज़रूर दें, ताकि यह पक्का किया जा सके कि आपने सिर्फ़ बुनियादी डेटा फ़ील्ड का अनुरोध किया है.
प्रोग्रामैटिक तरीके से लागू करना
जगह की जानकारी अपने-आप भरने के अनुरोधों के साथ सेशन टोकन का इस्तेमाल करें. चुने गए अनुमान के बारे में जगह की जानकारी का अनुरोध करते समय, इन पैरामीटर को शामिल करें:
- जगह के नाम के शुरुआती अक्षर लिखने पर पूरा नाम सुझाने की सुविधा के जवाब में मौजूद जगह का आईडी
- जगह के शुरुआती अक्षर लिखने पर पूरा नाम सुझाने की सुविधा के अनुरोध में इस्तेमाल किया गया सेशन टोकन
fields
पैरामीटर, जो पते और ज्यामिति जैसे बुनियादी डेटा फ़ील्ड की जानकारी देता है
जगह की जानकारी अपने-आप पूरी होने की सुविधा के अनुरोधों को देर से भेजने पर विचार करें
जगह की जानकारी अपने-आप पूरी होने की सुविधा के अनुरोध को तब तक देर से भेजें, जब तक कि उपयोगकर्ता ने पहले तीन या चार वर्ण टाइप न कर लिए हों. इससे आपका ऐप्लिकेशन कम अनुरोध करेगा. उदाहरण के लिए, उपयोगकर्ता के तीसरा वर्ण टाइप करने के बाद, हर वर्ण के लिए जगह की जानकारी के ऑटोकंप्लीट के अनुरोध करने का मतलब है कि अगर उपयोगकर्ता सात वर्ण टाइप करता है और फिर कोई अनुमान चुनता है, जिसके लिए आपने एक जियोकोडिंग एपीआई अनुरोध किया है, तो कुल लागत 0.01632 डॉलर होगी (हर अनुरोध के लिए ऑटोकंप्लीट की 4 * 0.00283 डॉलर की लागत + 0.005 डॉलर की जियोकोडिंग की लागत).1
अगर अनुरोधों में देरी करने से, प्रोग्राम के हिसाब से किए जाने वाले अनुरोधों की औसत संख्या चार से कम हो सकती है, तो Geocoding API की मदद से, जगह की जानकारी के ऑटोकंप्लीट की बेहतर परफ़ॉर्मेंस को लागू करने के लिए दिए गए दिशा-निर्देशों का पालन करें. ध्यान दें कि अनुरोधों में देरी होने पर, उपयोगकर्ता को लग सकता है कि अनुरोध पूरा होने में देरी हो रही है. ऐसा इसलिए हो सकता है, क्योंकि वह हर नए कीस्ट्रोक के साथ सुझाव देखना चाहता हो.
परफ़ॉर्मेंस के सबसे सही तरीकों का इस्तेमाल करें, ताकि आपके उपयोगकर्ता कम वर्णों में अपने हिसाब से सुझाव पा सकें.
-
यहां दी गई कीमतें डॉलर में हैं. कीमत की पूरी जानकारी के लिए, कृपया Google Maps Platform की बिलिंग पेज पर जाएं.
परफ़ॉर्मेंस के सबसे सही तरीके
यहां दिए गए दिशा-निर्देशों में, जगह की जानकारी के लिए ऑटोकंप्लीट की सुविधा की परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के तरीके बताए गए हैं:
- जगह के नाम के अपने-आप पूरे होने की सुविधा को लागू करते समय, देश से जुड़ी पाबंदियां, जगह के हिसाब से जानकारी, और प्रोग्राम के हिसाब से लागू करने के लिए, भाषा की प्राथमिकता जोड़ें. विजेट के लिए, भाषा की प्राथमिकता सेट करने की ज़रूरत नहीं होती, क्योंकि ये उपयोगकर्ता के ब्राउज़र या मोबाइल डिवाइस से भाषा की प्राथमिकताएं चुनते हैं.
- अगर जगह की जानकारी अपने-आप पूरी होने की सुविधा के साथ मैप भी दिखता है, तो मैप व्यूपोर्ट के हिसाब से जगह की जानकारी को प्राथमिकता दी जा सकती है.
- आम तौर पर, जब कोई उपयोगकर्ता ऑटोकंप्लीट की सुविधा से मिलने वाले सुझावों में से कोई भी सुझाव नहीं चुनता, तो इसका मतलब है कि उनमें से कोई भी सुझाव, उपयोगकर्ता के हिसाब से सही नहीं है. ऐसे में, ज़्यादा काम के नतीजे पाने के लिए, उपयोगकर्ता के मूल इनपुट का फिर से इस्तेमाल किया जा सकता है:
- अगर आपको लगता है कि उपयोगकर्ता सिर्फ़ पते की जानकारी डालेगा, तो Geocoding API को कॉल करते समय, उपयोगकर्ता के मूल इनपुट का फिर से इस्तेमाल करें.
- अगर आपको लगता है कि उपयोगकर्ता किसी जगह के नाम या पते से जुड़ी क्वेरी डालेगा, तो जगह ढूंढने का अनुरोध का इस्तेमाल करें. अगर आपको सिर्फ़ किसी खास इलाके के लिए नतीजे चाहिए, तो जगह के हिसाब से नतीजे दिखाने की सुविधा का इस्तेमाल करें.
- उपयोगकर्ता, सब-प्राइमिस के पते डाल रहे हों. जैसे, किसी इमारत में मौजूद खास यूनिट या अपार्टमेंट के पते. उदाहरण के लिए, चेक के पते "Stroupežnického 3191/17, Praha" के लिए, जगह की जानकारी को ऑटोकंप्लीट करने की सुविधा से कुछ हद तक जानकारी मिलती है.
- ऐसे उपयोगकर्ता जो सड़क के सेगमेंट के प्रीफ़िक्स के साथ पते डालते हैं. जैसे, न्यूयॉर्क शहर में "23-30 29th St, Queens" या हवाई के काऊई द्वीप पर "47-380 Kamehameha Hwy, Kaneohe".
समस्या का हल
कई तरह की गड़बड़ियां हो सकती हैं. हालांकि, आपके ऐप्लिकेशन में होने वाली ज़्यादातर गड़बड़ियां, कॉन्फ़िगरेशन की गड़बड़ियों (उदाहरण के लिए, गलत एपीआई पासकोड का इस्तेमाल किया गया या एपीआई पासकोड को गलत तरीके से कॉन्फ़िगर किया गया) या कोटा से जुड़ी गड़बड़ियों (आपका ऐप्लिकेशन अपने कोटे से ज़्यादा डेटा इस्तेमाल कर रहा है) की वजह से होती हैं. कोटा के बारे में ज़्यादा जानकारी के लिए, इस्तेमाल की सीमाएं देखें.
अपने-आप पूरा होने वाले टेक्स्ट के कंट्रोल इस्तेमाल करने के दौरान होने वाली गड़बड़ियां,
onActivityResult()
कॉलबैक में दिखती हैं. नतीजे का स्टेटस मैसेज पाने के लिए, Autocomplete.getStatus()
को कॉल करें.