Hướng dẫn triển khai quy trình Đăng ký nhanh & đã xác minh

Tổng quan

web iOS API

Nền tảng Google Maps có sẵn cho web (JS, TS), Android và iOS, đồng thời cũng cung cấp các API dịch vụ web để nhận thông tin về địa điểm, đường đi 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 đường liên kết đến tài liệu để triển khai trên các nền tảng khác.

Tạo ngay!

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 một giao diện người dùng tương tác có khả năng tạo mã JavaScript cho bạn.

Người dùng đã quen với việc sống và hoạt động trong một thế giới kỹ thuật số, trong đó sự tiện lợi, tốc độ và tính bảo mật là những kỳ vọng cơ bản. Khi họ đăng ký các dịch vụ như thẻ tín dụng, tài khoản ngân hàng hoặc khoản vay, họ kỳ vọng quy trình này sẽ nhanh chóng và dễ dàng.

Càng có nhiều người dùng phải nhập hoặc nhập dữ liệu trùng lặp, thì bạn càng có ít cơ hội giữ chân họ làm khách hàng. Việc tạo một trải nghiệm đăng ký nhanh chóng, dễ dàng và đã được xác minh sẽ cải thiện trải nghiệm người dùng, đồng thời giúp bạn tăng 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ể dẫn đến số lượt chuyển đổi giảm, dữ liệu CRM không chính xác và lỗi phân phối gây tốn kém. Tính năng Đăng ký nhanh và đã xác minh giúp đăng ký nhanh hơn, ngay lập tức đề xuất 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 trực quan, giúp người dùng cảm thấy yên tâm rằng họ đã nhập đúng địa chỉ. Việc xác minh địa chỉ của người dùng bằng vị trí hiện tại của họ cũng giúp ngăn chặn hành vi lừa đảo và củng cố niềm tin của người dùng đối với các 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ăng độ tin cậy ngay lập tức khi cung cấp ngân hàng ảo và thẻ tín dụng ảo.

Chủ đề này cung cấp hướng dẫn triển khai để xây dựng trải nghiệm Đăng ký nhanh và đã xác minh với Nền tảng Google Maps. Vì người dùng rất có thể sẽ đăng ký trên thiết bị di động, nên hầu hết các ví dụ về cách triển khai trong chủ đề này đều tập trung vào Android. (Bạn có thể xem nguồn mẫu đầy đủ tại đây). Bạn cũng có thể sử dụng iOS SDK để thực hiện những việc tương tự.

Sơ đồ sau đâ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 những đề xuất này, bạn phải bật các API sau trong Google Cloud Console:

Để biết thêm thông tin về cách thiết lập, hãy xem bài viết Bắt đầu với Nền tảng Google Maps.

Mục cá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 hay nhất.
  • Biểu tượng dấu sao là tuỳ chọn không bắt buộc nhưng bạn nên tuỳ chỉnh để nâng cao giải pháp.
Thêm tính năng tự động hoàn thành vào 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 dữ liệu khi dùng để cải thiện trải nghiệm người dùng trên tất cả nền tảng và cải thiện độ chính xác của địa chỉ nhờ chỉ cần số lần nhấn phím tối thiểu.
Cung cấp thông tin xác nhận địa chỉ bằng hình ảnh Cho phép người dùng xem địa chỉ của họ trên bản đồ dưới dạng hình ảnh xác nhận rằng 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 vị trí thiết bị hiện tại của họ để giúp xác định rằng họ đang ở địa chỉ được chỉ định. (Để làm như vậy, người dùng phải ở nhà khi đăng ký.)
Mẹo tăng cường hơn nữa quy trình Đăng ký nhanh và đã xác minh Bạn có thể cải thiện hơn nữa mục nhập địa chỉ bằng các tính năng bổ sung 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 địa chỉ.

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ủa địa điểm có thể đơn giản hóa việc nhập địa chỉ trong ứng dụng của bạn, mang lại 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 có thông tin gợi ý địa chỉ "nhập trước" mà có thể dùng để tự động điền 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ỉ.
  • Hãy giảm số bước trong quá 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ể các thao tác 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 nhập Tự động hoàn thành và bắt đầu nhập, một danh sách các gợi ý địa chỉ sẽ xuất hiện.

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 thông tin vị trí. Sau đó, ứng dụng của bạn 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ư minh hoạ trong hình sau.

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 các nền tảng di động và web. Tiện ích này (xuất hiện trong các hình trước) cung cấp một hộp thoại tìm kiếm tích hợp chức năng tự động hoàn thành. Bạn thậm chí có thể tối ưu hoá hoạt động tìm kiếm trong 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 Đăng ký nhanh và đã 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. Ý định này khởi chạy tính năng Tự động hoàn thành địa điểm từ trường nhập Dòng địa chỉ 1, nơi người dùng sẽ bắt đầu nhập địa chỉ của họ. Khi bắt đầu nhập, người dùng có thể chọn địa chỉ từ danh sách các cụm từ gợi ý 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. Trình chạy này sẽ lắng nghe kết quả từ 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ừ các dự đoán của tính năng Tự động hoàn thành.

    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 trường, vị trí và thuộc tính loại của ý định Tự động hoàn thành theo địa điểm 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 của địa điểm trả về

