खास जानकारी
Google Maps Platform, वेब (JS, TS), Android, और iOS के लिए उपलब्ध है. साथ ही, यह जगहों, निर्देशों, और दूरियों के बारे में जानकारी पाने के लिए, वेब सेवाओं के एपीआई भी उपलब्ध कराता है. इस गाइड में दिए गए सैंपल, एक प्लैटफ़ॉर्म के लिए लिखे गए हैं. हालांकि, अन्य प्लैटफ़ॉर्म पर लागू करने के लिए दस्तावेज़ के लिंक दिए गए हैं.
Google Cloud Console में मौजूद क्विक बिल्डर की मदद से, पता डालने के लिए ऑटोमैटिक भरने वाला फ़ॉर्म बनाया जा सकता है. इसके लिए, इंटरैक्टिव यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल किया जाता है, जो आपके लिए JavaScript कोड जनरेट करता है.
उपयोगकर्ताओं को डिजिटल दुनिया में रहने और काम करने की आदत हो गई है. इसमें, सुविधा, तेज़ी, और सुरक्षा की बुनियादी उम्मीदें शामिल हैं. जब वे क्रेडिट कार्ड, बैंक खाते या क़र्ज़ जैसे किसी प्रॉडक्ट के लिए आवेदन करते हैं, तो वे उम्मीद करते हैं कि प्रोसेस तेज़ और आसान होगी.
उपयोगकर्ताओं को जितनी ज़्यादा बार डुप्लीकेट डेटा टाइप या डालना पड़ता है, उन्हें ग्राहक बनाए रखने की संभावना उतनी ही कम होती है. साइन अप करने की प्रोसेस को तेज़, आसान, और पुष्टि की गई बनाने से, उपयोगकर्ता अनुभव बेहतर होगा. साथ ही, इससे आपको अपनी साइट पर उपयोगकर्ताओं को बनाए रखने में मदद मिलेगी.
मैन्युअल तरीके से डाले गए पतों की वजह से, कन्वर्ज़न कम हो सकते हैं, सीआरएम डेटा गलत हो सकता है, और डिलीवरी में ज़्यादा खर्च हो सकता है. तुरंत और पुष्टि के साथ साइन अप करने की सुविधा से, साइन अप करने की प्रोसेस तेज़ हो जाती है. साथ ही, यह सुविधा आस-पास के पतों के सुझाव तुरंत दिखाती है. इसके लिए, आपको बस कुछ ही टैप करने होते हैं. साथ ही, यह सुविधा पुष्टि करने के लिए, डाले गए पते को दिखाती है. इससे उपयोगकर्ता को यह भरोसा होता है कि उन्होंने सही पता डाला है. उपयोगकर्ता की मौजूदा जगह का इस्तेमाल करके, उसके पते की पुष्टि करने से धोखाधड़ी को रोकने में भी मदद मिलती है. साथ ही, इससे उपयोगकर्ता आपके प्रॉडक्ट और सेवाओं पर ज़्यादा भरोसा करने लगते हैं. पुष्टि करने से, आपको तुरंत वर्चुअल बैंक और क्रेडिट कार्ड देने में भी भरोसा बढ़ सकता है.
इस विषय में, Google Maps Platform की मदद से तेज़ और पुष्टि किए गए साइन-अप का अनुभव बनाने के लिए, लागू करने से जुड़े दिशा-निर्देश दिए गए हैं. ज़्यादातर उपयोगकर्ता, मोबाइल डिवाइसों पर साइन अप करेंगे. इसलिए, इस विषय में लागू करने के ज़्यादातर उदाहरण, Android पर फ़ोकस करते हैं. (पूरा सैंपल सोर्स यहां देखा जा सकता है). ये काम करने के लिए, iOS SDK टूल का भी इस्तेमाल किया जा सकता है.
इस डायग्राम में, समाधान बनाने में शामिल मुख्य एपीआई दिखाए गए हैं (बड़ा करने के लिए क्लिक करें).
एपीआई चालू करना
इन सुझावों को लागू करने के लिए, आपको Google Cloud Console में ये एपीआई चालू करने होंगे:
- Android के लिए Maps SDK टूल (या आपके चुने गए प्लैटफ़ॉर्म के लिए एपीआई)
- Places API
- Geocoding API
सेटअप के बारे में ज़्यादा जानने के लिए, Google Maps Platform का इस्तेमाल शुरू करना लेख पढ़ें.
सबसे सही तरीकों के सेक्शन
इस विषय में, हम इन तरीकों और कस्टमाइज़ेशन के बारे में बताएंगे.
- सही का निशान वाला आइकॉन, सबसे सही तरीकों में से एक है.
- स्टार आइकॉन का इस्तेमाल करना ज़रूरी नहीं है. हालांकि, समाधान को बेहतर बनाने के लिए, इसे पसंद के मुताबिक बनाने का सुझाव दिया जाता है.
इनपुट फ़ील्ड में ऑटोकंप्लीट की सुविधा जोड़ना | पते का फ़ॉर्म अपने-आप भरने की सुविधा. सभी प्लैटफ़ॉर्म पर उपयोगकर्ता अनुभव को बेहतर बनाने और कम से कम कीस्ट्रोक के साथ पते की सटीकता को बेहतर बनाने के लिए, टाइप-अस-यू-गो फ़ंक्शन जोड़ें. | |
पते की पुष्टि करने के लिए विज़ुअल सबूत देना | उपयोगकर्ताओं को मैप पर अपना पता दिखाएं, ताकि वे पुष्टि कर सकें कि उन्होंने सही पता डाला है. | |
उपयोगकर्ता के डाले गए पते की तुलना डिवाइस की जगह की जानकारी से करना | उपयोगकर्ता के चुने गए या डाले गए पते की तुलना, डिवाइस की मौजूदा जगह की जानकारी से करें. इससे यह पता चलता है कि उपयोगकर्ता, बताए गए पते पर मौजूद है या नहीं. (इस सुविधा के काम करने के लिए, ज़रूरी है कि उपयोगकर्ता साइन अप करते समय घर पर हों.) | |
तुरंत और पुष्टि के साथ साइन अप करने की सुविधा को बेहतर बनाने के बारे में सलाह | पता डालने की सुविधा को और बेहतर बनाया जा सकता है. इसके लिए, अपने हिसाब से ऑटोकंप्लीट विजेट का लुक और स्टाइल तय करें या उपयोगकर्ताओं को किसी कारोबार या लैंडमार्क का नाम पता के तौर पर चुनने की सुविधा दें. |
इनपुट फ़ील्ड में ऑटोकंप्लीट की सुविधा जोड़ना
इस उदाहरण में इनका इस्तेमाल किया गया है: Android के लिए Places SDK टूल | यह सुविधा इन पर भी उपलब्ध है: iOS | JavaScript |
जगह की जानकारी के लिए ऑटोकंप्लीट की सुविधा, आपके ऐप्लिकेशन में पते को आसानी से डालने में मदद कर सकती है. इससे, आपके ग्राहकों को बेहतर अनुभव मिलता है और कन्वर्ज़न रेट भी बढ़ता है. अपने-आप पूरा होने की सुविधा, "टाइप-आगे" वाले पते के अनुमान के साथ, एक ही फ़ील्ड में तेज़ी से जानकारी डालने की सुविधा देती है. इसका इस्तेमाल, साइन-अप के लिए पते का फ़ॉर्म अपने-आप भरने के लिए किया जा सकता है. साइन अप फ़्लो में जगह की जानकारी के लिए ऑटोकंप्लीट की सुविधा जोड़कर, ये काम किए जा सकते हैं:
- पते डालने से जुड़ी गड़बड़ियों को कम करना.
- साइन-अप की प्रोसेस में चरणों की संख्या कम करें.
- मोबाइल या पहने जा सकने वाले डिवाइसों पर, पता डालने की प्रोसेस को आसान बनाएं.
- इससे, खरीदार को साइन अप करने के लिए ज़्यादा बटन दबाने और ज़्यादा समय देने की ज़रूरत नहीं पड़ती.
जब उपयोगकर्ता ऑटोकंप्लीट एंट्री बॉक्स चुनता है और टाइप करना शुरू करता है, तो पते के अनुमान की सूची दिखती है.
जब उपयोगकर्ता, अनुमान की सूची से कोई पता चुनता है, तो जवाब का इस्तेमाल करके पते की पुष्टि की जा सकती है और जगह की जानकारी पाई जा सकती है. इसके बाद, आपका ऐप्लिकेशन, पते की जानकारी वाले फ़ॉर्म के सही फ़ील्ड में जानकारी भर सकता है. इसकी जानकारी नीचे दी गई इमेज में दी गई है.
वीडियो: जगह की जानकारी अपने-आप भरने की सुविधा की मदद से, पते के फ़ॉर्म को बेहतर बनाना
पते के फ़ॉर्म
Android
iOS
वेब
Google Maps Platform, मोबाइल प्लैटफ़ॉर्म और वेब के लिए, जगह की जानकारी के लिए ऑटोकंप्लीट विजेट उपलब्ध कराता है. पिछले इमेज में दिखाया गया विजेट, ऑटोकंप्लीट की सुविधा के साथ खोज डायलॉग बॉक्स उपलब्ध कराता है. इस सुविधा को जगह के हिसाब से खोज के लिए भी ऑप्टिमाइज़ किया जा सकता है.
इस सेक्शन में, तुरंत और पुष्टि किए गए साइन-अप के लिए, जगह की जानकारी ऑटोकंप्लीट करने की सुविधा को लागू करने का तरीका बताया गया है.
किसी जगह के शुरुआती अक्षर लिखने पर पूरा नाम सुझाने की सुविधा वाला विजेट जोड़ना
Android में, ऑटोमैटिक भरने की सुविधा के इंटेंट का इस्तेमाल करके, ऑटोमैटिक भरने की सुविधा वाला विजेट जोड़ा जा सकता है. यह इंटेंट, पते की पहली लाइन वाले इनपुट फ़ील्ड से, जगह के नाम के शुरुआती अक्षर लिखने पर पूरा नाम सुझाने की सुविधा को लॉन्च करता है. टाइप करने पर, उन्हें अपने-आप पूरा होने वाले सुझावों की सूची से अपना पता चुनने का विकल्प मिलेगा.
सबसे पहले, ActivityResultLauncher
का इस्तेमाल करके, गतिविधि लॉन्चर तैयार करें. यह लॉन्च की गई गतिविधि से नतीजे के लिए सुनेगा. नतीजे के कॉलबैक में, उस पते से जुड़ा प्लेस ऑब्जेक्ट होगा जिसे उपयोगकर्ता ने अपने-आप पूरी होने वाले सुझावों से चुना है.
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); // Write a method to read the address components from the Place // and populate the form with the address components Log.d(TAG, "Place: " + place.getAddressComponents()); fillInAddress(place); } } else if (result.getResultCode() == Activity.RESULT_CANCELED) { // The user canceled the operation. Log.i(TAG, "User canceled autocomplete"); } });
इसके बाद, जगह की जानकारी अपने-आप भरने की सुविधा वाले इंटेंट के फ़ील्ड, जगह, और टाइप प्रॉपर्टी तय करें. साथ ही, इसे Autocomplete.IntentBuilder
के साथ बनाएं.
आखिर में, पिछले कोड सैंपल में बताए गए ActivityResultLauncher
का इस्तेमाल करके इंटेंट लॉन्च करें.
private void startAutocompleteIntent() { // 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.ADDRESS_COMPONENTS, Place.Field.LAT_LNG, Place.Field.VIEWPORT); // Build the autocomplete intent with field, country, and type filters applied Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.OVERLAY, fields) .setCountries(Arrays.asList("US")) .setTypesFilter(new ArrayList<String>() {{ add(TypeFilter.ADDRESS.toString().toLowerCase()); }}) .build(this); startAutocomplete.launch(intent); }
जगह के नाम को अपने-आप पूरा करने की सुविधा से मिले पते को मैनेज करना
ActivityResultLauncher
को पहले से तय करने से यह भी तय हो जाता है कि कॉलबैक में गतिविधि का नतीजा मिलने पर क्या करना है. अगर उपयोगकर्ता ने कोई अनुमान चुना है, तो उसे नतीजे के ऑब्जेक्ट में मौजूद इंटेंट में डिलीवर किया जाएगा. इंटेंट को Autocomplete.IntentBuilder
ने बनाया है, इसलिए Autocomplete.getPlaceFromIntent()
वाला तरीका उससे जगह की जानकारी वाला ऑब्जेक्ट निकाल सकता है.
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); // Write a method to read the address components from the Place // and populate the form with the address components Log.d(TAG, "Place: " + place.getAddressComponents()); fillInAddress(place); } } else if (result.getResultCode() == Activity.RESULT_CANCELED) { // The user canceled the operation. Log.i(TAG, "User canceled autocomplete"); } });
इसके बाद, Place.getAddressComponents()
को कॉल करें और पते के हर कॉम्पोनेंट को पते के फ़ॉर्म में मौजूद उससे जुड़े इनपुट फ़ील्ड से मैच करें. साथ ही, फ़ील्ड में उपयोगकर्ता की चुनी गई जगह की वैल्यू डालें.
मैन्युअल तरीके से डाले गए पते के बजाय, अनुमानित पते का डेटा कैप्चर करने से, पते की सटीक जानकारी मिलती है. साथ ही, यह भी पक्का होता है कि पते की जानकारी सही है और उस पर डिलीवरी की जा सकती है. इससे उपयोगकर्ता को कीस्ट्रोक कम करने में भी मदद मिलती है.
जगह की जानकारी अपने-आप भरने की सुविधा लागू करते समय ध्यान देने वाली बातें
जगह की जानकारी अपने-आप भरने की सुविधा में कई विकल्प होते हैं. इनकी मदद से, इस सुविधा को ज़रूरत के हिसाब से लागू किया जा सकता है. ऐसा तब करना होगा, जब आपको सिर्फ़ विजेट के अलावा और भी चीज़ों का इस्तेमाल करना हो. किसी जगह की जानकारी को सही तरीके से मैच करने के लिए, कई सेवाओं का इस्तेमाल किया जा सकता है.
ADDRESS फ़ॉर्म के लिए, टाइप पैरामीटर को
address
पर सेट करें, ताकि मैच सिर्फ़ सड़क के पूरे पते से मिलते-जुलते हों. जगह की जानकारी के लिए ऑटोकंप्लीट की सुविधा के अनुरोधों में इस्तेमाल किए जा सकने वाले टाइप के बारे में ज़्यादा जानें.अगर आपको दुनिया भर में खोज करने की ज़रूरत नहीं है, तो पाबंदियां और बायस सेट करें. ऐसे कई पैरामीटर हैं जिनका इस्तेमाल, किसी मैच को सिर्फ़ चुनिंदा इलाकों में दिखाने या उस पर पाबंदी लगाने के लिए किया जा सकता है.
किसी इलाके के लिए, रेक्टैंगल के तौर पर सीमाएं सेट करने के लिए
RectangularBounds
का इस्तेमाल करें. साथ ही, यह पक्का करने के लिएsetLocationRestriction()
का इस्तेमाल करें कि सिर्फ़ उन इलाकों के पते दिखाए जाएं.जवाबों को कुछ देशों तक सीमित करने के लिए,
setCountries()
का इस्तेमाल करें.
अगर मैच में कुछ फ़ील्ड मौजूद नहीं हैं, तो फ़ील्ड में बदलाव करने की सुविधा दें. साथ ही, ज़रूरत पड़ने पर ग्राहकों को पता अपडेट करने की अनुमति दें. जगह के नाम के अपने-आप पूरे होने की सुविधा से मिले ज़्यादातर पतों में, अपार्टमेंट, सुइट या यूनिट नंबर जैसे सबप्राइमिस नंबर शामिल नहीं होते. इसलिए, ज़रूरत पड़ने पर उपयोगकर्ता को यह जानकारी भरने के लिए बढ़ावा देने के लिए, फ़ोकस को 'पता लाइन 2' पर ले जाया जा सकता है.
पते की पुष्टि करने के लिए विज़ुअल सबूत देना
इस उदाहरण में इनका इस्तेमाल किया गया है: Android के लिए Maps SDK टूल | यह सुविधा इन पर भी उपलब्ध है: iOS | JavaScript |
पते की जानकारी डालने के दौरान, उपयोगकर्ताओं को मैप पर पते की जानकारी दिखाएं. इससे उपयोगकर्ताओं को यह भरोसा भी मिलता है कि पता सही है.
इस इमेज में, पते के नीचे एक मैप दिखाया गया है. इसमें, डाले गए पते पर पिन लगा है.
यहां दिए गए उदाहरण में, Android में मैप जोड़ने का बुनियादी तरीका बताया गया है. ज़्यादा जानकारी के लिए दस्तावेज़ देखें.
SupportMapFragment
जोड़ना (इस मामले में, डाइनैमिक तौर पर फ़्रैगमेंट जोड़ना)- फ़्रैगमेंट का हैंडल पाना और कॉलबैक रजिस्टर करना
- मैप में स्टाइल जोड़ना और मार्कर जोड़ना
- मैप के कंट्रोल बंद करना
SupportMapFragment
जोड़ना
सबसे पहले, लेआउट एक्सएमएल फ़ाइल में SupportMapFragment
फ़्रैगमेंट जोड़ें.
<fragment android:name="com.google.android.gms.maps.SupportMapFragment" android:id="@+id/confirmation_map" android:layout_width="match_parent" android:layout_height="match_parent"/>
इसके बाद, अगर फ़्रैगमेंट मौजूद नहीं है, तो प्रोग्राम के हिसाब से उसे जोड़ें.
private void showMap(Place place) { coordinates = place.getLatLng(); // It isn't possible to set a fragment's id programmatically so we set a tag instead and // search for it using that. mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentByTag(MAP_FRAGMENT_TAG); // We only create a fragment if it doesn't already exist. if (mapFragment == null) { mapPanel = ((ViewStub) findViewById(R.id.stub_map)).inflate(); GoogleMapOptions mapOptions = new GoogleMapOptions(); mapOptions.mapToolbarEnabled(false); // To programmatically add the map, we first create a SupportMapFragment. mapFragment = SupportMapFragment.newInstance(mapOptions); // Then we add it using a FragmentTransaction. getSupportFragmentManager() .beginTransaction() .add(R.id.confirmation_map, mapFragment, MAP_FRAGMENT_TAG) .commit(); mapFragment.getMapAsync(this); } else { updateMap(coordinates); } }
फ़्रैगमेंट का हैंडल पाना और कॉलबैक रजिस्टर करना
फ़्रैगमेंट का हैंडल पाने के लिए,
FragmentManager.findFragmentById
तरीके को कॉल करें और उसे अपनी लेआउट फ़ाइल में फ़्रैगमेंट का रिसॉर्स आईडी पास करें. अगर आपने फ़्रैगमेंट को डाइनैमिक तौर पर जोड़ा है, तो यह चरण छोड़ दें, क्योंकि आपने पहले ही हैंडल हासिल कर लिया है.फ़्रैगमेंट पर कॉलबैक सेट करने के लिए,
getMapAsync
मेथड को कॉल करें.
उदाहरण के लिए, अगर आपने फ़्रैगमेंट को स्टैटिक तौर पर जोड़ा है, तो:
Kotlin
val mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this)
Java
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this);
मैप में स्टाइल जोड़ना और मार्कर जोड़ना
मैप तैयार होने के बाद, स्टाइल सेट करें, कैमरे को बीच में रखें, और डाले गए पते के निर्देशांक पर मार्कर जोड़ें. यहां दिया गया कोड, JSON ऑब्जेक्ट में तय की गई स्टाइल का इस्तेमाल करता है. इसके अलावा, क्लाउड पर मैप की स्टाइलिंग की सुविधाओं की मदद से तय किया गया मैप आईडी भी लोड किया जा सकता है.
@Override public void onMapReady(@NonNull GoogleMap googleMap) { map = googleMap; try { // Customise the styling of the base map using a JSON object defined // in a string resource. boolean success = map.setMapStyle( MapStyleOptions.loadRawResourceStyle(this, R.raw.style_json)); if (!success) { Log.e(TAG, "Style parsing failed."); } } catch (Resources.NotFoundException e) { Log.e(TAG, "Can't find style. Error: ", e); } map.moveCamera(CameraUpdateFactory.newLatLngZoom(coordinates, 15f)); marker = map.addMarker(new MarkerOptions().position(coordinates)); }
मैप के कंट्रोल बंद करना
मैप को आसान बनाए रखने के लिए, मैप के अतिरिक्त कंट्रोल (जैसे कि कंपास, टूलबार या अन्य सुविधाएं) के बिना जगह की जानकारी दिखाएं. इसके लिए, उन कंट्रोल को बंद करें जो आपके लिए ज़रूरी नहीं हैं. Android पर, सीमित इंटरैक्शन के लिए, लाइट मोड को चालू करने का विकल्प भी है.
उपयोगकर्ता के डाले गए पते की तुलना डिवाइस की जगह की जानकारी से करना
पते का सबूत पाने में कई समस्याएं आ सकती हैं. जैसे, उपयोगकर्ता की जगह की जानकारी, उपयोगकर्ता का किसी नए पते पर जाना या ऐसे डिजिटल कारोबार (जैसे, डिजिटल बैंक) जिनकी कोई जगह नहीं होती, जहां उपयोगकर्ता बिजली, पानी वगैरह के बिल या अन्य दस्तावेज़ों के साथ पते का सबूत दे सकें. उपयोगकर्ता के पतों की पुष्टि करने के लिए डिजिटल तरीके उपलब्ध कराने से, आपको तेज़ और बिना किसी रुकावट के साइन अप करने का अनुभव देने में मदद मिलती है.
पते की पुष्टि करने के लिए सुरक्षा सबसे ज़रूरी है. खास तौर पर, डिजिटल साइन-अप की प्रोसेस के लिए. इस सेक्शन में, यह जांचने के लिए दिशा-निर्देश और सैंपल दिए गए हैं कि साइन अप के दौरान उपयोगकर्ता की जगह की जानकारी, उस पते से मेल खाती है या नहीं जिसे उसने अपने पते के तौर पर डाला है.
डाले गए पते की तुलना डिवाइस की जगह की जानकारी से करने के लिए, ये चरण अपनाएं:
- उपयोगकर्ता के डाले गए पते को भौगोलिक निर्देशांक में बदलना.
- उपयोगकर्ता से उसके डिवाइस की जगह की जानकारी पाने की अनुमति मांगना.
- डाले गए पते और डिवाइस की जगह की जानकारी के बीच की दूरी का हिसाब लगाना. आपके पास यह तय करने का विकल्प होता है कि पते और जगह के मैच के लिए, ज़्यादा से ज़्यादा कितनी दूरी को गिना जाए.
नीचे दी गई इमेज में एक उदाहरण दिया गया है. इसमें बताया गया है कि उपयोगकर्ताओं से, डाले गए पते की तुलना उनकी मौजूदा जगह से कैसे कराई जा सकती है.
उपयोगकर्ता के डाले गए पते को भौगोलिक निर्देशांक में बदलना
इस उदाहरण में इनका इस्तेमाल किया गया है: Android के लिए Places SDK टूल | यह सुविधा इनके लिए भी उपलब्ध है: iOS | JavaScript | Geocoding API |
उपयोगकर्ता, पते की पुष्टि करने के लिए सहमति देने के बाद (पिछले फ़ोटो में "पुष्टि करें कि मैं यहां मौजूद हूं" पर टैप करके), पते की तुलना मौजूदा जगह से करने के लिए, सबसे पहले डाले गए पते को भौगोलिक निर्देशांक में बदला जाता है.
अगर उपयोगकर्ता ने जगह की जानकारी अपने-आप भरने की सुविधा की मदद से अपना पता चुना है, तो जगह की जानकारी अपने-आप भरने की सुविधा वाला विजेट जोड़ना कोड स्निपेट में दिखाए गए तरीके के मुताबिक, जगह की जानकारी अपने-आप भरने की सुविधा वाले फ़ील्ड की सूची में Place.Field.LAT_LNG
का अनुरोध करना न भूलें. साथ ही, चुने गए पते के भौगोलिक निर्देशांक पाने के लिए, Place.getLatLng()
तरीका इस्तेमाल करें.
coordinates = place.getLatLng();
अगर उपयोगकर्ता ने मैन्युअल तरीके से अपना पता डाला है या जगह के नाम के ऑटोकंप्लीट होने के बाद फ़ील्ड में बदलाव किए हैं, तो उस पते के निर्देशांक देखने के लिए, Android Geocoder सेवा या Geocoding API का इस्तेमाल करें.
उदाहरण
https://maps.googleapis.com/maps/api/geocode/json?address=1600%20Amphitheatre%2BParkway%2C%20Mountain%20View%2C%20CA%2094043&key=YOUR_API_KEY
Geocoding API को कॉल करते समय, यूआरएल को कोड में बदलना न भूलें.
यूआरएल कोड में बदलने के बारे में खास जानकारी: %20
= स्पेस, %2B
= + (प्लस), %2C
= , (कॉमा)
उपयोगकर्ता से उसके डिवाइस की जगह की जानकारी पाने की अनुमति मांगना
उपयोगकर्ता के डिवाइस की जगह की जानकारी पाने के लिए, आपको जगह की जानकारी की सेवाएं चालू करने के लिए, उपयोगकर्ता से अनुमति का अनुरोध करना होगा. जगह की जानकारी का पता लगाने वाले ऐप्लिकेशन बनाने के बारे में Android दस्तावेज़ में दिए गए दिशा-निर्देशों का इस्तेमाल करके, यह फ़्लो लागू करें:
जगह की सटीक जानकारी (
ACCESS_FINE_LOCATION
) ऐक्सेस करने की अनुमति का अनुरोध करें. यह अनुमति एक बार के लिए दी जाती है.अगर उपयोगकर्ता ने जगह की जानकारी का ऐक्सेस दिया है, तो उसकी जगह की जानकारी पाएं.
अगर उपयोगकर्ता जगह की जानकारी का ऐक्सेस देने से इनकार करता है, तो उसे स्वीकार करें. उदाहरण के लिए, इस तरह का मैसेज दिखाया जा सकता है (यह मानते हुए कि आपने उपयोगकर्ता की मौजूदा जगह की जानकारी सेव नहीं की है):
"अगर आपने ऐप्लिकेशन को अपनी सटीक जगह की जानकारी नहीं दी है, तो आपको अपना खाता चालू करने के लिए, मेल से पुष्टि करनी होगी. [ठीक है]"
नीचे दिए गए इलस्ट्रेशन में, उपयोगकर्ताओं से डिवाइस की जगह की जानकारी ऐक्सेस करने की अनुमति देने के लिए, प्रॉम्प्ट का एक उदाहरण दिखाया गया है.
जगह की जानकारी की अनुमति देखने के लिए, एक गतिविधि लॉन्चर तैयार करें. यह ActivityResultLauncher
की मदद से लॉन्च की गई गतिविधि से नतीजा सुनेगा.
नतीजे के कॉलबैक में एक स्ट्रिंग होगी, जिससे पता चलेगा कि उपयोगकर्ता ने अनुरोध की गई अनुमति दी है या नहीं.
// Register the permissions callback, which handles the user's response to the // system permissions dialog. Save the return value, an instance of // ActivityResultLauncher, as an instance variable. private final ActivityResultLauncher<String> requestPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> { if (isGranted) { // Since ACCESS_FINE_LOCATION is the only permission in this sample, // run the location comparison task once permission is granted. // Otherwise, check which permission is granted. getAndCompareLocations(); } else { // Fallback behavior if user denies permission Log.d(TAG, "User denied permission"); } });
इसके बाद, देखें कि ऐप्लिकेशन के पास पहले से ACCESS_FINE_LOCATION
की अनुमति है या नहीं.
अगर ऐसा नहीं होता है, तो उपयोगकर्ता से अनुमति मांगें. इसके लिए, पिछले चरण में बताए गए लॉन्चर का इस्तेमाल करके, अनुमति का अनुरोध करने वाली गतिविधि शुरू करें.
private void checkLocationPermissions() { if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { getAndCompareLocations(); } else { requestPermissionLauncher.launch( ACCESS_FINE_LOCATION); } }
ACCESS_FINE_LOCATION
अनुमति मिलने के बाद, डिवाइस की आखिरी जगह की जानकारी पाने के लिए, फ़्यूज़ की गई जगह की जानकारी देने वाली सेवा का इस्तेमाल करें. साथ ही, इससे LatLng
ऑब्जेक्ट बनाएं.
FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); fusedLocationClient.getLastLocation() .addOnSuccessListener(this, location -> { // Got last known location. In some rare situations this can be null. if (location == null) { return; } deviceLocation = new LatLng(location.getLatitude(), location.getLongitude()); // ... }); }
डाले गए पते और डिवाइस की जगह की जानकारी के बीच की दूरी का हिसाब लगाना
दो अक्षांश/देशांतर निर्देशांक (लिखे गए पते और डिवाइस की जगह) के बीच की दूरी का हिसाब लगाने के लिए, गणित का इस्तेमाल करें. ओपन सोर्स Android Utility लाइब्रेरी के लिए Maps SDK टूल में, पृथ्वी पर दो बिंदुओं के बीच गोले की दूरी का हिसाब लगाने के लिए कुछ आसान तरीके हैं.
सबसे पहले, अपने ऐप्लिकेशन की build.gradle.kts
फ़ाइल में यह डिपेंडेंसी जोड़कर, Android Utility लाइब्रेरी के लिए Maps SDK टूल इंस्टॉल करें:
dependencies { // Utility Library for Maps SDK for Android // You do not need to add a separate dependency for the Maps SDK for Android // since this library builds in the compatible version of the Maps SDK. implementation("com.google.maps.android:android-maps-utils:3.8.2") }
इसके बाद, डिवाइस की आखिरी जगह की जानकारी मिलने के बाद, गतिविधि फ़ाइल में वापस जाएं. इसके बाद, मीटर में दायरा तय करें, ताकि दोनों जगहों को "मैच किया गया" माना जा सके. त्रिज्या काफ़ी बड़ी होनी चाहिए, ताकि जीपीएस की सटीक जानकारी और उपयोगकर्ता के डाले गए पते पर मौजूद जगह के साइज़ में अंतर को ध्यान में रखा जा सके. उदाहरण के लिए:
private static final double acceptableProximity = 150;
इसके बाद, डिवाइस की जगह की जानकारी और उपयोगकर्ता के डाले गए पते की जगह के बीच की दूरी का हिसाब लगाने के लिए, यूटिलिटी लाइब्रेरी के तरीके computeDistanceBetween()
का इस्तेमाल करें. अगर दूरी, ऊपर बताए गए दायरे में है, तो मैच होने वाली जगहों पर ध्यान दें.
// Use the computeDistanceBetween function in the Maps SDK for Android Utility Library // to use spherical geometry to compute the distance between two Lat/Lng points. double distanceInMeters = computeDistanceBetween(deviceLocation, enteredLocation); if (distanceInMeters <= acceptedProximity) { Log.d(TAG, "location matched"); // TODO: Display UI based on the locations matching } else { Log.d(TAG, "location not matched"); // TODO: Display UI based on the locations not matching }
अगर पता और जगह की जानकारी मेल खाती है, तो ऐप्लिकेशन में पुष्टि की जानकारी दिखाएं, जैसा कि नीचे दिए गए चित्र में दिखाया गया है.
तुरंत और पुष्टि किए गए साइन-अप की सुविधा को और बेहतर बनाने के बारे में सलाह
उपयोगकर्ताओं को किसी कारोबार या लोकप्रिय जगह के नाम के आधार पर पता डालने की अनुमति दें. "टाइप करने से पहले सुझाव" की सुविधा, सिर्फ़ पतों के लिए काम नहीं करती. इसके अलावा, आपके पास यह चुनने का विकल्प भी होता है कि उपयोगकर्ता कारोबार या किसी जगह के नाम डाल सकें.
पते और कारोबार के नाम, दोनों को डालने की अनुमति देने के लिए, ऑटोमैटिक भरने की सुविधा की परिभाषा से types
प्रॉपर्टी को हटाएं.
जगह की जानकारी के ऑटोकंप्लीट बॉक्स के लुक और स्टाइल को अपनी वेबसाइट के स्टाइल के मुताबिक बनाएं. अगर आपको Google के विजेट का इस्तेमाल करने के बजाय, अपने ऐप्लिकेशन में जगह की जानकारी अपने-आप भरने की सुविधा के लुक और स्टाइल को कंट्रोल करना है, तो जगह की जानकारी अपने-आप भरने की सुविधा को प्रोग्राम के हिसाब से इस्तेमाल करें. इससे, जगह की जानकारी अपने-आप भरने की सुविधा की मदद से बनाए गए यूज़र इंटरफ़ेस (यूआई) को बेहतर बनाया जा सकता है.