Der Dienst „Autocomplete (New)“ ist eine iOS-API, die Ortsvorschläge als Reaktion auf eine Anfrage zurückgibt. Geben Sie in der Anfrage einen Textsuchstring und geografische Grenzen an, die den Suchbereich festlegen.
Der Dienst „Autocomplete (New)“ findet Übereinstimmungen mit vollständigen Wörtern und Teilstrings der Eingabe, sodass sich Ortsnamen, Adressen und Plus Codes zuordnen lassen. Anwendungen können Abfragen senden, während der Nutzer tippt, und schon bei der Eingabe Ortsvorschläge ausgeben.
Ortsvorschläge sind Orte wie Unternehmen, Adressen und POIs, die auf dem angegebenen Eingabetextstring und Suchgebiet basieren.
Sie rufen die API beispielsweise mit der Eingabe „Spagh“ auf und begrenzen den Suchbereich auf New York City. Die Antwort enthält dann eine Liste mit Ortsvorschlägen, die dem Suchstring und dem Suchgebiet entsprechen, z. B. das Restaurant „Cafe Spaghetti“, zusammen mit Details zum Ort.
Die zurückgegebenen Ortsvorschläge sind für die Präsentation für den Nutzer vorgesehen, damit er den gewünschten Ort auswählen kann. Sie können eine Place Details (New)-Anfrage stellen, um weitere Informationen zu den zurückgegebenen Ortsvorschlägen zu erhalten.
Sie haben zwei Möglichkeiten, die Funktion „Autocomplete (New)“ in Ihre App einzubinden:
- Ortsvorhersagen programmatisch abrufen: Rufen Sie die API direkt auf, um Vorhersagen abzurufen und in einer benutzerdefinierten Benutzeroberfläche anzuzeigen.
- Place Autocomplete-Widget hinzufügen: Bietet eine sofort einsatzbereite automatische Vervollständigung für die Suche, bei der Vorhersagen angezeigt werden, während der Nutzer tippt.
Ortsvorhersagen programmatisch abrufen
Autocomplete (New)-Anfragen
Erstellen Sie eine Anfrage zur automatischen Vervollständigung, indem Sie eine Methode für GMSPlacesClient aufrufen.
Sie können Parameter im Objekt GMSAutocompleteRequest übergeben. Die Antwort enthält Vorschläge für die automatische Vervollständigung in einem GMSAutocompletePlaceSuggestion-Objekt.
Der API-Schlüssel und die Parameter query sind erforderlich. Sie können auch GMSAutocompleteSessionToken einfügen, um Anfragen einer Abrechnungssitzung zuzuordnen, und GMSAutocompleteFilter, um die Ergebnisse zu filtern.
Places Swift SDK-Version
Erstellen Sie eine Anfrage zur automatischen Vervollständigung, indem Sie eine Methode für PlacesClient aufrufen.
Sie können Parameter im Objekt AutocompleteRequest übergeben. Die Antwort enthält Vorschläge für die automatische Vervollständigung in einem AutocompletePlaceSuggestion-Objekt.
Der API-Schlüssel und die Parameter query sind erforderlich. Sie können auch AutocompleteSessionToken einfügen, um Anfragen einer Abrechnungssitzung zuzuordnen, und AutocompleteFilter, um die Ergebnisse zu filtern.
Weitere Informationen zu erforderlichen und optionalen Parametern finden Sie im Abschnitt „Parameter“ dieses Dokuments.
Places Swift SDK
let center = (37.3913916, -122.0879074) let northEast = (37.388162, -122.088137) let southWest = (37.395804, -122.077023) let bias = RectangularCoordinateRegion(northEast: northEast, southWest: southWest) let filter = AutocompleteFilter(types: [ .restaurant ], origin: center, coordinateRegionBias: bias) let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): // Handle suggestions. case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let northWestBounds = CLLocationCoordinate2DMake(40.921628, -73.700051) let southEastBounds = CLLocationCoordinate2DMake(40.477398, -74.259087) let filter = GMSAutocompleteFilter() filter.types = [kGMSPlaceTypeRestaurant] filter.locationBias = GMSPlaceRectangularLocationOption(northWestBounds, southEastBounds) let request = GMSAutocompleteRequest(query:"Spagh") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
Objective-C
CLLocationCoordinate2D northEast = CLLocationCoordinate2DMake(37.388162, -122.088137); CLLocationCoordinate2D southWest = CLLocationCoordinate2DMake(37.395804, -122.077023); GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.types = @[ kGMSPlaceTypeRestaurant ]; filter.locationBias = GMSPlaceRectangularLocationOption(northEast, southWest); GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
Antworten von Autocomplete (neu)
Die automatische Vervollständigung gibt ein Array mit bis zu fünf GMSAutocompleteSuggestion-Instanzen zurück. Das Array enthält:
placeIDtypes: Typen, die für diesen Ort gelten.distanceMeters: Entfernung vom Ursprung.attributedFullText: Vollständiger, für Menschen lesbarer Text eines Vorschlags.attributedPrimaryText: Für Menschen lesbarer Primärtext eines Vorschlags.attributedSecondaryText: Für Menschen lesbarer sekundärer Text eines Vorschlags.structuredFormat: Der spezifische Name und der disambiguierende Text, z. B. Stadt oder Region.
Erforderliche Parameter
Abfrage
Der Textstring, nach dem gesucht werden soll. Geben Sie vollständige Wörter und Teilstrings, Ortsnamen, Adressen und Plus Codes an. Über den Dienst „Autocomplete (New)“ werden mögliche Übereinstimmungen basierend auf dem String zurückgegeben, die nach erkannter Relevanz sortiert werden.
Optionale Parameter
sessionToken
Sitzungstokens sind nutzergenerierte Strings, mit denen Autocomplete (New)-Aufrufe – sowohl Aufrufe über das Widget als auch programmatische Aufrufe – als „Sitzungen“ erfasst werden. Bei Autocomplete (New) werden Sitzungstokens verwendet, um die Abfrage- und Auswahlphasen einer Nutzeranfrage zur automatischen Vervollständigung zu Abrechnungszwecken zu einer separaten Sitzung zusammenzufassen.
Sie können Ihr Sitzungstoken für „Place Autocomplete“ verfügbar machen, um es an andere Dienste zu übergeben, die nicht Teil des Places SDK for iOS sind, z. B. an Address Validation:
Places Swift SDK
let token = AutocompleteSessionToken() let filter = AutocompleteFilter(origin: CLLocationCoordinate2DMake(39.7, -94.5)) let request = AutocompleteRequest(query: "Piz", sessionToken: token, filter: filter) PlacesClient.shared.fetchAutocompleteSuggestions(request: request) { case .success(let suggestions): ... case .failure(let placesError): print(placesError) } // pass token's string format to use with a service that is not a part of iOS SDK. print("token: \(token)")
Objective-C
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Piz"]; GMSAutocompleteSessionToken *token = [[GMSAutocompleteSessionToken alloc] init]; request.sessionToken = token; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.origin = [[CLLocation alloc] initWithLatitude:39.7 longitude:-94.5]; filter.locationBias = GMSPlaceRectangularLocationOption(topLocation, bottomLocation); request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> *_Nullable results, NSError *_Nullable error) { ... }]; // pass token's string format to use with a service that is not a part of iOS SDK. NSLog(@"%@", token.description);
Weitere Informationen finden Sie unter Sitzungstokens.
Optionale AutocompleteFilter-Parameter
Typen
Ein Ort kann nur einen primären Typ aus den Typen in Tabelle A oder Tabelle B haben.
Der primäre Typ könnte beispielsweise mexican_restaurant oder steak_house sein.
Standardmäßig gibt die API alle Orte basierend auf dem Parameter input zurück, unabhängig vom primären Typwert, der dem Ort zugeordnet ist. Sie können die Ergebnisse auf einen oder mehrere bestimmte primäre Typen beschränken, indem Sie den Parameter types übergeben.
Mit diesem Parameter können Sie bis zu fünf Typwerte aus Tabelle A oder Tabelle B angeben. Ein Ort muss einem der angegebenen primären Typwerte entsprechen, damit er in die Antwort aufgenommen wird.
Die Anfrage wird mit dem Fehler INVALID_REQUEST abgelehnt, wenn:
- Es wurden mehr als fünf Typen angegeben.
- Es wurden unbekannte Typen angegeben.
Wenn Sie die Ergebnisse beispielsweise auf Sportartikelgeschäfte beschränken möchten, geben Sie diesen Typ in Ihrem AutocompleteFilter an:
Places Swift SDK
let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ])
Swift
let filter = GMSAutocompleteFilter() filter.types = ["sporting_goods_store"]
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.types = @[ "sporting_goods_store" ];
Länder
Es werden nur Ergebnisse aus der Liste der angegebenen Regionen berücksichtigt. Diese werden als Array mit bis zu 15 zweistelligen ccTLD-Werten (Ländercode der Top-Level-Domain) angegeben. Wenn Sie das Flag weglassen, werden keine Einschränkungen auf die Antwort angewendet. So beschränken Sie die Regionen beispielsweise auf Deutschland und Frankreich:
Places Swift SDK
let filter = AutocompleteFilter(countries: ["DE", "FR"])
Swift
let filter = GMSAutocompleteFilter() filter.countries = ["DE", "FR"]
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.countries = @[ @"DE", @"FR" ];
Wenn Sie sowohl locationRestriction als auch countries angeben, befinden sich die Ergebnisse im Schnittbereich der beiden Einstellungen.
inputOffset
Das nullbasierte Unicode-Zeichen-Offset, das die Cursorposition in input angibt. Die Cursorposition kann sich darauf auswirken, welche Vorschläge zurückgegeben werden. Wenn leer, wird standardmäßig die Länge von input verwendet.
locationBias oder locationRestriction
Sie können locationBias oder locationRestriction angeben, aber nicht beide, um den Suchbereich zu definieren. locationRestriction gibt die Region an, in der sich die Ergebnisse befinden müssen, und locationBias die Region, in deren Nähe sich die Ergebnisse befinden müssen, aber außerhalb derer sie sich auch befinden können.
Mit
locationBiaswird ein Bereich für die Suche angegeben. Dieser Ort dient als Bias. Das bedeutet, dass Ergebnisse in der Nähe des angegebenen Orts zurückgegeben werden können, einschließlich Ergebnissen außerhalb des angegebenen Bereichs.Mit
locationRestrictionwird ein Bereich für die Suche angegeben. Ergebnisse außerhalb des angegebenen Bereichs werden nicht zurückgegeben.
Geben Sie die Region locationBias oder locationRestriction als rechteckigen Viewport oder als Kreis an.
Ein Kreis wird durch den Mittelpunkt und den Radius in Metern definiert. Der Radius muss zwischen 0,0 und 50.000,0 liegen (jeweils einschließlich). Der Standardwert ist 0,0. Für locationRestriction müssen Sie den Radius auf einen Wert größer als 0, 0 festlegen.
Andernfalls werden keine Ergebnisse zurückgegeben.
Beispiel:
Places Swift SDK
let center = CLLocationCoordinate2DMake(40.477398, -74.259087) let bias = CircularCoordinateRegion(center: center, radius: 1000.0) let filter = AutocompleteFilter(coordinateRegionBias: bias)
Swift
let center = CLLocationCoordinate2DMake(40.730610, -73.935242) let radius = 1000.0 filter.locationBias = GMSPlaceCircularLocationOption(center, radius)
Objective-C
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(40.730610, -73.935242); radius = 1000.0; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationBias = GMSPlaceCircularLocationOption(center, radius);
Ein Rechteck ist ein Sichtfeld, das durch zwei diagonal gegenüberliegende Punkte low und high dargestellt wird. Ein Darstellungsbereich gilt als geschlossener Bereich, d. h., er umfasst auch seine Grenze. Die Grenzen für den Breitengrad müssen zwischen -90 und 90 Grad liegen (einschließlich), und die Grenzen für den Längengrad müssen zwischen -180 und 180 Grad liegen (einschließlich):
- Wenn
low=highist, besteht der Darstellungsbereich aus diesem einzelnen Punkt. - Wenn
low.longitude>high.longitude, wird der Längengradbereich umgekehrt (der Darstellungsbereich überschreitet die 180-Grad-Längengradlinie). - Wenn
low.longitude= -180 Grad undhigh.longitude= 180 Grad ist, umfasst das Sichtfeld alle Längengrade. - Wenn
low.longitude= 180 Grad undhigh.longitude= -180 Grad ist, ist der Längengradbereich leer.
Sowohl low als auch high müssen ausgefüllt sein und das dargestellte Rechteck darf nicht leer sein. Ein leerer Viewport führt zu einem Fehler.
Beispiel: Dieser Viewport umfasst New York City vollständig:
Places Swift SDK
let northEast = CLLocationCoordinate2DMake(40.477398, -74.259087) let southWest = CLLocationCoordinate2DMake(40.921628, -73.700051) let filter = AutocompleteFilter(coordinateRegionBias: bias)
Swift
let high = CLLocationCoordinate2DMake(40.921628, -73.700051) let low = CLLocationCoordinate2DMake(40.477398, -74.259087) let filter = GMSAutocompleteFilter() filter.locationBias = GMSPlaceRectangularLocationOption(high, low)
Objective-C
CLLocationCoordinate2D high = CLLocationCoordinate2DMake(40.477398, -74.259087); CLLocationCoordinate2D low = CLLocationCoordinate2DMake(440.921628, -73.700051); GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationBias = GMSPlaceRectangularLocationOption(high, low);
origin
Der Ausgangspunkt, von dem aus die Luftlinie zum Ziel berechnet wird (als distanceMeters zurückgegeben). Wenn dieser Wert weggelassen wird, wird die Luftlinie nicht zurückgegeben. Muss als Breiten- und Längengradkoordinaten angegeben werden:
Places Swift SDK
let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.395804, longitude: -122.077023))
Swift
let filter = GMSAutocompleteFilter() filter.origin = CLLocation(latitude: 37.395804, longitude: -122.077023)
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude: -122.077023];
regionCode
Der Regionscode, der zum Formatieren der Antwort verwendet wird, angegeben als Ländercode der Top-Level-Domain (ccTLD). Die meisten ccTLD-Codes entsprechen den ISO 3166-1-Codes. Es gibt jedoch einige Ausnahmen. Die ccTLD des Vereinigten Königreichs ist beispielsweise „uk“ (.co.uk), der ISO 3166-1-Code „gb“ (technisch für das Land „Vereinigtes Königreich Großbritannien und Nordirland“).
Wenn Sie einen ungültigen Ländercode angeben, gibt die API einen INVALID_ARGUMENT-Fehler zurück. Der Parameter kann sich je nach anwendbarem Recht auf die Ergebnisse auswirken.
shouldIncludePureServiceAreaBusinesses
Bei true werden nur Unternehmen mit Einzugsgebiet im Antwortarray zurückgegeben. Ein reines Unternehmen ohne festen Standort in einem Einzugsgebiet ist ein Unternehmen, das Kunden vor Ort besucht oder einen Lieferservice hat, aber an seiner Geschäftsadresse keine Kunden empfängt.
Beispiel:
Places Swift SDK
let filter = AutocompleteFilter() filter.shouldIncludePureServiceAreaBusinesses = true
Swift
let filter = AutocompleteFilter() filter.shouldIncludePureServiceAreaBusinesses = true
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.shouldIncludePureServiceAreaBusinesses = YES;
Das „Place Autocomplete“-Widget hinzufügen
Um die automatische Vervollständigung von Orten einfacher zu gestalten, können Sie das Place Autocomplete-Widget in Ihre App einfügen. Das Widget bietet eine spezielle Vollbildoberfläche, die Nutzereingaben verarbeitet und Ortsvorschläge anzeigt, während AutocompletePlaceSuggestion-Objekte an die App zurückgegeben werden. Anschließend können Sie eine Place Details (New)-Anfrage senden, um zusätzliche Informationen zu den Ortsvorschlägen zu erhalten.
Wie beim programmatischen Abrufen von Ortsvorhersagen können Sie mit dem Place Autocomplete-Widget Sitzungstokens verwenden, um Autocomplete-Anfragen zu Abrechnungszwecken in Sitzungen zu gruppieren. Sie können ein Sitzungstoken übergeben, indem Sie AutocompleteSessionToken() aufrufen.
Wenn Sie kein Sitzungstoken angeben, wird vom Widget ein Autocomplete-Sitzungstoken für Sie erstellt, das dann über den onSelection-Callback abgerufen werden kann. Weitere Informationen zur Verwendung von Sitzungstokens finden Sie unter Sitzungstokens.
Wenn der Bindungswert show auf true gesetzt ist, wird der Nutzer zu einer Vollbildansicht weitergeleitet, in der er einen Ort auswählen kann. Während der Nutzer tippt, gibt das Widget Vorschläge für Orte wie Unternehmen, Adressen und POIs zurück. Wenn der Nutzer einen Ort auswählt, ruft das Widget den onSelection-Handler mit dem ausgewählten Ort auf und schließt die Vollbildansicht.
Parameter für das „Place Autocomplete“-Widget
Zusätzlich zu den programmatisch verfügbaren Parametern bietet das Place Autocomplete-Widget auch die folgenden Parameter.
Einblenden
show gibt an, ob das Widget angezeigt wird.
onSelection
Der Closure, der ausgeführt werden soll, wenn ein Ort ausgewählt wird.
onError
Der Closure, der ausgeführt wird, wenn ein Fehler auftritt. Bei einem Fehler wird ein
PlacesError übergeben.
Anpassen von Inhalten und Themen
Mit den Parametern AutocompleteUICustomization werden die UI-Anpassungen angegeben, die auf das Widget angewendet werden sollen. Folgende Anpassungsoptionen sind verfügbar:
AutocompleteListDensity. Mit diesem Parameter können Sie die Dichte der Vorschlagsliste auswählen, entwedermultiLineodertwoLine.AutocompleteUIIcon: Mit diesem Parameter können Sie festlegen, ob das Standardsymbol für jedes Listenelement angezeigt werden soll.theme: Mit diesem Parameter wird ein benutzerdefiniertes Design angegeben, das alle Standardstilattribute überschreibt. Sie können die Farben, Typografie, Abstände, Ränder und Ecken der Place Autocomplete-Komponente anpassen. Der Standardwert istPlacesMaterialTheme. Für alle Designattribute, die nicht überschrieben werden, werden die Standardstile verwendet.
Vollständiges Codebeispiel ansehen
Beispiele für die automatische Vervollständigung (neu)
„locationRestriction“ und „locationBias“ verwenden
Bei der automatischen Vervollständigung (neu) wird standardmäßig die IP-Verschiebung verwendet, um den Suchbereich zu steuern. Bei der IP-Gewichtung verwendet die API die IP-Adresse des Geräts, um die Ergebnisse zu gewichten. Optional können Sie locationRestriction oder locationBias verwenden, aber nicht beide, um einen Suchbereich anzugeben.
Mit der Standortbeschränkung wird der Bereich angegeben, in dem gesucht werden soll. Ergebnisse außerhalb des angegebenen Bereichs werden nicht zurückgegeben. Im folgenden Beispiel wird die Standortbeschränkung verwendet, um die Anfrage auf eine kreisförmige Standortbeschränkung mit einem Radius von 5.000 Metern zu beschränken, die auf San Francisco zentriert ist:
Places Swift SDK
let center = (37.775061, -122.419400) let radius = 5000.0 let restriction = CircularCoordinateRegion(center: center, radius: radius) let filter = AutocompleteFilter(coordinateRegionRestriction: restriction) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let center = CLLocationCoordinate2DMake(37.775061, -122.419400) let radius = 5000.0 let filter = GMSAutocompleteFilter() filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius) let request = GMSAutocompleteRequest(query:"Piz") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
Objective-C
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400); radius = 5000.0; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius); GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
Bei der Standortgewichtung dient der Standort als Gewichtung. Das bedeutet, dass Ergebnisse in der Nähe des angegebenen Standorts zurückgegeben werden können, auch wenn sie außerhalb des angegebenen Bereichs liegen. Im nächsten Beispiel wird die vorherige Anfrage so geändert, dass der Standort-Bias verwendet wird:
Places Swift SDK
let center = (37.775061, -122.419400) let radius = 5000.0 let bias = CircularCoordinateRegion(center: center, radius: radius) let filter = AutocompleteFilter(coordinateRegionBias: bias) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let center = CLLocationCoordinate2DMake(37.775061, -122.419400) let radius = 5000.0 let filter = GMSAutocompleteFilter() filter.locationBias = GMSPlaceCircularLocationOption(center, radius) let request = GMSAutocompleteRequest(query:"Piz") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
Objective-C
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400); radius = 5000.0; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationBias = GMSPlaceCircularLocationOption(center, radius); GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
Nutzungsarten
Mit dem Parameter „types“ können Sie die Ergebnisse einer Anfrage auf einen bestimmten Typ beschränken, wie in Tabelle A und Tabelle B aufgeführt. Sie können ein Array mit bis zu fünf Werten angeben. Wird diese Option nicht angegeben, werden alle Typen zurückgegeben.
Im folgenden Beispiel wird der Suchstring „Fußball“ angegeben und mit dem Parameter „types“ werden die Ergebnisse auf Einrichtungen des Typs "sporting_goods_store" beschränkt:
Places Swift SDK
let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ]) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Soccer", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let filter = GMSAutocompleteFilter() filter.types = ["sporting_goods_store"] let request = GMSAutocompleteRequest(query:"Soccer") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.types = @[ "sporting_goods_store" ]; GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Soccer"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
Ursprung verwenden
Wenn Sie den Parameter origin in die Anfrage einfügen, die als Breiten- und Längengradkoordinaten angegeben wird, enthält die API die Luftlinie vom Start- zum Zielort in der Antwort. Die Antwort gibt die Entfernung als distanceMeters zurück.
In diesem Beispiel wird der Ursprung auf das Zentrum von San Francisco festgelegt:
Places Swift SDK
let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.7749, longitude: -122.4194)) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Amoeba", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let origin = CLLocation(latitude: 37.7749, longitude: -122.4194) let filter = GMSAutocompleteFilter() filter.origin = origin let request = GMSAutocompleteRequest(query:"Amoeba") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText)) and distance: \(String(describing: result.placeSuggestion?.distanceMeters))") } } })
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude:-122.077023]; GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Amoeba"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
Inhalte und Design anpassen
Swift
let uiCustomization = AutocompleteUICustomization( listDensity: .multiLine, listItemIcon: .noIcon, theme: PlacesMaterialTheme() )
Place Autocomplete-Widget hinzufügen (vollständiger Code)
Places Swift SDK
struct PlaceAutocompleteDemoView: View { @State private var fetchedPlace: Place? @State private var placesError: PlacesError? @State private var showWidget = false public var body: some View { VStack { Button("Search for a place") { showWidget.toggle() } .placeAutocomplete( show: $showWidget, onSelection: { (autocompletePlaceSuggestion, autocompleteSessionToken) in Task { let placesClient = await PlacesClient.shared let fetchPlaceRequest = FetchPlaceRequest( placeID: autocompletePlaceSuggestion.placeID, placeProperties: [.displayName, .formattedAddress], sessionToken: autocompleteSessionToken ) switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): print("Fetched place: \(place)") self.fetchedPlace = place case .failure(let placesError): print("Failed to fetch place: \(placesError)") self.placesError = placesError } } }, onError: { placesError in self.placesError = placesError } ) } } }
Autocomplete (New) – Optimierung
In diesem Abschnitt finden Sie Best Practices, damit Sie den Autocomplete (New)-Dienst optimal nutzen können.
Allgemeine Richtlinien:
- Am schnellsten lässt sich eine funktionsfähige Benutzeroberfläche mit dem Autocomplete (New)-Widget der Maps JavaScript API, dem Autocomplete (New)-Widget des Places SDK for Android oder dem Autocomplete (New)-Widget des Places SDK for iOS entwickeln.
- Machen Sie sich zu Beginn mit den wichtigsten Datenfeldern von Autocomplete (New) vertraut.
- Die Felder zur Standortgewichtung und Standortbeschränkung sind optional, können aber erhebliche Auswirkungen auf die Leistung der automatischen Vervollständigung haben.
- Verwenden Sie die Fehlerbehandlung, wenn die API einen Fehler zurückgibt, damit die Anwendung fehlertolerant reagiert.
- Die Anwendung sollte Anfragen weiter verarbeiten und weiter funktionieren, auch wenn keine Auswahl getroffen wird.
Best Practices für die Kostenoptimierung
Einfache Kostenoptimierung
Wenn Sie die Kosten für die Nutzung des Autocomplete (New)-Dienstes optimieren möchten, verwenden Sie Feldmasken in Place Details (New)- und Autocomplete (New)-Widgets, damit nur die erforderlichen Datenfelder für Autocomplete (New) zurückgegeben werden.
Erweiterte Kostenoptimierung
Wenn Sie Autocomplete (New) programmatisch implementieren, erhalten Sie Zugriff auf die SKU: Autocomplete Request pricing und können Geocoding API-Ergebnisse für den ausgewählten Ort anstelle von Place Details (New)-Ergebnissen anfordern. Wenn Sie die Kosten pro Anfrage mit der Geocoding API kombinieren, ist das kosteneffizienter als die Verwendung von Kosten pro Sitzung (sitzungsbasiert), sofern die beiden folgenden Bedingungen erfüllt werden:
- Wenn Sie nur den Breiten- und Längengrad oder die Adresse des vom Nutzer ausgewählten Orts abrufen möchten, erhalten Sie entsprechende Informationen über die Geocoding API, für die weniger Kosten anfallen als bei einem Place Details (New)-Aufruf.
- Wenn Nutzer eine automatische Vervollständigung bei durchschnittlich maximal 4 entsprechenden Anfragen auswählen, ist der Preis pro Anfrage möglicherweise kosteneffizienter als der Preis pro Sitzung.
Benötigt Ihre Anwendung weitere Informationen als Adresse und Breiten-/Längengrad des ausgewählten Vorschlags?
Ja, weitere Details sind erforderlich.
Sitzungsbasiertes Autocomplete (Neu) mit Place Details (Neu) verwenden
Da für Ihre Anwendung „Place Details (New)“ erforderlich sind, z. B. der Ortsname, der Unternehmensstatus oder die Öffnungszeiten, sollte für Ihre Implementierung von „Autocomplete (New)“ ein Sitzungstoken verwendet werden (programmatisch oder in die JavaScript-, Android- oder iOS-Widgets integriert).1 Pro Sitzung werden die entsprechenden Places-SKUs berechnet, je nachdem, welche Ortsdatenfelder Sie anfordern.
Widget-Implementierung
Die Sitzungsverwaltung ist automatisch in das
JavaScript,
Android oder iOS
integriert. Das umfasst sowohl Autocomplete (New)-Anfragen als auch die Place Details (New)-Anfrage für den ausgewählten Vorschlag. Der fields-Parameter muss festgelegt werden, damit nur die erforderlichen Datenfelder für die automatische Vervollständigung (neu) angefordert werden.
Programmatische Implementierung
Verwenden Sie für Autocomplete (New)-Anfragen ein
Sitzungstoken. Binden Sie die folgenden Parameter ein, wenn Sie Details zum Ort (neu) für den ausgewählten Vorschlag anfordern:
- Die Orts-ID aus der Autocomplete (New)“-Antwort
- Das Sitzungstoken, das in der Autocomplete (New)-Anfrage verwendet wird
- Den
fields-Parameter, mit dem die erforderlichen Datenfelder für die automatische Vervollständigung (neu) angegeben werden
Nein, es sind nur Adresse und Standort erforderlich.
Wenn Sie Autocomplete (New) in Ihrer Anwendung stark nutzen, kann es kostengünstiger sein, anstelle von Place Details (New) die Geocoding API zu verwenden. Die Effizienz der Autovervollständigung (Neu) jeder Anwendung hängt davon ab, was die Nutzer eingeben, wo die Anwendung verwendet wird und ob die Best Practices zur Leistungsoptimierung implementiert wurden.
Um die folgende Frage beantworten zu können, analysieren Sie, wie viele Zeichen Nutzer durchschnittlich eingeben, bevor sie in Ihrer Anwendung einen Autocomplete (New)-Vorschlag auswählen.
Wählen Ihre Nutzer durchschnittlich bei 4 oder weniger Anfragen einen Autocomplete (New)-Vorschlag aus?
Ja
Implementieren Sie Autocomplete (New) programmatisch ohne Sitzungstokens und rufen Sie die Geocoding API für den ausgewählten Ortsvorschlag auf.
Über die Geocoding API erhalten Sie Adressen und Breiten-/Längenkoordinaten.
Wenn 4 Autocomplete-Anfragen ausgeführt werden, fallen Kosten von 0,01132 $ an. Die Gesamtkosten der 4 Anfragen plus die Kosten für einen Geocoding API-Aufruf zum ausgewählten Ortsvorschlag betragen 0,01632 $, also weniger als der Preis pro Sitzung mit automatischer Vervollständigung (neu) von 0,017 $ pro Sitzung.1
Wenn Sie die Best Practices zur Leistung beachten, erhalten Ihre Nutzer bereits mit weniger eingegebenen Zeichen passende Vorschläge.
Nein
Sitzungsbasiertes Autocomplete (Neu) mit Place Details (Neu) verwenden
Da die durchschnittliche Anzahl der Anfragen, die Sie voraussichtlich stellen, bevor ein Nutzer einen Autocomplete (New)-Vorschlag auswählt, die Kosten für die Abrechnung pro Sitzung übersteigt, sollten Sie für die Implementierung von Autocomplete (New) ein Sitzungstoken für die Autocomplete (New)-Anfragen und die zugehörige Place Details (New)-Anfrage verwenden.
1
Widget-Implementierung
Die Sitzungsverwaltung ist automatisch in das
JavaScript,
Android oder iOS
integriert. Das umfasst sowohl Autocomplete (New)-Anfragen als auch die Place Details (New)-Anfrage für den ausgewählten Vorschlag. Der fields-Parameter muss festgelegt werden, damit nur die erforderlichen Felder angefordert werden.
Programmatische Implementierung
Verwenden Sie für Autocomplete (New)-Anfragen ein
Sitzungstoken.
Binden Sie die folgenden Parameter ein, wenn Sie Details zum Ort (neu) für den ausgewählten Vorschlag anfordern:
- Die Orts-ID aus der Autocomplete (New)“-Antwort
- Das Sitzungstoken, das in der Autocomplete (New)-Anfrage verwendet wird
- Den
fields-Parameter, mit dem Felder wie „Adresse“ und „Geometrie“ angegeben werden
Autocomplete (New)-Anfragen verzögern
Sie können Autocomplete (New)-Anfragen verzögern, bis der Nutzer die ersten 3 oder 4 Zeichen eingegeben hat, damit weniger Anfragen über die Anwendung gestellt werden. Wenn Sie beispielsweise Autocomplete (New)-Anfragen für jedes Zeichen nach dem dritten Zeichen senden, das der Nutzer eingegeben hat, und der Nutzer sieben Zeichen eingibt und dann einen Vorschlag auswählt, für den Sie eine Geocoding API-Anfrage senden, betragen die Gesamtkosten 4 Autocomplete (New)-Anfragen mit Preis pro Anfrage + Geocoding.1
Wenn sich durch das Verzögern von Anfragen Ihre durchschnittliche Anzahl programmatischer Anfragen auf unter 4 senken lässt, empfehlen wir, die Anleitung für eine leistungsstarke Autocomplete-Funktion (Neu) mit Geocoding API-Implementierung zu beachten. Das Verzögern von Anfragen wird vom Nutzer, der evtl. bei jedem eingegebenen Zeichen mit Vorschlägen rechnet, möglicherweise als Latenz wahrgenommen.
Wenn Sie die Best Practices zur Leistung beachten, erhalten Ihre Nutzer bereits mit weniger eingegebenen Zeichen passende Vorschläge.
-
Informationen zu den Kosten finden Sie in den Preislisten für die Google Maps Platform.
Best Practices für die Leistung
Im Folgenden finden Sie Tipps zum Optimieren der Autocomplete (New)-Leistung:
- Binden Sie in Ihre Autocomplete (New)-Implementierung länderspezifische Einschränkungen, eine Standortgewichtung und (bei programmatischen Implementierungen) eine Spracheinstellung ein. Die Spracheinstellung ist bei Widgets nicht erforderlich, weil bei ihnen die Spracheinstellungen aus dem Browser oder vom Mobilgerät des Nutzers übernommen werden.
- Wenn Autocomplete (New) mit einer Karte kombiniert wird, können Sie den Standort anhand des Darstellungsbereichs der Karte gewichten.
- Wenn ein Nutzer keinen der Vorschläge der automatischen Vervollständigungen (neu) auswählt, was in der Regel geschieht, wenn es sich bei keinem Vorschlag um die gewünschte Adresse handelt, können Sie anhand der ursprünglichen Nutzereingabe versuchen, relevantere Ergebnisse zu erhalten:
- Wenn der Nutzer voraussichtlich nur Adressinformationen eingibt, können Sie die ursprüngliche Nutzereingabe bei einem Aufruf der Geocoding API noch einmal verwenden.
- Wenn Sie davon ausgehen, dass der Nutzer Abfragen für einen bestimmten Ort mithilfe von Name oder Adresse eingibt, verwenden Sie eine „Place Details (New)“-Anfrage. Wenn nur in einer bestimmten Region Ergebnisse erwartet werden, nutzen Sie die Standortgewichtung.
- Nutzer geben Adressen für untergeordnete Gebäude ein, z. B. Adressen für bestimmte Einheiten oder Wohnungen innerhalb eines Gebäudes. So wird bei der tschechischen Adresse „Stroupežnického 3191/17, Praha“ z. B. eine teilweise Vervollständigung in Autocomplete (New) ausgegeben.
- Wenn Nutzer Adressen mit Präfixen für Straßenabschnitte eingeben, z. B. „23-30 29th St, Queens“ in New York City oder „47-380 Kamehameha Hwy, Kaneohe“ auf der Insel Kauai in Hawaii
Standortgewichtung
Wenn Sie die Parameter location und radius weitergeben, können Sie die Ergebnisse zugunsten eines festgelegten Bereichs gewichten. Dadurch wird Autocomplete (New) angewiesen, vorzugsweise Ergebnisse innerhalb des definierten Bereichs anzuzeigen. Ergebnisse außerhalb dieses Bereichs können aber trotzdem angezeigt werden. Mit dem Parameter components können Sie die Ergebnisse filtern, sodass nur Orte in einem bestimmten Land angezeigt werden.
Standorteinschränkung
Sie können die Ergebnisse auf einen bestimmten Bereich beschränken, indem Sie einen locationRestriction-Parameter übergeben.
Sie können die Ergebnisse auch auf die Region beschränken, die durch location und einen radius-Parameter definiert wird, indem Sie den Parameter locationRestriction hinzufügen. Dadurch wird Autocomplete (New) angewiesen, nur Ergebnisse innerhalb dieser Region zurückzugeben.