Việc xác định ActivityResultLauncher trước đó cũng xác định những việc cần 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 cụm từ gợi ý, thì cụm từ gợi ý đó sẽ được phân phối trong ý định có trong đối tượng kết quả. Vì ý định do Autocomplete.IntentBuilder xây dựng, nên 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 thành phần địa chỉ với trường nhập dữ liệu tương ứng trong biểu mẫu địa chỉ, điền sẵn giá trị từ Địa điểm đã chọn của người dùng vào trường này.

Việc thu thập dữ liệu địa chỉ từ thông tin dự đoán thay vì địa chỉ được nhập theo cách thủ công giúp đảm bảo tính chính xác của địa chỉ, đảm bảo rằng địa chỉ đã được biết và có thể được gửi đến, đồng thời 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 đị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 với cách triển khai 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ụ để nhận được chính xác những gì cần thiết nhằm so khớp 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ế kết quả khớp với địa chỉ đường phố đầy đủ. Hã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 theo địa điểm.

  • Thiết lập các hạn chế và độ chệch 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ố tham số có thể dùng để thiên vị hoặc hạn chế kết quả khớp với một số khu vực cụ thể.

    • Dùng RectangularBounds để thiết lập các giới hạn hình chữ nhật nhằm ràng buộc cho một khu vực, sử dụng setLocationRestriction() để đảm bảo chỉ trả về các địa chỉ trong các khu vực đó.

    • Sử dụng setCountries() để hạn chế câu trả lời cho một nhóm quốc gia nhất định.

  • Bạn có thể chỉnh sửa các trường trong trường hợp bỏ lỡ một số trường nhất định trong kết quả so khớp, đồng thời 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ỉ mà tính năng Tự động hoàn thành về địa điểm trả về đều không chứa các số cơ sở phụ như số căn hộ, số phòng hoặc số nhà, nên 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 xác nhận địa chỉ bằng hình ảnh

Ví dụ này sử dụng: SDK Bản đồ dành cho Android Cũng có: iOS | JavaScript

Trong quá trình nhập địa chỉ, hãy cung cấp cho người dùng thông tin xác nhận bằng hình ảnh về địa chỉ 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ị một bản đồ bên dưới địa chỉ có một ghim tại địa chỉ đã nhập.

Ví dụ sau đây làm theo 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.

Đ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 đó, thêm mảnh bằng cách lập trình nếu mảnh này 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);
        }
    }

Bắt đầu xử lý mảnh và đăng ký lệnh gọi lại

  1. Để xử lý mảnh, hãy gọi phương thức FragmentManager.findFragmentById rồi truyền vào 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 động, hãy bỏ qua bước này vì bạn đã truy xuất tên người dùng.

  2. Gọi phương thức getMapAsync để thiết lập lệnh gọi lại trên phân đoạn.

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 đặt kiểu, căn giữa máy ảnh và thêm đ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 xác định bằng tính năng Tạo kiểu cho bản đồ dựa 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));
    }

(Xem mã mẫu đầy đủ)

Tắt chế độ điều khiển bản đồ

Để bản đồ luôn đơn giản bằng cách hiển thị vị trí mà không cần các chế độ điều khiển bổ sung 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 khác), hãy cân nhắc tắt các chế độ điều khiển mà bạn thấy không cần thiết. Trên Android, một cách khác là bật chế độ thu gọn để giới hạn khả năng tương tác.

So sánh địa chỉ do người dùng nhập với vị trí thiết bị

Việc lấy bằng chứng về địa chỉ (bạn có thể yên tâm rằng người dùng đang ở địa chỉ họ đã nhập) có thể phức tạp do các yếu tố như vị trí của người dùng từ xa, người dùng chuyển đến một địa chỉ mới hoặc doanh nghiệp kỹ thuật số (chẳng hạn như ngân hàng kỹ thuật số) không có vị trí thực tế mà người dùng có thể ghé thăm để cung cấp bằng chứng về địa chỉ bằng hoá đơn dịch vụ tiện ích hoặc các giấy tờ khác. 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 giúp bạn có trải nghiệm đăng ký nhanh chóng và suôn sẻ hơn.

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 quy trình đăng ký bằng phương thức kỹ thuật số. Phần này cung cấp hướng dẫn và mẫu để kiểm tra xem vị trí của người dùng trong quá trình đăng ký có khớp với địa chỉ mà họ nhập làm địa chỉ của họ hay không.

