Tính năng Tự động hoàn thành (Mới) trả về các cụm từ gợi ý địa điểm trong phản hồi yêu cầu bao gồm chuỗi tìm kiếm văn bản và giới hạn địa lý kiểm soát khu vực tìm kiếm. Tính năng tự động hoàn thành có thể so khớp dựa trên từ đầy đủ và chuỗi con của thông tin đầu vào, phân giải tên địa điểm, địa chỉ và mã cộng. Ứng dụng của bạn có thể gửi truy vấn khi người dùng nhập, để cung cấp các dự đoán truy vấn và địa điểm nhanh chóng.
Ví dụ: bạn gọi tính năng Tự động hoàn thành bằng cách sử dụng một chuỗi chứa một phần dữ liệu đầu vào của người dùng, "Sicilian piz", với khu vực tìm kiếm giới hạn ở San Francisco, California. Sau đó, phản hồi chứa danh sách địa điểm các cụm từ gợi ý khớp với chuỗi tìm kiếm và khu vực tìm kiếm, chẳng hạn như nhà hàng có tên là "Sicilian Pizza Kitchen".
Thông tin dự đoán về địa điểm được trả về được thiết kế để hiển thị cho người dùng nhằm hỗ trợ họ chọn địa điểm mong muốn. Bạn có thể tạo yêu cầu Thông tin chi tiết về địa điểm (Mới) để biết thêm thông tin về bất kỳ kết quả dự đoán địa điểm nào được trả về.
Yêu cầu tự động hoàn thành (Mới)
Ứng dụng của bạn có thể tải danh sách tên địa điểm được dự đoán và/hoặc
địa chỉ từ API tự động hoàn thành bằng cách gọi
PlacesClient.findAutocompletePredictions()
,
truyền một
FindAutocompletePredictionsRequest
. Ví dụ bên dưới cho thấy một lệnh gọi hoàn chỉnh đến PlacesClient.findAutocompletePredictions()
.
Places.initializeWithNewPlacesApiEnabled(context, apiKey); final List<Field> placeFields = getPlaceFields(); LatLng center = new LatLng(37.7749, -122.4194); CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000); final FindAutocompletePredictionsRequest autocompletePlacesRequest = FindAutocompletePredictionsRequest.builder() .setQuery("Sicilian piz") .setRegionCode("ES") .setLocationRestriction(circle) .build()); placesClient.findAutocompletePredictions(autoCompletePlacesRequest) .addOnSuccessListener( (response) -> { List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions(); } ).addOnFailureListener( exception -> { Log.e(TAG, "some exception happened" + exception.getMessage()); }) );
Câu trả lời tự động hoàn thành (Mới)
API trả về một
FindAutocompletePredictionsResponse
theo phong cách
Task
.
FindAutocompletePredictionsResponse
chứa danh sách tối đa 5 đối tượng AutocompletePrediction
đại diện cho các địa điểm được dự đoán. Danh sách này có thể trống, nếu không có
địa điểm đã biết tương ứng với truy vấn và tiêu chí lọc.
Đối với mỗi địa điểm được dự đoán, bạn có thể gọi các phương thức sau để truy xuất địa điểm chi tiết:
getFullText(CharacterStyle)
sẽ trả về toàn bộ văn bản của nội dung mô tả địa điểm. Đây là sự kết hợp giữa văn bản chính và văn bản phụ. Ví dụ: "Tháp Eiffel, Đại lộ Anatole France, Paris, Pháp". Ngoài ra, phương thức này cho phép bạn làm nổi bật các phần mô tả khớp với nội dung tìm kiếm bằng một kiểu mà bạn chọn, sử dụngCharacterStyle
. Tham sốCharacterStyle
là không bắt buộc. Đặt thành rỗng nếu bạn không cần bất kỳ đánh dấu nào.getPrimaryText(CharacterStyle)
trả về văn bản chính mô tả một địa điểm. Đây thường là tên của địa điểm. Ví dụ: "Tháp Eiffel" và "123 Pitt Street".getSecondaryText(CharacterStyle)
sẽ trả về văn bản thành phần con của một nội dung mô tả địa điểm. Điều này rất hữu ích, đối với chẳng hạn như dòng thứ hai khi hiện các cụm từ gợi ý của tính năng tự động hoàn thành. Ví dụ: "Avenue Anatole France, Paris, France" và "Sydney, New South Wales".getPlaceId()
trả về mã địa điểm của địa điểm được dự đoán. Mã địa điểm là giá trị nhận dạng văn bản giúp xác định duy nhất một địa điểm. Bạn có thể sử dụng mã này để truy xuất lại đối tượngPlace
sau này. Để biết thêm thông tin về mã địa điểm trong Tự động hoàn thành, xem Chi tiết địa điểm (Mới). Dành cho tất cả mọi người thông tin về mã địa điểm, hãy xem Mã địa điểm tổng quan.getTypes()
trả về danh sách các loại địa điểm liên kết với địa điểm này.getDistanceMeters()
trả về khoảng cách theo đường thẳng tính bằng mét giữa địa điểm này và điểm gốc được chỉ định trong yêu cầu.
Thông số bắt buộc
-
Truy vấn
Chuỗi văn bản cần tìm kiếm. Chỉ định từ đầy đủ và chuỗi con, tên địa điểm, địa chỉ và mã địa điểm. Dịch vụ Tự động hoàn thành (Mới) trả về kết quả phù hợp đề xuất dựa trên chuỗi này và kết quả đơn hàng dựa vào mức độ liên quan mà họ cảm nhận được.
Để đặt tham số truy vấn, hãy gọi
setQuery()
khi tạo đối tượngFindAutocompletePredictionsRequest
.
Thông số tùy chọn
-
Loại chính
Danh sách tối đa 5 giá trị loại trong các loại Bảng A hoặc Bảng B dùng để lọc địa điểm được trả về trong phản hồi. Địa điểm phải khớp với một trong các giá trị loại chính được chỉ định để được đưa vào câu trả lời.
Một địa điểm chỉ có thể có một loại chính trong số các loại Bảng A hoặc Bảng B được liên kết với địa điểm đó. Ví dụ: loại chính có thể là
"mexican_restaurant"
hoặc"steak_house"
.Yêu cầu sẽ bị từ chối kèm theo lỗi
INVALID_REQUEST
nếu:- Chỉ định nhiều hơn 5 loại.
- Mọi loại không nhận dạng được đều được chỉ định.
Để đặt tham số loại chính, hãy gọi phương thức
setTypesFilter()
khi tạo đối tượngFindAutocompletePredictionsRequest
. -
Quốc gia
Chỉ bao gồm kết quả từ danh sách quốc gia được chỉ định, được chỉ định dưới dạng danh sách gồm tối đa 15 giá trị gồm hai ký tự ccTLD ("miền cấp cao nhất"). Nếu bạn bỏ qua, hệ thống sẽ không áp dụng quy định hạn chế nào cho phản hồi. Ví dụ: để giới hạn khu vực ở Đức và Pháp:
Nếu bạn chỉ định cả
locationRestriction
vàincludedRegionCodes
, các kết quả nằm trong khu vực giao nhau của hai chế độ cài đặt này.Để đặt thông số quốc gia, hãy gọi
setCountries()
khi tạo đối tượngFindAutocompletePredictionsRequest
. -
Độ lệch đầu vào
Độ dời ký tự Unicode dựa trên 0 cho biết vị trí con trỏ trong truy vấn. Vị trí con trỏ có thể ảnh hưởng đến cụm từ gợi ý mà hệ thống trả về. Nếu trống, giá trị mặc định sẽ là độ dài của truy vấn.
Để đặt thông số chênh lệch đầu vào, hãy gọi
setInputOffset()
khi tạo đối tượngFindAutocompletePredictionsRequest
. Sự thiên vị về vị trí hoặc hạn chế về vị trí
Bạn có thể chỉ định thiên lệch vị trí hoặc hạn chế về vị trí, nhưng không phải cả hai để xác định khu vực tìm kiếm. Hãy coi việc hạn chế vị trí là việc xác định khu vực nơi kết quả phải xuất hiện và độ lệch về vị trí chỉ định khu vực gần đó để tìm kết quả. Điểm khác biệt chính là với độ lệch vị trí, kết quả nằm ngoài khu vực được chỉ định vẫn có thể được trả về.
Xu hướng vị trí
Chỉ định một khu vực để tìm kiếm. Vị trí này là thiên kiến, không phải là hạn chế, do đó, kết quả ra ngoài vùng được chỉ định vẫn có thể được trả về.
Để đặt tham số độ lệch vị trí, hãy gọi phương thức
setLocationBias()
khi tạo đối tượngFindAutocompletePredictionsRequest
.Hạn chế về vị trí
Chỉ định một vùng để tìm kiếm. Hệ thống sẽ không trả về kết quả nằm ngoài khu vực đã chỉ định.
Để đặt thông số hạn chế vị trí, hãy gọi phương thức
setLocationRestriction()
khi tạo đối tượngFindAutocompletePredictionsRequest
.
Chỉ định khuynh hướng vị trí hoặc vùng hạn chế về vị trí dưới dạng Khung nhìn hình chữ nhật hoặc dưới dạng hình tròn.
Đường tròn được xác định bằng tâm điểm và bán kính tính bằng mét. Bán kính phải nằm trong khoảng từ 0 đến 50000. Giá trị mặc định là 0.0. Đối với việc hạn chế vị trí, bạn phải đặt bán kính thành một giá trị lớn hơn 0,0. Nếu không, yêu cầu sẽ không trả về kết quả nào.
Hình chữ nhật là một khung nhìn vĩ độ – kinh độ, được biểu thị dưới dạng hai theo đường chéo đối diện
low
vàhigh
điểm. Khung nhìn được coi là một vùng kín, nghĩa là bao gồm cả ranh giới của vùng đó. Giới hạn vĩ độ phải nằm trong khoảng từ -90 đến 90 độ và giới hạn kinh độ phải nằm trong khoảng từ -180 độ đến 180 độ, bao gồm cả hai giá trị sau:- Nếu
low
=high
, khung nhìn chỉ bao gồm một điểm duy nhất đó. - Nếu
low.longitude
>high.longitude
, thì dải kinh độ sẽ bị đảo ngược (khung nhìn cắt ngang đường kinh độ 180 độ). - Nếu
low.longitude
= -180 độ vàhigh.longitude
= 180 độ, thì khung nhìn sẽ bao gồm tất cả kinh độ. - Nếu
low.longitude
= 180 độ vàhigh.longitude
= -180 độ, phạm vi kinh độ trống.
Bạn phải điền cả
low
vàhigh
và hộp được biểu thị không được để trống. Khung nhìn trống sẽ dẫn đến lỗi.- Nếu
-
Điểm gốc
Điểm gốc để tính khoảng cách theo đường thẳng đến đích (truy cập bằng
getDistanceMeters()
). Nếu bạn bỏ qua giá trị này, thì khoảng cách theo đường thẳng sẽ không được trả về. Phải được chỉ định dưới dạng tọa độ vĩ độ và kinh độ:Để đặt tham số gốc, hãy gọi phương thức
setOrigin()
khi tạo đối tượngFindAutocompletePredictionsRequest
. -
Mã vùng
Mã vùng dùng để định dạng câu trả lời, bao gồm cả định dạng địa chỉ, được chỉ định làm ccTLD ("miền cấp cao nhất") 2 ký tự. Hầu hết mã ccTLD (miền cấp cao nhất theo mã quốc gia) đều giống với mã ISO 3166-1, với một số ngoại lệ đáng chú ý. Ví dụ: ccTLD (miền cấp cao nhất theo mã quốc gia) của Vương quốc Anh là "Vương quốc Anh" (.co.uk) trong khi mã ISO 3166-1 của trang web là "gb" (về mặt kỹ thuật cho pháp nhân "Vương quốc Anh và Bắc Ireland").
Nếu bạn chỉ định mã vùng không hợp lệ, API sẽ trả về
INVALID_ARGUMENT
. Thông số này có thể ảnh hưởng đến kết quả dựa trên luật hiện hành.Để đặt tham số mã khu vực, hãy gọi phương thức
setRegionCode()
khi tạo đối tượngFindAutocompletePredictionsRequest
. -
Mã thông báo phiên
Mã thông báo phiên là các chuỗi do người dùng tạo, theo dõi các lệnh gọi Tự động hoàn thành (Mới) dưới dạng "phiên". Tính năng tự động hoàn thành sử dụng mã thông báo phiên để nhóm các giai đoạn truy vấn và lựa chọn của một lượt tìm kiếm tự động hoàn thành của người dùng thành một phiên riêng biệt cho mục đích thanh toán. Phiên bắt đầu khi người dùng bắt đầu nhập truy vấn và kết thúc khi họ chọn một địa điểm. Mỗi phiên có thể có nhiều cụm từ tìm kiếm, theo sau là một lựa chọn địa điểm. Khi một phiên hoạt động có kết thúc, mã thông báo không còn hợp lệ; ứng dụng của bạn phải tạo một mã thông báo mới cho từng phiên hoạt động. Bạn nên sử dụng mã thông báo phiên cho tất cả quảng cáo có lập trình phiên tự động hoàn thành (khi bạn nhúng một mảnh hoặc khởi chạy tính năng tự động hoàn thành bằng ý định thì API sẽ tự động xử lý việc này).
Tính năng Tự động điền sử dụng
AutocompleteSessionToken
để xác định từng phiên. Ứng dụng của bạn sẽ truyền mã thông báo phiên mới khi bắt đầu mỗi phiên mới, sau đó chuyển cùng mã thông báo đó cùng với ID địa điểm vào lệnh gọi tiếp theo tớifetchPlace()
để truy xuất Thông tin chi tiết về địa điểm cho địa điểm đã được người dùng chọn.Để đặt tham số mã thông báo phiên, hãy gọi phương thức
setSessionToken()
khi tạo đối tượngFindAutocompletePredictionsRequest
.Để biết thêm thông tin, hãy xem phần Mã thông báo phiên.
Ví dụ về tính năng Tự động hoàn thành (Mới)
Sử dụng tính năng hạn chế vị trí và thiên vị vị trí
Tự động hoàn thành (Mới) sử dụng xu hướng IP theo mặc định là kiểm soát khu vực tìm kiếm. Với xu hướng IP, API sử dụng địa chỉ IP của làm sai lệch kết quả. Bạn có thể tuỳ ý sử dụng thuộc tính vị trí hạn chế hoặc thiên vị vị trí, nhưng không cả hai, để chỉ định một khu vực cần tìm kiếm.
Giới hạn vị trí chỉ định khu vực cần tìm kiếm. Kết quả nằm ngoài phạm vi được chỉ định sẽ không được trả về. Ví dụ sau đây sử dụng quy tắc hạn chế về vị trí để giới hạn yêu cầu hạn chế vị trí hình tròn có bán kính 5000 mét ở giữa tại San Francisco:
Places.initializeWithNewPlacesApiEnabled(context, apiKey); final List<Field> placeFields = getPlaceFields(); LatLng center = new LatLng(37.7749, -122.4194); CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000); final FindAutocompletePredictionsRequest autocompletePlacesRequest = FindAutocompletePredictionsRequest.builder() .setQuery("Amoeba") .setLocationRestriction(circle) .build()); placesClient.findAutocompletePredictions(autoCompletePlacesRequest) .addOnSuccessListener( (response) -> { List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions(); } ).addOnFailureListener( exception -> { Log.e(TAG, "some exception happened" + exception.getMessage()); }) );
Với thiên vị về vị trí, vị trí được coi là thiên kiến, có nghĩa là các kết quả xung quanh vị trí được chỉ định có thể được trả về, bao gồm cả các kết quả nằm ngoài phạm vi . Ví dụ tiếp theo thay đổi yêu cầu trước đó để sử dụng tính năng sai lệch vị trí:
Places.initializeWithNewPlacesApiEnabled(context, apiKey); final List<Field> placeFields = getPlaceFields(); LatLng center = new LatLng(37.7749, -122.4194); CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000); final FindAutocompletePredictionsRequest autocompletePlacesRequest = FindAutocompletePredictionsRequest.builder() .setQuery("Amoeba") .setLocationBias(circle) .build()); placesClient.findAutocompletePredictions(autoCompletePlacesRequest) .addOnSuccessListener( (response) -> { List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions(); } ).addOnFailureListener( exception -> { Log.e(TAG, "some exception happened" + exception.getMessage()); }) );
Sử dụng loại chính
Sử dụng thông số primary types (loại chính) để hạn chế kết quả từ một yêu cầu thuộc một loại nhất định như được liệt kê trong Bảng A và Bảng T. Bạn có thể chỉ định một mảng gồm tối đa 5 giá trị. Nếu bạn bỏ qua, tất cả các loại đều được trả về.
Ví dụ sau đây chỉ định chuỗi truy vấn "Bóng đá" và sử dụng
type (loại) để giới hạn kết quả đối với các cơ sở thuộc loại
"sporting_goods_store"
:
Places.initializeWithNewPlacesApiEnabled(context, apiKey); final List<Field> placeFields = getPlaceFields(); final List<Place.Field> primaryTypes = Arrays.asList("sporting_goods_store"); LatLng center = new LatLng(37.7749, -122.4194); CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000); final FindAutocompletePredictionsRequest autocompletePlacesRequest = FindAutocompletePredictionsRequest.builder() .setQuery("Soccer") .setIncludedPrimaryTypes(primaryTypes) .setLocationBias(circle) .build()); placesClient.findAutocompletePredictions(autoCompletePlacesRequest) .addOnSuccessListener( (response) -> { List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions(); } ).addOnFailureListener( exception -> { Log.e(TAG, "some exception happened" + exception.getMessage()); }) );
Nếu bạn bỏ qua tham số loại chính, kết quả có thể bao gồm các cơ sở thuộc loại mà bạn không muốn, chẳng hạn như "athletic_field"
.
Sử dụng nguồn gốc của web
Khi bạn thêm tham số origin (điểm xuất phát) vào yêu cầu, được chỉ định dưới dạng toạ độ vĩ độ và kinh độ, API sẽ bao gồm khoảng cách theo đường thẳng từ điểm xuất phát đến đích đến trong phản hồi (truy cập bằng getDistanceMeters()
). Ví dụ này đặt điểm xuất phát là trung tâm của San Francisco:
Places.initializeWithNewPlacesApiEnabled(context, apiKey); final List<Field> placeFields = getPlaceFields(); LatLng center = new LatLng(37.7749, -122.4194); CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000); final FindAutocompletePredictionsRequest autocompletePlacesRequest = FindAutocompletePredictionsRequest.builder() .setQuery("Amoeba") .setOrigin(center) .setLocationRestriction(circle) .build()); placesClient.findAutocompletePredictions(autoCompletePlacesRequest) .addOnSuccessListener( (response) -> { List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions(); } ).addOnFailureListener( exception -> { Log.e(TAG, "some exception happened" + exception.getMessage()); }) );
Phân bổ
Bạn có thể sử dụng tính năng Tự động hoàn thành (Mới) ngay cả khi không có bản đồ. Nếu bạn hiển thị bản đồ, thì đó phải là bản đồ của Google. Khi hiển thị nội dung gợi ý từ dịch vụ Tự động hoàn thành (Mới) mà không có bản đồ, bạn phải thêm biểu trưng Google hiển thị cùng dòng với trường/kết quả tìm kiếm. Để biết thêm thông tin, hãy xem phần Hiển thị biểu trưng Google và thông tin ghi công.