Tổng quan
Google Maps Platform có sẵn cho web (JS, TS), Android và iOS, đồng thời cung cấp API dịch vụ web để nhận thông tin về địa điểm, chỉ đường, và khoảng cách. Các mẫu trong hướng dẫn này được viết cho một nền tảng, nhưng chúng tôi cung cấp các đường liên kết đến tài liệu để triển khai trên các nền tảng khác.
Trình tạo nhanh trong Google Cloud Console, giúp bạn tạo tính năng tự động hoàn thành biểu mẫu địa chỉ bằng cách sử dụng giao diện người dùng tương tác tạo mã JavaScript cho bạn.
Người dùng đã quen với việc sống và vận hành trong thế giới kỹ thuật số trong đó sự thuận tiện, tốc độ và tính bảo mật là những kỳ vọng cơ bản. Khi họ đăng ký xin cấp thẻ tín dụng, tài khoản ngân hàng hoặc khoản vay, họ mong muốn quá trình này sẽ nhanh chóng và dễ dàng.
Càng phải nhập hoặc nhập dữ liệu trùng lặp nhiều thì người dùng càng ít có khả năng mà bạn có thể giữ chân họ như là khách hàng. Tạo trải nghiệm đăng ký đã xác minh sẽ cải thiện trải nghiệm người dùng trong khi giúp bạn có khả năng giữ chân người dùng trên trang web của mình.
Địa chỉ được nhập theo cách thủ công có thể khiến số lượt chuyển đổi bị giảm đi, không chính xác Dữ liệu CRM và sai sót trong việc phân phối tốn kém. Nhanh và Quy trình đăng ký đã xác minh tạo ra nhanh hơn, đề xuất ngay các địa chỉ lân cận chỉ bằng vài lần nhấn và hiển thị địa chỉ đã nhập để xác nhận bằng hình ảnh, giúp người dùng tự tin rằng mình đã nhập đúng địa chỉ. Xác minh địa chỉ của người dùng dựa trên vị trí hiện tại của họ cũng giúp ngăn chặn hành vi lừa đảo đồng thời củng cố lòng tin của người dùng về sản phẩm và dịch vụ của bạn. Việc xác minh cũng có thể giúp bạn tự tin hơn trong việc cung cấp dịch vụ và thẻ tín dụng ngay lập tức.
Chủ đề này cung cấp hướng dẫn triển khai để xây dựng một Trình quản lý nhanh và Đăng ký đã xác minh với Nền tảng Google Maps. Vì người dùng rất có thể sẽ trên thiết bị di động, hầu hết các ví dụ triển khai trong trọng tâm của chủ đề về Android. (Bạn có thể thấy nguồn mẫu đầy đủ tại đây). Bạn cũng có thể sử dụng SDK iOS để thực hiện những việc tương tự.
Sơ đồ dưới đây cho thấy các API cốt lõi liên quan đến việc xây dựng giải pháp (nhấp để phóng to).
Bật API
Để triển khai các đề xuất này, bạn phải bật các API sau trong Bảng điều khiển Google Cloud:
- SDK Maps dành cho Android (hoặc API cho nền tảng mà bạn chọn)
- API Địa điểm
- API mã hoá địa lý
Để biết thêm thông tin về cách thiết lập, hãy xem phần Cách thực hiện bắt đầu với Nền tảng Google Maps.
Các mục phương pháp hay nhất
Sau đây là các phương pháp và cách tuỳ chỉnh mà chúng tôi sẽ đề cập trong chủ đề này.
- Biểu tượng dấu kiểm là một phương pháp cốt lõi hay nhất.
- Biểu tượng dấu sao là không bắt buộc nhưng nên dùng để cải thiện giải pháp.
Thêm tính năng tự động hoàn thành vào các trường nhập dữ liệu | Tự động điền biểu mẫu địa chỉ. Thêm chức năng nhập khi di chuyển vào cải thiện trải nghiệm người dùng trên tất cả các nền tảng và cải thiện địa chỉ với độ chính xác tối thiểu bằng thao tác nhấn phím. | |
Cung cấp hình ảnh xác nhận địa chỉ | Cho phép người dùng nhìn thấy địa chỉ của họ trên bản đồ dưới dạng xác nhận bằng hình ảnh để họ đã nhập đúng địa chỉ. | |
So sánh địa chỉ do người dùng nhập với vị trí thiết bị | So sánh địa chỉ mà người dùng đã chọn hoặc đã nhập với địa chỉ của họ vị trí hiện tại của thiết bị để giúp xác định rằng họ đang ở địa chỉ mà bạn chỉ định. (Để làm được điều này, người dùng phải có mặt ở nhà khi họ đăng ký.) | |
Mẹo để nâng cao hiệu quả của chế độ cài đặt Nhanh và Lượt đăng ký đã được xác minh | Bạn có thể cải thiện mục nhập địa chỉ hơn nữa bằng các bổ sung như như tuỳ chỉnh giao diện của tiện ích Tự động hoàn thành, hoặc cho phép người dùng chọn tên doanh nghiệp hoặc tên mốc làm của bạn. |
Thêm tính năng tự động hoàn thành vào trường nhập dữ liệu
Ví dụ này sử dụng: SDK Địa điểm dành cho Android | Cũng có: iOS | JavaScript |
Tính năng Tự động hoàn thành có thể giúp đơn giản hoá việc nhập địa chỉ trong ứng dụng, giúp thành tỷ lệ chuyển đổi cao hơn và trải nghiệm liền mạch cho khách hàng của bạn. Tính năng Tự động hoàn thành cung cấp một trường nhập nhanh duy nhất với tính năng "nhập trước" địa chỉ có thể dùng để tự động điền vào biểu mẫu địa chỉ đăng ký. Bằng cách kết hợp tính năng Tự động hoàn thành địa điểm vào quy trình đăng ký, bạn có thể:
- Giảm lỗi nhập địa chỉ.
- Giảm số bước trong quy trình đăng ký.
- Đơn giản hoá trải nghiệm nhập địa chỉ trên thiết bị di động hoặc thiết bị đeo.
- Giảm đáng kể số lần nhấn phím và tổng thời gian cần thiết để khách hàng đăng ký.
Khi người dùng chọn hộp mục nhập Tự động hoàn thành và bắt đầu nhập, một danh sách gợi ý địa chỉ.
Khi người dùng chọn một địa chỉ trong danh sách gợi ý, bạn có thể sử dụng phản hồi để xác minh địa chỉ và nhận vị trí. Đơn đăng ký của bạn sau đó có thể điền vào các trường chính xác của biểu mẫu nhập địa chỉ, như được hiển thị trong hình bên dưới.
Video: Cải thiện biểu mẫu địa chỉ bằng tính năng Tự động hoàn thành địa điểm
Biểu mẫu địa chỉ
Android
iOS
Web
Nền tảng Google Maps cung cấp tiện ích Tự động hoàn thành địa điểm cho thiết bị di động nền tảng và web. Tiện ích con, được hiển thị trong các hình trước, cung cấp hộp thoại tìm kiếm tích hợp sẵn tính năng tự động hoàn thành mà bạn thậm chí có thể tối ưu hoá cho hoạt động tìm kiếm theo phạm vi vị trí.
Phần này mô tả cách triển khai tính năng Tự động hoàn thành địa điểm cho tính năng Nhanh & Đăng ký được xác minh.
Thêm tiện ích Tự động hoàn thành địa điểm
Trong Android, bạn có thể thêm tiện ích tự động hoàn thành bằng cách sử dụng Ý định tự động hoàn thành khởi chạy tính năng Tự động hoàn thành địa điểm từ trường nhập dữ liệu Dòng địa chỉ 1, trong đó người dùng sẽ bắt đầu nhập địa chỉ của họ. Khi bắt đầu nhập, có thể chọn địa chỉ của họ từ danh sách các dự đoán Tự động hoàn thành.
Trước tiên, hãy chuẩn bị một trình chạy hoạt động bằng cách sử dụng
ActivityResultLauncher
!
để lắng nghe kết quả
khỏi hoạt động đã khởi chạy. Lệnh gọi lại kết quả sẽ chứa một đối tượng Địa điểm
tương ứng với địa chỉ mà người dùng chọn từ Tự động hoàn thành
dự đoán.
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"); } });
Tiếp theo, hãy xác định các thuộc tính trường, vị trí và loại của
Đặt ý định Tự động hoàn thành và tạo ý định đó bằng
Autocomplete.IntentBuilder
.
Cuối cùng, hãy chạy ý định bằng cách sử dụng ActivityResultLauncher
được xác định trong
mã mẫu trước đó.
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); }
Xử lý địa chỉ do tính năng Tự động hoàn thành về địa điểm trả về
Việc xác định ActivityResultLauncher
trước đó cũng xác định dữ liệu cần được xác định
được thực hiện khi kết quả hoạt động được trả về trong lệnh gọi lại. Nếu người dùng
đã chọn một gợi ý thì gợi ý đó sẽ được phân phối trong ý định có trong
đối tượng kết quả. Vì ý định là do Autocomplete.IntentBuilder
tạo,
phương thức Autocomplete.getPlaceFromIntent()
có thể trích xuất đối tượng Địa điểm
từ đó.
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"); } });
Từ đó, hãy gọi Place.getAddressComponents()
và so khớp từng địa chỉ
vào trường nhập tương ứng trong biểu mẫu địa chỉ, điền sẵn
có giá trị từ Địa điểm đã chọn của người dùng.
Thu thập dữ liệu địa chỉ từ dự đoán thay vì nhập theo cách thủ công giúp đảm bảo tính chính xác của địa chỉ, đồng thời đảm bảo rằng địa chỉ đó được biết đến và có thể được gửi tới và giảm thao tác nhấn phím của người dùng.
Những điều cần cân nhắc khi triển khai tính năng Tự động hoàn thành về địa điểm
Tính năng Tự động hoàn thành địa điểm có một số tuỳ chọn cho phép tính năng này linh hoạt nhờ nếu bạn muốn sử dụng nhiều thứ khác ngoài tiện ích. Bạn có thể sử dụng kết hợp các dịch vụ để cung cấp chính xác những gì bạn cần cho phù hợp với một vị trí theo đúng cách.
Đối với biểu mẫu ADDRESS, hãy đặt tham số loại thành
address
để hạn chế khớp với địa chỉ đường phố đầy đủ. Tìm hiểu thêm về các loại được hỗ trợ trong yêu cầu Tự động hoàn thành về địa điểm.Đặt các hạn chế và độ thiên vị thích hợp nếu bạn không cần tìm kiếm trên toàn thế giới. Có một số thông số có thể được sử dụng để thiên lệch hoặc hạn chế bất kỳ so khớp nào chỉ với các khu vực cụ thể.
Dùng
RectangularBounds
để thiết lập giới hạn hình chữ nhật mà bạn muốn ràng buộc một khu vực, hãy sử dụngsetLocationRestriction()
để đảm bảo chỉ các địa chỉ ở những khu vực đó được trả về.Sử dụng
setCountries()
để hạn chế câu trả lời ở một nhóm quốc gia nhất định.
Để các trường có thể chỉnh sửa trong trường hợp một số trường nhất định bị thiếu thông tin trùng khớp, và cho phép khách hàng cập nhật địa chỉ nếu cần. Vì hầu hết các địa chỉ do tính năng Tự động hoàn thành địa điểm trả về không chứa số tiền đề con như số căn hộ, số phòng hoặc số nhà, bạn có thể di chuyển tiêu điểm đến Dòng địa chỉ 2 để khuyến khích người dùng điền thông tin đó nếu cần.
Cung cấp hình ảnh xác nhận địa chỉ
Ví dụ này sử dụng: SDK Bản đồ dành cho Android | Cũng có: iOS | JavaScript |
Trong phần nhập địa chỉ, hãy cung cấp cho người dùng xác nhận bằng hình ảnh về của bạn trên bản đồ. Điều này giúp người dùng đảm bảo thêm rằng địa chỉ là chính xác.
Hình sau đây hiển thị bản đồ bên dưới địa chỉ có ghim tại địa chỉ đó đã tham gia.
Ví dụ sau đây thực hiện các bước cơ bản để thêm bản đồ trong Android. Hãy tham khảo tài liệu để biết thêm chi tiết.
- Thêm
SupportMapFragment
(trong trường hợp này là thêm một mảnh một cách linh động) - Xử lý mảnh và đăng ký lệnh gọi lại
- Tạo kiểu và thêm điểm đánh dấu vào bản đồ
- Tắt các chế độ kiểm soát bản đồ
Đang thêm SupportMapFragment
Trước tiên, hãy thêm một mảnh SupportMapFragment
vào
tệp XML bố cục.
<fragment android:name="com.google.android.gms.maps.SupportMapFragment" android:id="@+id/confirmation_map" android:layout_width="match_parent" android:layout_height="match_parent"/>
Sau đó, hãy lập trình để thêm mảnh nếu chưa có.
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); } }
Lấy tên người dùng đối với mảnh và đăng ký lệnh gọi lại
Để xử lý mảnh, hãy gọi phương thức Phương thức
FragmentManager.findFragmentById
và truyền phương thức đó mã nhận dạng tài nguyên của mảnh trong tệp bố cục. Nếu bạn đã thêm mảnh linh động, hãy bỏ qua bước này vì bạn đã truy xuất tên người dùng.Gọi phương thức
getMapAsync
để đặt lệnh gọi lại trên mảnh.
Ví dụ: nếu bạn đã thêm mảnh theo cách tĩnh:
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);
Tạo kiểu và thêm điểm đánh dấu vào bản đồ
Khi bản đồ đã sẵn sàng, hãy thiết lập kiểu, căn giữa máy ảnh và thêm một điểm đánh dấu tại toạ độ của địa chỉ đã nhập. Mã sau đây sử dụng kiểu được xác định trong đối tượng JSON hoặc bạn có thể tải mã bản đồ có đã được xác định với Định kiểu bản đồ trên đám mây.
@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)); }
Tắt các chế độ điều khiển bản đồ
Để đơn giản hoá bản đồ bằng cách hiển thị vị trí mà không cần thêm các chế độ điều khiển khác trên bản đồ (chẳng hạn như la bàn, thanh công cụ hoặc các tính năng tích hợp sẵn khác), hãy cân nhắc tắt những chế độ điều khiển mà bạn không thấy nếu cần. Trên Android, có một tuỳ chọn khác là bật chế độ thu gọn để cung cấp một số ít tính tương tác.
So sánh địa chỉ do người dùng nhập với vị trí thiết bị
Lấy bằng chứng về địa chỉ – tự tin rằng người dùng đang ở địa chỉ mà họ đã nhập—có thể phức tạp vì các yếu tố như từ xa vị trí của người dùng, người dùng chuyển đến một địa chỉ mới hoặc các doanh nghiệp kỹ thuật số (chẳng hạn như ngân hàng kỹ thuật số) không có địa điểm thực tế mà người dùng có thể truy cập để cung cấp bằng chứng về địa chỉ cùng với hoá đơn dịch vụ tiện ích hoặc tài liệu. Việc cung cấp các phương thức kỹ thuật số để xác minh địa chỉ của người dùng cho phép bạn mang đến trải nghiệm đăng ký nhanh chóng, suôn sẻ.
Bảo mật là yếu tố tối quan trọng trong việc kiểm tra địa chỉ, đặc biệt là với thiết bị kỹ thuật số quá trình đăng ký. Phần này cung cấp hướng dẫn và mẫu để kiểm tra vị trí của người dùng trong quá trình đăng ký có khớp với địa chỉ họ nhập hay không của riêng họ.
Quá trình so sánh địa chỉ đã nhập với vị trí thiết bị bao gồm các bước sau:
- Chuyển đổi địa chỉ do người dùng nhập thành toạ độ địa lý.
- Nhắc người dùng cấp quyền truy cập vào thông tin vị trí của thiết bị của họ.
- Tính toán khoảng cách giữa địa chỉ đã nhập và vị trí thiết bị. Bạn có thể xác định khoảng cách tối đa được tính cho kết quả trùng khớp giữa địa chỉ và vị trí.
Hình ảnh sau đây là ví dụ về cách bạn có thể nhắc người dùng so sánh địa chỉ mà họ đã nhập vào vị trí hiện tại của mình.
Chuyển đổi địa chỉ do người dùng nhập thành toạ độ địa lý
Ví dụ này sử dụng: SDK Địa điểm dành cho Android | Cũng có: iOS | JavaScript | API mã hoá địa lý |
Sau khi người dùng đồng ý xác minh địa chỉ (bằng cách chạm vào "Xác minh rằng tôi đang ở đó" trong hình trước), bước đầu tiên trong việc so sánh địa chỉ với đang chuyển đổi địa chỉ đã nhập thành toạ độ địa lý.
Nếu người dùng đã chọn địa chỉ bằng tính năng Tự động hoàn thành địa điểm, hãy nhớ yêu cầu
Place.Field.LAT_LNG
trong danh sách trường Tự động hoàn thành về địa điểm như minh hoạ trong
Đoạn mã Thêm tiện ích Tự động hoàn thành địa điểm và gọi phương thức
Place.getLatLng()
để lấy toạ độ địa lý của địa chỉ đã chọn.
coordinates = place.getLatLng();
Nếu người dùng nhập địa chỉ của họ theo cách thủ công hoặc thực hiện chỉnh sửa sau Địa điểm Tính năng tự động hoàn thành đã điền các trường, sử dụng Dịch vụ Bộ mã hoá địa lý Android hoặc API mã hoá địa lý để tra cứu toạ độ tương ứng với địa chỉ đó.
Ví dụ
https://maps.googleapis.com/maps/api/geocode/json?address=1600%20Amphitheatre%2BParkway%2C%20Mountain%20View%2C%20CA%2094043&key=YOUR_API_KEY
Hãy nhớ mã hoá URL lệnh gọi đến API mã hoá địa lý.
Tham chiếu nhanh để mã hóa URL: %20
= dấu cách, %2B
= + (dấu cộng), %2C
= , (dấu phẩy)
Nhắc người dùng cấp quyền truy cập thông tin vị trí thiết bị của họ
Để có được thông tin vị trí thiết bị của người dùng, bạn cần yêu cầu người dùng cho phép bật dịch vụ vị trí. Sử dụng hướng dẫn trong tài liệu Android về xây dựng các ứng dụng nhận biết vị trí, triển khai quy trình sau:
Yêu cầu quyền truy cập thông tin vị trí (dưới dạng cấp một lần) ở mức độ chính xác (
ACCESS_FINE_LOCATION
).Nếu người dùng cấp quyền truy cập thông tin vị trí, hãy lấy thông tin vị trí của người dùng.
Nếu người dùng từ chối quyền truy cập thông tin vị trí, hãy xử lý từ chối một cách linh hoạt. Ví dụ: bạn có thể trình bày loại thông báo sau (giả sử bạn không lưu trữ vị trí hiện tại của người dùng):
"Nếu không cho ứng dụng biết vị trí chính xác của mình, bạn cần phải xác minh qua thư để kích hoạt tài khoản của bạn. [OK]"
Hình ảnh sau đây là ví dụ về lời nhắc người dùng cấp quyền lấy thông tin vị trí của thiết bị.
Để kiểm tra quyền truy cập thông tin vị trí, hãy chuẩn bị một trình chạy hoạt động
lắng nghe kết quả
từ hoạt động đã khởi chạy với
ActivityResultLauncher
.
Lệnh gọi lại kết quả sẽ chứa một Chuỗi cho biết liệu người dùng đã cấp quyền hay chưa
hoặc đã từ chối quyền được yêu cầu.
// 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"); } });
Sau đó, hãy kiểm tra xem ứng dụng đã có quyền ACCESS_FINE_LOCATION
hay chưa.
Nếu không, hãy yêu cầu người dùng cấp quyền bằng cách đưa ra yêu cầu cấp quyền
hoạt động bằng trình chạy được xác định ở bước trước.
private void checkLocationPermissions() { if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { getAndCompareLocations(); } else { requestPermissionLauncher.launch( ACCESS_FINE_LOCATION); } }
Sau khi được cấp quyền ACCESS_FINE_LOCATION
, hãy sử dụng vị trí kết hợp
để lấy thông tin vị trí xác định gần đây nhất
của thiết bị rồi tạo một đối tượng LatLng
từ thiết bị đó.
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()); // ... }); }
Tính khoảng cách giữa địa chỉ đã nhập và vị trí thiết bị
Sử dụng toán học để tính khoảng cách giữa hai toạ độ vĩ độ/kinh độ (địa chỉ và vị trí thiết bị đã nhập). Nguồn mở SDK Maps dành cho Thư viện tiện ích Android có một số phương pháp thuận tiện để tính khoảng cách hình cầu giữa hai điểm trên Trái Đất.
Trước tiên, hãy cài đặt SDK Maps cho Thư viện tiện ích Android bằng cách thêm đoạn mã sau đây
phần phụ thuộc vào tệp build.gradle.kts
của ứng dụng:
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") }
Sau đó, quay lại tệp hoạt động sau khi tải thông tin vị trí đã biết gần đây nhất của thiết bị, xác định bán kính tính bằng mét để xem hai vị trí là "phù hợp". Bán kính phải đủ lớn để tính đến sự thay đổi về độ chính xác của GPS và kích thước của địa điểm tại địa chỉ mà người dùng đã nhập. Ví dụ:
private static final double acceptableProximity = 150;
Sau đó, sử dụng phương thức thư viện tiện ích computeDistanceBetween()
để tính khoảng cách giữa vị trí thiết bị và vị trí do người dùng nhập vào
vị trí của địa chỉ. Nếu khoảng cách nằm trong bán kính đã xác định ở trên,
hãy xem xét các vị trí phù hợp.
// 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 }
Nếu địa chỉ và vị trí khớp, hiển thị xác nhận trong ứng dụng, như được hiển thị trong hình bên dưới.
Mẹo giúp cải thiện trải nghiệm Nhanh và Đăng ký đã xác minh
Cho phép người dùng nhập địa chỉ dựa trên doanh nghiệp hoặc địa điểm yêu thích
. Tính năng "nhập trước" dịch vụ gợi ý không chỉ hoạt động với địa chỉ
nhưng bạn cũng có thể chọn cho phép người dùng nhập tên doanh nghiệp hoặc tên mốc.
Để cho phép nhập cả địa chỉ và tên cơ sở, hãy xoá
thuộc tính types
trong định nghĩa Tự động hoàn thành.
Tuỳ chỉnh giao diện của hộp Tự động hoàn thành về địa điểm cho phù hợp với kiểu trang web của bạn. Nếu bạn muốn kiểm soát giao diện của Địa điểm Bạn có thể dùng tính năng tự động hoàn thành trong ứng dụng của mình thay vì dùng tiện ích của Google Đặt tính năng Tự động hoàn thành theo phương thức lập trình để hỗ trợ giao diện người dùng mà bạn xây dựng bằng dịch vụ Tự động hoàn thành địa điểm.