Quy trình so sánh địa chỉ đã nhập với vị trí thiết bị bao gồm các bước sau:

  1. Chuyển đổi địa chỉ do người dùng nhập thành toạ độ địa lý.
  2. Nhắc người dùng cấp quyền để có được thông tin vị trí của thiết bị của họ.
  3. Tính toán khoảng cách giữa địa chỉ đã nhập và vị trí thiết bị. Bạn sẽ xác định được khoảng cách tối đa cần tính cho việc so khớp vị trí địa chỉ.

Hình sau đây là một 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ới vị trí hiện tại của họ.

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ã mã địa lý

Sau khi người dùng đồng ý xác minh địa chỉ (bằng cách nhấn vào "Xác minh tôi đang ở đó" trong hình trước), bước đầu tiên để so sánh địa chỉ với vị trí hiện tại là chuyển đổi địa chỉ đã nhập thành toạ độ địa lý.

Nếu người dùng đã chọn địa chỉ của họ 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 địa điểm như được hiển thị 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 khi tính năng Tự động hoàn thành địa điểm điền vào các trường, hãy sử dụng Dịch vụ Bộ mã hoá địa lý của Android hoặc API mã hoá địa lý để tra cứu các 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 cho lệnh gọi đến API mã hoá địa lý.

Tham chiếu nhanh về mã hoá 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 lấy thông tin vị trí của thiết bị

Để biết 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 cấp quyền để bật dịch vụ vị trí. Theo hướng dẫn trong tài liệu Android về cách xây dựng các ứng dụng nhận biết vị trí, hãy triển khai quy trình sau đây:

  • Yêu cầu cấp quyền truy cập thông tin vị trí ở cấp độ chính xác (ACCESS_FINE_LOCATION) một lần.

  • 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ý việc 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 bạn không cho ứng dụng biết vị trí chính xác của mình, bạn sẽ cần phải xác minh qua thư để kích hoạt tài khoản của mình. [OK]"

Hình sau đây minh hoạ một lời nhắc mẫu để người dùng cho phép việc thu thập 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 có khả năng theo dõi kết quả từ hoạt động đã khởi chạy bằng 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 hay từ chối cấp 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 chạy hoạt động yêu cầu cấp quyền thông qua 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ấp quyền ACCESS_FINE_LOCATION, hãy sử dụng trình cung cấp vị trí kết hợp để nhận 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 vĩ độ/kinh độ (địa chỉ đã nhập và vị trí thiết bị). Nguồn mở SDK Maps dành cho Thư viện tiện ích Android có một số phương thức tiện lợi để tính khoảng cách hình cầu giữa hai điểm trên Earth.

Trước tiên, hãy cài đặt SDK Maps dành cho Thư viện tiện ích Android bằng cách thêm phần phụ thuộc sau vào tệp build.gradle 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.0'
}

Sau đó, quay lại tệp hoạt động sau khi có được vị trí thiết bị đã biết gần đây nhất, hãy xác định bán kính tính bằng mét để coi hai vị trí này là "đã khớ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ỉ đã nhập của người dùng. Ví dụ:

private static final double acceptableProximity = 150;

Sau đó, hãy 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í địa chỉ do người dùng nhập. 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í trùng khớ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
}

(Xem mã mẫu đầy đủ)

Nếu địa chỉ và vị trí khớp nhau, hãy cho thấy thông báo xác nhận trong ứng dụng như minh hoạ trong hình sau.

Các mẹo giúp tăng cường hơn nữa quy trình Đăng ký nhanh và đã xác minh

Cho phép người dùng nhập địa chỉ dựa trên tên doanh nghiệp hoặc tên địa điểm yêu thích. Dịch vụ dự đoán "nhập trước" không chỉ hoạt động với các địa chỉ, mà bạn còn có thể 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 khỏi đị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 địa điểm để phù hợp với kiểu trang web của bạn. Nếu muốn kiểm soát giao diện của tính năng Tự động hoàn thành theo địa điểm trong ứng dụng của mình thay vì sử dụng tiện ích của Google, bạn có thể sử dụng tính năng Tự động hoàn thành địa điểm theo phương thức lập trình để cung cấp sức mạnh cho 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.