ภาพรวม
Google Maps Platform พร้อมใช้งานสำหรับเว็บ (JS, TS), Android และ iOS และยังมี API ของบริการบนเว็บสำหรับรับข้อมูลเกี่ยวกับสถานที่ เส้นทาง และระยะทางด้วย ตัวอย่างในคู่มือนี้เขียนขึ้นสำหรับแพลตฟอร์มหนึ่ง แต่มีลิงก์เอกสารประกอบสำหรับใช้ในแพลตฟอร์มอื่นๆ
เครื่องมือสร้างด่วนใน Google Cloud Console ช่วยให้คุณสร้างการเติมข้อมูลแบบฟอร์มอัตโนมัติได้โดยใช้ UI แบบอินเทอร์แอกทีฟที่สร้างโค้ด JavaScript ให้คุณ
ผู้ใช้คุ้นเคยกับการใช้ชีวิตและการทำงานในโลกดิจิทัลที่ความสะดวกสบาย ความเร็ว และความปลอดภัยเป็นความคาดหวังพื้นฐาน เมื่อผู้ใช้สมัครโฆษณา เช่น บัตรเครดิต บัญชีธนาคาร หรือเงินกู้ พวกเขาคาดหวังว่ากระบวนการนี้จะเป็นไปอย่างรวดเร็วและง่ายดาย
ยิ่งผู้ใช้ต้องพิมพ์หรือป้อนข้อมูลซ้ำมากเท่าใด คุณก็ยิ่งมีโอกาสคงผู้ใช้เหล่านั้นไว้เป็นลูกค้าน้อยลงเท่านั้น การสร้างประสบการณ์การลงชื่อสมัครใช้ที่รวดเร็ว ง่าย และได้รับการยืนยันแล้วจะช่วยปรับปรุงประสบการณ์ของผู้ใช้ ในขณะเดียวกันก็ช่วยให้คุณรักษาผู้ใช้ให้อยู่ในเว็บไซต์ต่อไปได้
ที่อยู่ที่ป้อนด้วยตนเองอาจทำให้ Conversion ลดลง, ข้อมูล CRM ที่ผิดพลาด และข้อผิดพลาดในการแสดงโฆษณาที่มีค่าใช้จ่ายสูง การลงชื่อสมัครใช้แบบรวดเร็วและได้รับการยืนยันช่วยให้ลงชื่อสมัครใช้ได้เร็วขึ้น โดยแนะนำที่อยู่ใกล้เคียงได้ทันทีด้วยการแตะนิ้วเพียงไม่กี่ครั้ง และแสดงที่อยู่ที่ป้อนเพื่อการยืนยันด้วยภาพ ช่วยให้ผู้ใช้มั่นใจว่าป้อนที่อยู่ที่ถูกต้องแล้ว การยืนยันที่อยู่ของผู้ใช้โดยใช้ตำแหน่งปัจจุบันของผู้ใช้ยังช่วยป้องกันการประพฤติมิชอบ รวมถึงเพิ่มความมั่นใจให้กับผู้ใช้ในผลิตภัณฑ์และบริการของคุณอีกด้วย การยืนยันยังช่วยเพิ่มความมั่นใจให้คุณในการระบุ ธนาคารเสมือนและบัตรเครดิตได้ทันที
หัวข้อนี้ให้คำแนะนำในการใช้งานสำหรับการสร้างประสบการณ์การลงชื่อสมัครใช้แบบรวดเร็วและได้รับการยืนยันด้วย Google Maps Platform เนื่องจากผู้ใช้มักจะลงชื่อสมัครใช้บนอุปกรณ์เคลื่อนที่ ตัวอย่างการใช้งานในหัวข้อนี้ส่วนใหญ่จะมุ่งเน้นที่ Android (ดูแหล่งที่มาตัวอย่างแบบเต็มได้ที่นี่) นอกจากนี้ คุณยังสามารถใช้ iOS SDK เพื่อทำสิ่งเดียวกันนี้ได้อีกด้วย
แผนภาพต่อไปนี้แสดง API หลักที่เกี่ยวข้องกับการสร้างโซลูชัน (คลิกเพื่อขยาย)
กำลังเปิดใช้ API
หากต้องการใช้คำแนะนำเหล่านี้ คุณต้องเปิดใช้ API ต่อไปนี้ใน Google Cloud Console
- Maps SDK สำหรับ Android (หรือ API สำหรับแพลตฟอร์มที่คุณเลือก)
- Places API
- API การระบุพิกัดทางภูมิศาสตร์
ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าได้ที่การเริ่มต้นใช้งาน Google Maps Platform
ส่วนแนวทางปฏิบัติแนะนำ
ต่อไปนี้คือแนวทางปฏิบัติและการปรับแต่งที่เราจะกล่าวถึงในหัวข้อนี้
- ไอคอนเครื่องหมายถูกเป็นแนวทางปฏิบัติแนะนำหลัก
- ไอคอนดาวเป็นการปรับแต่งที่ไม่บังคับแต่แนะนำให้ทำเพื่อเพิ่มประสิทธิภาพโซลูชัน
การเพิ่มการเติมข้อความอัตโนมัติในช่องป้อนข้อมูล | ป้อนข้อมูลแบบฟอร์มที่อยู่โดยอัตโนมัติ เพิ่มฟังก์ชันประเภทที่ใช้ทันทีเพื่อปรับปรุงประสบการณ์ของผู้ใช้ในทุกแพลตฟอร์มและปรับปรุงความถูกต้องของที่อยู่โดยใช้การกดแป้นพิมพ์ขั้นต่ำ | |
การแสดงภาพการยืนยันที่อยู่ | ทำให้ผู้ใช้เห็นที่อยู่ของตนบนแผนที่เป็นภาพยืนยันว่าได้ป้อนที่อยู่ที่ถูกต้อง | |
การเปรียบเทียบที่อยู่ที่ผู้ใช้ป้อนกับตำแหน่งของอุปกรณ์ | เปรียบเทียบที่อยู่ที่เลือกหรือกรอกของผู้ใช้กับตำแหน่งปัจจุบันของอุปกรณ์เพื่อช่วยระบุว่าผู้ใช้อยู่ในที่อยู่ที่ระบุ (ผู้ใช้ควรอยู่ที่บ้านเมื่อลงชื่อสมัครใช้เพื่อให้วิธีนี้ทำงานได้) | |
เคล็ดลับเพื่อเพิ่มประสิทธิภาพการลงชื่อสมัครใช้แบบรวดเร็วและได้รับการยืนยันให้ดียิ่งขึ้น | คุณปรับปรุงรายการที่อยู่ให้ดียิ่งขึ้นได้ด้วยส่วนเพิ่มเติม เช่น การปรับแต่งรูปลักษณ์ของวิดเจ็ตเติมข้อความอัตโนมัติ หรือให้ผู้ใช้เลือกชื่อธุรกิจหรือจุดสังเกตเป็นที่อยู่ |
การเพิ่มการเติมข้อความอัตโนมัติในช่องป้อนข้อมูล
ตัวอย่างนี้ใช้ Places SDK สำหรับ Android | ที่มีให้บริการ: iOS | JavaScript |
ฟีเจอร์เติมข้อความอัตโนมัติจะช่วยลดความซับซ้อนในการป้อนที่อยู่ในแอปพลิเคชัน ซึ่งนำไปสู่อัตรา Conversion ที่สูงขึ้นและช่วยให้ลูกค้าได้รับประสบการณ์การใช้งานที่ราบรื่น การเติมข้อความอัตโนมัติเป็นช่องข้อมูลเดียวที่ให้ป้อนได้อย่างรวดเร็ว พร้อมการคาดคะเนที่อยู่แบบ "พิมพ์ล่วงหน้า" ที่สามารถใช้สร้างแบบฟอร์มที่อยู่สำหรับการลงชื่อสมัครใช้โดยอัตโนมัติ เมื่อใช้การเติมข้อความอัตโนมัติในขั้นตอนการลงชื่อสมัครใช้ คุณจะสามารถทำสิ่งต่อไปนี้
- ลดข้อผิดพลาดในการป้อนที่อยู่
- ลดขั้นตอนในกระบวนการลงชื่อสมัครใช้
- ลดความซับซ้อนของประสบการณ์การป้อนที่อยู่ในอุปกรณ์เคลื่อนที่หรืออุปกรณ์ที่สวมใส่ได้
- ลดการกดแป้นพิมพ์และเวลาทั้งหมดที่ลูกค้าต้องใช้ในการลงชื่อสมัครใช้ลงได้อย่างมาก
เมื่อผู้ใช้เลือกช่องเติมข้อความอัตโนมัติและเริ่มพิมพ์ รายการของการคาดคะเนที่อยู่จะปรากฏขึ้น
เมื่อผู้ใช้เลือกที่อยู่จากรายการการคาดคะเน คุณสามารถใช้การตอบกลับเพื่อยืนยันที่อยู่และรับตำแหน่งได้ จากนั้นแอปพลิเคชันจะกรอกข้อมูลฟิลด์ที่ถูกต้องของแบบฟอร์มรายการที่อยู่ ดังที่แสดงในรูปต่อไปนี้
วิดีโอ: ปรับปรุงแบบฟอร์มที่อยู่ด้วยฟีเจอร์เติมข้อความอัตโนมัติ
แบบฟอร์มที่อยู่
Android
iOS
เว็บไซต์
Google Maps Platform มีวิดเจ็ตเติมข้อความสถานที่อัตโนมัติสำหรับแพลตฟอร์มอุปกรณ์เคลื่อนที่และเว็บ วิดเจ็ตที่แสดงในภาพก่อนหน้าจะมีกล่องโต้ตอบการค้นหาที่มีฟังก์ชันเติมข้อความอัตโนมัติในตัวซึ่งคุณยังเพิ่มประสิทธิภาพสําหรับการค้นหาที่กำหนดขอบเขตระดับตำแหน่งได้
ส่วนนี้จะอธิบายวิธีใช้การเติมข้อความอัตโนมัติเกี่ยวกับสถานที่สำหรับการลงชื่อสมัครใช้แบบรวดเร็วและได้รับการยืนยัน
การเพิ่มวิดเจ็ตเติมข้อความอัตโนมัติเกี่ยวกับสถานที่
ใน Android คุณสามารถเพิ่มวิดเจ็ตเติมข้อความอัตโนมัติโดยใช้ Intent การเติมข้อความอัตโนมัติ ซึ่งเปิด "สถานที่เติมข้อความอัตโนมัติ" จากช่องป้อนข้อมูลที่อยู่บรรทัดที่ 1 ซึ่งผู้ใช้จะเริ่มป้อนที่อยู่ เมื่อเริ่มพิมพ์ ผู้ใช้จะสามารถเลือกที่อยู่จากรายการการคาดคะเนจากการเติมข้อความอัตโนมัติ
ขั้นแรก ให้เตรียมตัวเปิดกิจกรรมโดยใช้ 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"); } });
ต่อไป ให้กำหนดพร็อพเพอร์ตี้ของช่อง ตำแหน่ง และประเภทของพร็อพเพอร์ตี้ของการเติมข้อความอัตโนมัติใน Place แล้วสร้างด้วย Autocomplete.IntentBuilder
ขั้นตอนสุดท้าย ให้เปิด Intent โดยใช้ 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
ก่อนหน้านี้ยังระบุสิ่งที่ควรทำเมื่อแสดงผลลัพธ์กิจกรรมในโค้ดเรียกกลับอีกด้วย หากผู้ใช้เลือกการคาดการณ์ ระบบจะส่งการคาดการณ์ใน Intent ที่อยู่ในออบเจ็กต์ผลลัพธ์ เนื่องจาก Intent สร้างขึ้นโดย Autocomplete.IntentBuilder
เมธอด Autocomplete.getPlaceFromIntent()
จึงสามารถดึงออบเจ็กต์ Place จากออบเจ็กต์ดังกล่าวได้
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()
และจับคู่องค์ประกอบที่อยู่แต่ละรายการกับช่องป้อนข้อมูลที่ตรงกันในแบบฟอร์มที่อยู่ โดยใส่ค่าจากตำแหน่งที่ผู้ใช้เลือกลงในช่อง
การบันทึกข้อมูลที่อยู่จากการคาดคะเนแทนที่อยู่ที่ป้อนด้วยตนเองช่วยให้มั่นใจได้ว่าที่อยู่มีความถูกต้อง ทำให้มั่นใจได้ว่าที่อยู่นั้นเป็นที่รับทราบและนำส่งไปยังได้ และลดการกดแป้นพิมพ์ของผู้ใช้
ข้อควรพิจารณาเมื่อใช้การเติมข้อความอัตโนมัติ
Place Autocomplete มีตัวเลือกหลากหลายที่ช่วยให้มีความยืดหยุ่นในการใช้งาน หากคุณต้องการใช้มากกว่าแค่วิดเจ็ต คุณสามารถใช้บริการหลายอย่างร่วมกันเพื่อให้ได้สิ่งที่คุณต้องการในการจับคู่สถานที่ในลักษณะที่ถูกต้อง
สำหรับแบบฟอร์ม ADDRESS ให้ตั้งค่าพารามิเตอร์ประเภทเป็น
address
เพื่อจำกัดการจับคู่กับที่อยู่แบบเต็ม ดูข้อมูลเพิ่มเติมเกี่ยวกับประเภทที่คำขอเติมข้อมูลสถานที่อัตโนมัติรองรับกำหนดข้อจำกัดและอคติที่เหมาะสม หากคุณไม่ต้องการค้นหาทั่วโลก มีพารามิเตอร์จำนวนหนึ่งที่สามารถใช้การให้น้ำหนักพิเศษหรือจำกัดการจับคู่ที่ตรงกันเฉพาะบางภูมิภาคเท่านั้น
ใช้
RectangularBounds
เพื่อกำหนดขอบเขตรูปสี่เหลี่ยมผืนผ้าเพื่อจำกัดพื้นที่ ใช้setLocationRestriction()
เพื่อให้แน่ใจว่าระบบจะแสดงผลเฉพาะที่อยู่ในพื้นที่เหล่านั้นเท่านั้นใช้
setCountries()
เพื่อจำกัดการตอบกลับเฉพาะในบางประเทศ
ปล่อยให้ช่องแก้ไขได้ในกรณีที่การค้นหาบางช่องหายไปจากการจับคู่ และให้ลูกค้าอัปเดตที่อยู่ได้หากจำเป็น เนื่องจากที่อยู่ส่วนใหญ่ที่ส่งคืนโดยการเติมข้อมูลสถานที่อัตโนมัติไม่มีหมายเลขสถานที่ย่อย เช่น หมายเลขอพาร์ตเมนต์ ห้องชุด หรือหมายเลขห้อง คุณจึงสามารถย้ายโฟกัสไปที่ที่อยู่บรรทัดที่ 2 เพื่อกระตุ้นให้ผู้ใช้กรอกข้อมูลดังกล่าวหากจำเป็น
การแสดงภาพการยืนยันที่อยู่
ตัวอย่างนี้ใช้ Maps SDK สำหรับ Android | ที่มีให้บริการ: iOS | JavaScript |
ผู้ใช้จะเห็นภาพการยืนยันที่อยู่บนแผนที่ ซึ่งถือเป็นส่วนหนึ่งของการป้อนที่อยู่ วิธีนี้จะช่วยให้ผู้ใช้มั่นใจได้ว่าที่อยู่นั้นถูกต้อง
รูปต่อไปนี้แสดงแผนที่ด้านล่างที่อยู่พร้อมหมุดที่ที่อยู่ที่ป้อน
ตัวอย่างต่อไปนี้เป็นไปตามขั้นตอนพื้นฐานในการเพิ่มแผนที่ใน Android โปรดดูรายละเอียดเพิ่มเติมในเอกสารประกอบ
- การเพิ่ม
SupportMapFragment
(ในกรณีนี้เป็นการเพิ่มส่วนย่อยแบบไดนามิก) - การรับแฮนเดิลใน Fragment และลงทะเบียนโค้ดเรียกกลับ
- การจัดรูปแบบและเพิ่มเครื่องหมายลงในแผนที่
- การปิดใช้การควบคุมแผนที่
กำลังเพิ่ม SupportMapFragment
ก่อนอื่นให้เพิ่มส่วนย่อย SupportMapFragment
ลงในไฟล์ XML ของเลย์เอาต์
<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); } }
การรับแฮนเดิลลงในส่วนย่อยและลงทะเบียนโค้ดเรียกกลับ
หากต้องการรับแฮนเดิลไปยัง Fragment ให้เรียกใช้เมธอด
FragmentManager.findFragmentById
แล้วส่งรหัสทรัพยากรของ Fragment ในไฟล์เลย์เอาต์ หากคุณเพิ่ม Fragment แบบไดนามิก ให้ข้ามขั้นตอนนี้ไปเนื่องจากคุณเรียกข้อมูลแฮนเดิลแล้วเรียกใช้เมธอด
getMapAsync
เพื่อตั้งค่าโค้ดเรียกกลับใน Fragment
ตัวอย่างเช่น ถ้าคุณเพิ่มแฟรกเมนต์แบบคงที่
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 หรือคุณจะโหลดรหัสแผนที่ที่กำหนดไว้ด้วยการจัดรูปแบบ Maps ในระบบคลาวด์ก็ได้
@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 อีกตัวเลือกหนึ่งคือการเปิดใช้โหมด Lite เพื่อให้มีการโต้ตอบที่จำกัด
การเปรียบเทียบที่อยู่ที่ผู้ใช้ป้อนกับตำแหน่งของอุปกรณ์
การขอหลักฐานแสดงที่อยู่ (การมั่นใจว่าผู้ใช้อยู่ ณ ที่อยู่ที่ป้อนอาจซับซ้อนเนื่องจากปัจจัยต่างๆ เช่น ผู้ใช้ที่อยู่ห่างไกล ผู้ใช้ที่ย้ายไปยังที่อยู่ใหม่ หรือธุรกิจดิจิทัล (เช่น ธนาคารดิจิทัล) ที่ไม่มีสถานที่ตั้งจริงที่ผู้ใช้เข้าชมเพื่อแสดงหลักฐานที่อยู่พร้อมใบเรียกเก็บเงินค่าสาธารณูปโภคหรือเอกสารอื่นๆ การมอบวิธีดิจิทัลในการยืนยันที่อยู่ผู้ใช้จะช่วยให้คุณ ลงชื่อสมัครใช้ได้อย่างรวดเร็วและราบรื่น
การรักษาความปลอดภัยเป็นสิ่งสำคัญสูงสุดในการตรวจสอบที่อยู่ โดยเฉพาะอย่างยิ่งในกระบวนการลงชื่อสมัครใช้แบบดิจิทัล ส่วนนี้จะให้คำแนะนำและตัวอย่างสำหรับการตรวจสอบว่าสถานที่ตั้งของผู้ใช้ระหว่างการลงชื่อสมัครใช้ตรงกับที่อยู่ที่ผู้ใช้ป้อนหรือไม่
กระบวนการเปรียบเทียบที่อยู่ที่ป้อนกับตำแหน่งของอุปกรณ์มีขั้นตอนดังต่อไปนี้
- การแปลงที่อยู่ที่ผู้ใช้ป้อนเป็นพิกัดทางภูมิศาสตร์
- การแจ้งผู้ใช้เพื่อขอสิทธิ์ดูตำแหน่งของอุปกรณ์
- การคำนวณระยะทางระหว่างที่อยู่ที่ป้อนและตำแหน่งของอุปกรณ์ คุณสามารถกำหนดระยะทาง สูงสุดสำหรับการจับคู่ตำแหน่งกับที่อยู่
รูปต่อไปนี้เป็นตัวอย่างวิธีแจ้งให้ผู้ใช้เปรียบเทียบที่อยู่ที่ป้อนกับตำแหน่งปัจจุบัน
การแปลงที่อยู่ที่ผู้ใช้ป้อนเป็นพิกัดทางภูมิศาสตร์
ตัวอย่างนี้ใช้ Places SDK สำหรับ Android | ที่มีให้บริการ: iOS | JavaScript | Geocoding API |
หลังจากที่ผู้ใช้ตกลงที่จะยืนยันที่อยู่ (โดยแตะ "ยืนยันว่าฉันอยู่ที่นั่นแล้ว" ในรูปก่อนหน้านี้) ขั้นตอนแรกในการเปรียบเทียบที่อยู่กับตำแหน่งปัจจุบันคือการแปลงที่อยู่ที่ป้อนให้เป็นพิกัดทางภูมิศาสตร์
หากผู้ใช้เลือกที่อยู่ด้วยฟีเจอร์เติมข้อความอัตโนมัติ โปรดขอ Place.Field.LAT_LNG
ในรายการช่องสถานที่ในการเติมข้อความอัตโนมัติตามที่แสดงในตัวอย่างข้อมูลโค้ดการเพิ่มวิดเจ็ตเติมสถานที่อัตโนมัติ และเรียกเมธอด Place.getLatLng()
เพื่อรับพิกัดทางภูมิศาสตร์ของที่อยู่ที่เลือก
coordinates = place.getLatLng();
หากผู้ใช้ป้อนที่อยู่ด้วยตนเองหรือทำการแก้ไขหลังจากที่ระบบเติมข้อมูลอัตโนมัติสถานที่กรอกข้อมูลในช่องแล้ว ให้ใช้บริการ Android Geocoder หรือ Geoที่อยู่ในรายการ API เพื่อค้นหาพิกัดที่ตรงกับที่อยู่นั้น
ตัวอย่าง
https://maps.googleapis.com/maps/api/geocode/json?address=1600%20Amphitheatre%2BParkway%2C%20Mountain%20View%2C%20CA%2094043&key=YOUR_API_KEY
อย่าลืมเข้ารหัส URL ในการเรียกไปยัง Geocoding API
ข้อมูลอ้างอิงด่วนในการเข้ารหัส URL: %20
= Space, %2B
= + (บวก), %2C
= , (คอมมา)
การแจ้งผู้ใช้เพื่อขอสิทธิ์ดูตำแหน่งของอุปกรณ์
คุณต้องขอสิทธิ์จากผู้ใช้เพื่อเปิดใช้บริการตำแหน่งจึงจะได้ตำแหน่งอุปกรณ์ของผู้ใช้ เมื่อใช้คำแนะนำในเอกสารประกอบของ Android เกี่ยวกับการสร้างแอปที่รับรู้ตำแหน่ง ให้ใช้ขั้นตอนต่อไปนี้
ขอสิทธิ์เข้าถึงตำแหน่งเป็นการให้สิทธิ์แบบครั้งเดียวในระดับที่แน่นอน (
ACCESS_FINE_LOCATION
)หากผู้ใช้ให้สิทธิ์เข้าถึงตําแหน่ง โปรดดูตําแหน่งของผู้ใช้
หากผู้ใช้ปฏิเสธการเข้าถึงตำแหน่ง ให้จัดการกับการปฏิเสธอย่างมีชั้นเชิง ตัวอย่างเช่น คุณสามารถแสดงข้อความประเภทต่อไปนี้ (สมมติว่าคุณไม่ได้จัดเก็บตำแหน่งปัจจุบันของผู้ใช้)
"หากคุณไม่ได้แจ้งให้แอปทราบตำแหน่งที่แน่นอน คุณจะต้องยืนยันทางไปรษณีย์เพื่อเปิดใช้งานบัญชี [ตกลง]"
รูปต่อไปนี้แสดงตัวอย่างพรอมต์ให้ผู้ใช้อนุญาตสิทธิ์เข้าถึงตำแหน่งของอุปกรณ์
หากต้องการตรวจสอบสิทธิ์ตำแหน่ง ให้เตรียม Launcher กิจกรรมที่จะ
ฟังผลลัพธ์
จากกิจกรรมที่เปิดด้วย
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
แล้วหรือยัง
หากไม่มี ให้ขอสิทธิ์จากผู้ใช้โดยเปิดกิจกรรมคำขอสิทธิ์โดยใช้ Launcher ที่กำหนดไว้ในขั้นตอนก่อนหน้า
private void checkLocationPermissions() { if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { getAndCompareLocations(); } else { requestPermissionLauncher.launch( ACCESS_FINE_LOCATION); } }
เมื่อให้สิทธิ์ ACCESS_FINE_LOCATION
แล้ว ให้ใช้ผู้ให้บริการ Fused 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()); // ... }); }
การคำนวณระยะทางระหว่างที่อยู่ที่ป้อนและตำแหน่งของอุปกรณ์
ใช้คณิตศาสตร์เพื่อคำนวณระยะห่างระหว่างพิกัดละติจูด/ลองจิจูด 2 รายการ (ที่อยู่ที่ป้อนและตำแหน่งอุปกรณ์) โอเพนซอร์ส Maps SDK สำหรับไลบรารียูทิลิตีของ Android มีวิธีที่มีประโยชน์บางส่วนในการคำนวณระยะทางทรงกลมระหว่าง 2 จุดบนโลก
ก่อนอื่น ให้ติดตั้ง Maps SDK สำหรับไลบรารียูทิลิตีของ Android โดยเพิ่มทรัพยากร Dependency ต่อไปนี้ในไฟล์ build.gradle
ของแอป
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.0' }
จากนั้น กลับไปที่ไฟล์กิจกรรมหลังจากได้ตำแหน่งอุปกรณ์ที่ทราบล่าสุด ให้กำหนดรัศมีเป็นเมตรพิจารณาสถานที่ตั้งทั้ง 2 แห่งเป็น "ตรงกัน" รัศมีควรมีขนาดใหญ่พอที่จะมีความผันแปรในความแม่นยำของ GPS และขนาดสถานที่ตามที่อยู่ที่ผู้ใช้ป้อน เช่น
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
ออกจากคําจํากัดความอัตโนมัติ
ปรับแต่งรูปลักษณ์ของช่อง Place Autocomplete ให้เข้ากับสไตล์เว็บไซต์ของคุณ หากคุณต้องการควบคุมรูปลักษณ์ของสถานที่ เติมข้อความอัตโนมัติในแอปแทนที่จะใช้วิดเจ็ตของ Google คุณสามารถใช้การเติมข้อความอัตโนมัติด้วยการเขียนโปรแกรม เพื่อขับเคลื่อน UI ที่คุณสร้างด้วยบริการเติมข้อความอัตโนมัติ