Autocomplete (New) renvoie des prédictions de lieux en réponse à une requête qui inclut une chaîne de recherche textuelle et des limites géographiques qui contrôlent la zone de recherche. La saisie semi-automatique peut établir une correspondance avec des mots et des sous-chaînes complets de l'entrée afin de trouver des noms de lieux, des adresses et des Plus Codes. Votre application peut envoyer des requêtes lors de la frappe pour indiquer les lieux et les requêtes possibles à la volée.
Par exemple, vous appelez Autocomplete en utilisant comme entrée une chaîne contenant une saisie partielle de l'utilisateur, "Sicilian piz", avec la zone de recherche limitée à San Francisco, en Californie. La réponse contient ensuite une liste de prédictions de lieux correspondant à la chaîne de recherche et à la zone de recherche, comme le restaurant "Sicilian Pizza Kitchen". Les prédictions de lieux renvoyées sont conçues pour être présentées à l'utilisateur afin de l'aider à sélectionner le lieu souhaité. Vous pouvez envoyer une requête Place Details (nouveau) pour obtenir plus d'informations sur les prédictions de lieux renvoyées.
Vous pouvez intégrer la fonctionnalité Saisie semi-automatique (nouveau) à votre application de deux manières principales :
- Ajoutez le widget Place Autocomplete : fournit une expérience de saisie semi-automatique de recherche prête à l'emploi grâce à la classe
PlaceAutocomplete
qui affiche des prédictions au fur et à mesure que l'utilisateur saisit du texte. - Obtenir des prédictions de lieux de manière programmatique : appelez l'API directement pour récupérer les prédictions et les afficher dans une interface utilisateur personnalisée.
Ajouter le widget Place Autocomplete
Pour proposer plus facilement une expérience de saisie semi-automatique de lieux cohérente, vous pouvez ajouter le widget Place Autocomplete à votre application. Ce widget fournit une interface dédiée en plein écran qui gère la saisie de l'utilisateur et affiche des prédictions de lieux, tout en renvoyant des objets AutocompletePrediction
à l'application. Vous pouvez ensuite envoyer une requête Place Details (New) pour obtenir des informations supplémentaires sur l'une des prédictions de lieux.
Comme lorsque vous obtenez des prédictions de lieux de manière programmatique, le widget Place Autocomplete vous permet d'utiliser des jetons de session pour regrouper les requêtes de saisie semi-automatique dans une session à des fins de facturation. Vous pouvez transmettre un jeton de session lorsque vous créez l'intention du widget en appelant setAutocompleteSessionToken()
. Si vous ne fournissez pas de jeton de session, le widget en créera un pour vous, auquel vous pourrez accéder en appelant getSessionTokenFromIntent()
. Pour en savoir plus sur l'utilisation des jetons de session, consultez À propos des jetons de session.
Pour ajouter le widget Place Autocomplete à votre application :
(Facultatif) Définissez un jeton de session. Si vous ne fournissez pas de jeton de session, le widget en créera un pour vous.
Définissez un
autocompleteIntent
avec les paramètres souhaités et votre jeton de session.Définissez un
ActivityResultLauncher
pourStartActivityForResult
. Ce lanceur gérera le résultat renvoyé par l'activité de saisie semi-automatique.Gérez le résultat dans le rappel de
ActivityResultLauncher
. Cela implique d'extraireAutocompletePrediction
etAutocompleteSessionToken
(si vous ne les avez pas fournis vous-même), de gérer les erreurs et, éventuellement, d'envoyer une requêtefetchPlace()
pour obtenir des informations supplémentaires sur un lieu.Lancez l'intent à l'aide de
placeAutocompleteActivityResultLauncher
.
Les exemples suivants montrent comment ajouter le widget Place Autocomplete à l'aide de Kotlin et de Java :
// Provide the API key that has enabled "Places API (New)" in the Google Cloud Console. Places.initializeWithNewPlacesApiEnabled(/* Context= */ context, /* API Key= */ key) // Optional, create a session token for Autocomplete request and the followup FetchPlace request. val sessionToken: AutocompleteSessionToken = AutocompleteSessionToken.newInstance() val autocompleteIntent: Intent = PlaceAutocomplete.createIntent(this) { // ... provide input params for origin, countries, types filter ... setAutocompleteSessionToken(sessionToken) } val placeAutocompleteActivityResultLauncher: ActivityResultLauncher<Intent> = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> val intent = result.data if (intent != null && result.resultCode == PlaceAutocompleteActivity.RESULT_OK) { // get prediction object val prediction: AutocompletePrediction? = PlaceAutocomplete.getPredictionFromIntent(intent!!) // get session token val sessionToken: AutocompleteSessionToken? = PlaceAutocomplete.getSessionTokenFromIntent(intent!!) // create PlacesClient to make FetchPlace request (optional) val placesClient: PlacesClient = Places.createClient(this) val response = placesClient.awaitFetchPlace(prediction.placeId, Field.DISPLAY_NAME) { sessionToken = sessionToken // optional } } } // Launch Activity placeAutocompleteActivityResultLauncher.launch(autocompleteIntent)
// Provide the API key that has enabled "Places API (New)" in the Google Cloud Console. Places.initializeWithNewPlacesApiEnabled(/* Context= */ context, /* API Key= */ key); // Optional, create a session token for Autocomplete request and the followup FetchPlace request AutocompleteSessionToken sessionToken = AutocompleteSessionToken.newInstance(); Intent autocompleteIntent = new PlaceAutocomplete.IntentBuilder() // ... set input params for origin, countries, types filter ... .setSessionToken(sessionToken) // optional .build(this); ActivityResultLauncher<Intent> placeAutocompleteActivityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult(ActivityResult result) { Intent intent = result.getData(); if (result.getResultCode() == PlaceAutocompleteActivity.RESULT_OK) { // get prediction object AutocompletePrediction prediction = PlaceAutocomplete.getPredictionFromIntent( Preconditions.checkNotNull(intent)); // get session token AutocompleteSessionToken sessionToken = PlaceAutocomplete.getSessionTokenFromIntent( Preconditions.checkNotNull(intent)); // create PlacesClient to make FetchPlace request (optional) PlacesClient placesClient = Places.createClient(this); FetchPlaceRequest request = FetchPlaceRequest.builder(prediction.getPlaceId(), Arrays.asList(Field.DISPLAY_NAME)) .setSessionToken(sessionToken).build(); Task<FetchPlaceResponse> task = placesClient.fetchPlace(request); } } } ); // Launch Activity placeAutocompleteActivityResultLauncher.launch(autocompleteIntent);
Obtenir des prédictions de lieux de manière programmatique
Votre application peut obtenir une liste des noms et/ou adresses de lieux prédits à partir de l'API Autocomplete en appelant PlacesClient.findAutocompletePredictions()
et en transmettant un objet FindAutocompletePredictionsRequest
. L'exemple ci-dessous montre un appel complet à 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()); }) );
Réponses Autocomplete (nouveau)
L'API renvoie un FindAutocompletePredictionsResponse
dans un Task
.
FindAutocompletePredictionsResponse
contient une liste de cinq objets AutocompletePrediction
maximum représentant les lieux prédits. La liste peut être vide si aucun lieu connu ne correspond à la requête et aux critères de filtrage.
Pour chaque lieu prédit, vous pouvez appeler les méthodes suivantes pour récupérer les détails du lieu :
getFullText(CharacterStyle)
renvoie le texte complet de la description d'un lieu. Il s'agit d'une combinaison du texte principal et du texte secondaire. Exemple : Tour Eiffel, avenue Anatole France, Paris, France. De plus, cette méthode vous permet de mettre en évidence les sections de la description qui correspondent à la recherche avec le style de votre choix, à l'aide deCharacterStyle
. Le paramètreCharacterStyle
est facultatif. Définissez-le sur "null" si vous n'avez pas besoin de mise en surbrillance.getPrimaryText(CharacterStyle)
renvoie le texte principal décrivant un lieu. Il s'agit généralement du nom du lieu. Exemples : Tour Eiffel et 123, rue Pitt.getSecondaryText(CharacterStyle)
renvoie le texte subsidiaire d'une description de lieu. Cela peut être utile, par exemple, comme deuxième ligne lorsque vous affichez des prédictions de saisie semi-automatique. Exemples : Avenue Anatole France, Paris, France et Sydney, Nouvelle-Galles du Sud.getPlaceId()
renvoie l'ID du lieu prédit. Un ID de lieu est un identifiant textuel qui identifie un lieu de façon unique. Vous pouvez l'utiliser pour récupérer l'objetPlace
ultérieurement. Pour en savoir plus sur les ID de lieu dans Autocomplete, consultez Place Details (nouveau). Pour obtenir des informations générales sur les ID de lieu, consultez la présentation des ID de lieu.getTypes()
renvoie la liste des types de lieux associés à ce lieu.getDistanceMeters()
renvoie la distance en ligne droite en mètres entre ce lieu et l'origine spécifiée dans la requête.
Paramètres obligatoires
-
Requête
Chaîne de texte sur laquelle effectuer la recherche. Spécifiez des mots et des sous-chaînes complets, des noms de lieux, des adresses et des Plus Codes. Le service Autocomplete (nouveau) renvoie les résultats correspondant à cette chaîne et les classe en fonction de leur pertinence estimée.
Pour définir le paramètre de requête, appelez la méthode
setQuery()
lors de la création de l'objetFindAutocompletePredictionsRequest
.
Paramètres facultatifs
-
Types principaux
Liste de cinq valeurs de type au maximum issues du Tableau A ou du Tableau B, utilisées pour filtrer les lieux renvoyés dans la réponse. Un lieu doit correspondre à l'une des valeurs de type principal spécifiées pour être inclus dans la réponse.
Un lieu ne peut être associé qu'à un seul type principal parmi ceux des Tableaux A ou B. Par exemple, le type principal peut être
"mexican_restaurant"
ou"steak_house"
.La requête est rejetée avec une erreur
INVALID_REQUEST
si :- Plus de cinq types sont spécifiés.
- vous spécifiez des types non reconnus ;
Pour définir le paramètre des types principaux, appelez la méthode
setTypesFilter()
lors de la création de l'objetFindAutocompletePredictionsRequest
. -
Pays
N'incluez que les résultats de la liste des pays spécifiés, sous la forme d'une liste de valeurs ccTLD ("domaine de premier niveau") à deux caractères (jusqu'à 15). Si elle est omise, aucune restriction n'est appliquée à la réponse. Par exemple, pour limiter les régions à l'Allemagne et à la France :
Si vous spécifiez à la fois
locationRestriction
etincludedRegionCodes
, les résultats se trouvent dans la zone d'intersection des deux paramètres.Pour définir le paramètre "countries", appelez la méthode
setCountries()
lors de la création de l'objetFindAutocompletePredictionsRequest
. -
Décalage d'entrée
Décalage de caractère Unicode basé sur zéro indiquant la position du curseur dans la requête. La position du curseur peut influencer les prédictions renvoyées. Si ce champ est vide, la longueur de la requête est utilisée par défaut.
Pour définir le paramètre de décalage d'entrée, appelez la méthode
setInputOffset()
lors de la création de l'objetFindAutocompletePredictionsRequest
. Biais ou restriction géographique
Vous pouvez spécifier un biais de localisation ou une restriction de localisation, mais pas les deux, pour définir la zone de recherche. Considérez la restriction géographique comme une spécification de la région dans laquelle les résultats doivent se trouver, et le biais géographique comme une spécification de la région dont les résultats doivent être proches. La principale différence est qu'avec le biais de localisation, des résultats en dehors de la région spécifiée peuvent toujours être renvoyés.
Biais de localisation
Spécifie une zone de recherche. Cet emplacement sert de biais, et non de restriction. Des résultats en dehors de la zone spécifiée peuvent donc toujours être renvoyés.
Pour définir le paramètre de biais de localisation, appelez la méthode
setLocationBias()
lors de la création de l'objetFindAutocompletePredictionsRequest
.Restriction d'emplacement
Spécifie une zone de recherche. Les résultats en dehors de la zone spécifiée ne sont pas renvoyés.
Pour définir le paramètre de restriction géographique, appelez la méthode
setLocationRestriction()
lorsque vous créez l'objetFindAutocompletePredictionsRequest
.
Spécifiez la région de restriction ou de biais de localisation sous forme de fenêtre d'affichage rectangulaire ou de cercle.
Un cercle est défini par un point central et un rayon en mètres. Le rayon doit être compris entre 0,0 et 50 000,0 (inclus). La valeur par défaut est 0.0. Pour la restriction géographique, vous devez définir le rayon sur une valeur supérieure à 0. Sinon, la requête ne renvoie aucun résultat.
Un rectangle est une fenêtre d'affichage de latitude et de longitude, représentée par deux points
low
ethigh
diagonalement opposés. Une fenêtre d'affichage est considérée comme une région fermée, ce qui signifie qu'elle inclut sa limite. Les limites de latitude doivent être comprises entre -90 et 90 degrés inclus, et les limites de longitude doivent être comprises entre -180 et 180 degrés inclus :- Si
low
=high
, la fenêtre d'affichage se compose de ce seul point. - Si
low.longitude
>high.longitude
, la plage de longitude est inversée (la fenêtre d'affichage traverse la ligne de longitude de 180 degrés). - Si
low.longitude
= -180 degrés ethigh.longitude
= 180 degrés, la fenêtre d'affichage inclut toutes les longitudes. - Si
low.longitude
= 180 degrés ethigh.longitude
= -180 degrés, la plage de longitude est vide.
low
ethigh
doivent être renseignés, et la boîte représentée ne peut pas être vide. Un viewport vide génère une erreur.- Si
-
Origine
Point d'origine à partir duquel calculer la distance en ligne droite jusqu'à la destination (accessible à l'aide de
getDistanceMeters()
). Si cette valeur est omise, la distance en ligne droite ne sera pas renvoyée. Doit être spécifié sous la forme de coordonnées de latitude et de longitude :Pour définir le paramètre d'origine, appelez la méthode
setOrigin()
lors de la création de l'objetFindAutocompletePredictionsRequest
. -
Code régional
Code régional utilisé pour mettre en forme la réponse, y compris l'adresse, spécifié sous la forme d'une valeur ccTLD ("domaine de premier niveau") à deux caractères. La plupart des codes ccTLD sont identiques aux codes ISO 3166-1, à quelques exceptions près. Par exemple, le ccTLD du Royaume-Uni est "uk" (.co.uk), tandis que son code ISO 3166-1 est "gb" (techniquement pour l'entité "Royaume-Uni de Grande-Bretagne et d'Irlande du Nord").
Si vous spécifiez un code de région non valide, l'API renvoie une erreur
INVALID_ARGUMENT
. Ce paramètre peut avoir une incidence sur les résultats en fonction de la loi applicable.Pour définir le paramètre de code régional, appelez la méthode
setRegionCode()
lors de la création de l'objetFindAutocompletePredictionsRequest
. -
Jeton de session
Les jetons de session sont des chaînes générées par l'utilisateur qui suivent les appels Autocomplete (nouveau), qu'il s'agisse d'appels effectués via le widget ou d'appels programmatiques, en tant que "sessions". Autocomplete utilise des jetons de session pour regrouper les phases de requête et de sélection d'une recherche de saisie semi-automatique d'un utilisateur dans une session distincte à des fins de facturation. La session commence lorsque l'utilisateur commence à saisir une requête et se termine lorsqu'il sélectionne un lieu. Chaque session peut comporter plusieurs requêtes, suivies d'une sélection de lieu. Lorsque la session prend fin, le jeton n'est plus valide. Votre application doit générer un nouveau jeton pour chaque session. Nous vous recommandons d'utiliser des jetons de session pour toutes les sessions de saisie semi-automatique programmatiques (lorsque vous intégrez un fragment ou lancez la saisie semi-automatique à l'aide d'un intent, l'API s'en charge automatiquement).
La saisie semi-automatique utilise un
AutocompleteSessionToken
pour identifier chaque session. Votre application doit transmettre un nouveau jeton de session au début de chaque nouvelle session, puis transmettre ce même jeton, ainsi qu'un identifiant de lieu, dans l'appel suivant àfetchPlace()
pour récupérer les détails du lieu sélectionné par l'utilisateur.Pour définir le paramètre du jeton de session, appelez la méthode
setSessionToken()
lors de la création de l'objetFindAutocompletePredictionsRequest
.Pour en savoir plus, consultez Jetons de session.
Exemples de saisie semi-automatique (nouveau)
Utiliser la restriction et le biais de localisation
La saisie semi-automatique (nouvelle version) utilise par défaut le biais d'adresse IP pour contrôler la zone de recherche. Avec le biais d'adresse IP, l'API utilise l'adresse IP de l'appareil pour biaiser les résultats. Vous pouvez éventuellement utiliser la restriction de localisation ou le biais de localisation, mais pas les deux, pour spécifier une zone de recherche.
La restriction géographique spécifie la zone à rechercher. Les résultats en dehors de la zone spécifiée ne sont pas renvoyés. L'exemple suivant utilise une restriction géographique pour limiter la requête à une restriction géographique circulaire d'un rayon de 5 000 mètres centrée sur 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()); }) );
Avec le biais de localisation, la localisation sert de biais, ce qui signifie que des résultats autour de la localisation spécifiée peuvent être renvoyés, y compris des résultats en dehors de la zone spécifiée. L'exemple suivant modifie la requête précédente pour utiliser le biais de localisation :
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()); }) );
Utiliser les types principaux
Utilisez le paramètre primary_types pour limiter les résultats d'une requête à un certain type, comme indiqué dans le Tableau A et le Tableau B. Vous pouvez spécifier un tableau contenant jusqu'à cinq valeurs. Si elle est omise, tous les types sont renvoyés.
L'exemple suivant spécifie une chaîne de requête "Soccer" et utilise le paramètre primary_types pour limiter les résultats aux établissements de type "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()); }) );
Si vous omettez le paramètre des types principaux, les résultats peuvent inclure des établissements d'un type que vous ne souhaitez pas, comme "athletic_field"
.
Utiliser l'origine
Lorsque vous incluez le paramètre origin dans la requête, spécifié sous forme de coordonnées de latitude et de longitude, l'API inclut la distance en ligne droite entre l'origine et la destination dans la réponse (accessible à l'aide de getDistanceMeters()
).
Cet exemple définit l'origine au centre de 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()); }) );