Die Migration vom Places SDK for iOS zum Places Swift SDK for iOS sollte unkompliziert sein und kann schrittweise erfolgen. Da die Structs im Places Swift SDK for iOS nicht mit ihren Objective-C-basierten Pendants kompatibel sind, empfehlen wir, einzelne Funktionsblöcke basierend auf der Verwendung von APIs in GMSPlacesClient zu migrieren.
Places Swift SDK for iOS in ein Projekt einbinden
Die folgenden Schritte sind erforderlich, um das Places Swift SDK for iOS zu verwenden:
- Aktivieren Sie die Places API (neu).
Fügen Sie das Places Swift SDK Ihren Abhängigkeiten hinzu. Sie können
GooglePlaces,GooglePlacesSwiftoder beides installieren.Initialisieren Sie den Places-Client mit
PlacesClient.
Beispiel für eine schrittweise Migration
Angenommen, eine App, die das Places SDK for iOS verwendet, erhält basierend auf einer Texteingabe Vorschläge für die automatische Vervollständigung und ruft dann die Details des ersten Ortsvorschlags ab. Mit dem Places SDK for iOS könnte der vorhandene Code so aussehen:
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()
// Fetch Autocomplete Request.
let center = CLLocation(latitude: 37.3913916, longitude: -122.0879074)
let northEast = CLLocationCoordinate2DMake(37.388162, -122.088137)
let southWest = CLLocationCoordinate2DMake(37.395804, -122.077023)
let filter = GMSAutocompleteFilter()
filter.types = [kGMSPlaceTypeRestaurant]
filter.origin = center
filter.locationBias = GMSPlaceRectangularLocationOption(northEast, southWest)
let request = GMSAutocompleteRequest(query: "Sicilian piz")
request.filter = filter
client.fetchAutocompleteSuggestions(from: request) { (results, error) in
guard let results, error == nil else {
print("Autocomplete error: \(String(describing: error))")
return
}
// Fetch Place Request.
guard let placeID = results.first?.placeSuggestion?.placeID else { return }
let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.website].map {$0.rawValue}
let fetchPlaceRequest = GMSFetchPlaceRequest(placeID: placeID, placeProperties: myProperties, sessionToken: nil)
client.fetchPlace(with: fetchPlaceRequest) { (place: GMSPlace?, error: Error?) in
guard let place, error == nil else { return }
print("Place found: \(String(describing: place.name)); \(String(describing: place.website))")
}
}
Initialisierer des Places-Clients aktualisieren
Um den Code zu modernisieren und die Funktionen des neuen SDK zu nutzen, müssen Sie GMSPlacesClient durch PlacesClient ersetzen. Außerdem wurden die Parameternamen in der neuen Methode geändert. Sie müssen den Parameter also in from anstelle von with ändern. Schließlich verwendet das
Places Swift SDK den aktualisierten
AutocompleteRequest.
Aktualisierter Code
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
Ursprünglicher Code
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()
Anfrage für automatische Vervollständigung aktualisieren
Sie können damit beginnen, den Ablauf der Anfrage für die automatische Vervollständigung zu aktualisieren. Im alten Code wird ein Callback verwendet, um Vorschläge für die automatische Vervollständigung anzufordern, während im neuen Code ein switch/await-Muster verwendet wird. Callbacks können die Codestruktur und die Fehlerbehandlung komplexer machen. Das neue Places Swift SDK unterstützt die Nebenläufigkeit, was asynchrone Vorgänge vereinfacht.
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
// Fetch Autocomplete Request.
let center = CLLocation(latitude: 37.3913916, longitude: -122.0879074)
let northEast = CLLocationCoordinate2DMake(37.388162, -122.088137)
let southWest = CLLocationCoordinate2DMake(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)
let placeID: String
switch await placesSwiftClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let results):
switch results.first {
case .place(let placeSuggestion):
placeID = placeSuggestion.placeID
case .none:
fallthrough
@unknown default:
return
}
case .failure(let placesError):
print("Autocomplete error: \(placesError)")
return
}
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let placesClient = GMSPlacesClient.shared()
// Fetch Place Request.
let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.website].map {$0.rawValue}
let fetchPlaceRequest = GMSFetchPlaceRequest(placeID: placeID, placeProperties: myProperties, sessionToken: nil)
placesClient.fetchPlace(with: fetchPlaceRequest) { (place: GMSPlace?, error: Error?) in
guard let place, error == nil else { return }
print("Place found: \(String(describing: place.name)); \(String(describing: place.website))")
}
Verworfene Klassen, Methoden und Typedefs ersetzen
Die folgenden Klassen, Methoden und Typedefs im Places SDK for iOS wurden ab Version 10.4 verworfen. Sie sind in Version 11.0, die im dritten Quartal 2026 veröffentlicht wird, nicht mehr verfügbar.
In dieser Tabelle sind die verworfenen Methoden und ihre Ersetzungen aufgeführt:
| Verworfen | Ersatz |
|---|---|
currentPlaceWithCallback oder findPlaceLikelihoodsFromCurrentLocationWithPlaceFields |
searchNearbyWithRequest |
lookUpPlaceID oder fetchPlaceFromPlaceID |
fetchPlaceWithRequest |
lookUpPhotosForPlaceID oder loadPlacePhoto |
fetchPhotoWithRequest |
GMSAutocompletePrediction |
AutocompleteSuggestion |
findAutocompletePredictionsFromQuery oder GMSAutocompleteFetcher |
fetchAutocompleteSuggestionsFromRequest |
isOpenWithPlaceID oder isOpenWithPlace |
isOpenWithRequest |
GMSAutocompleteResultsViewController, GMSAutocompleteTableDataSource oder GMSAutocompleteViewController |
placeAutocomplete |
Methoden- und Klassennamen aktualisieren
Schließen Sie die Migration ab, indem Sie den fetchPlace-Code umgestalten und sowohl die GMSPlacesClient-Initialisierung als auch die GMSPlaceProperty-Deklaration entfernen. Im Places Swift SDK wurden die Methoden- und Klassennamen
aktualisiert, um das Präfix „GMS“ zu entfernen.Sie müssen entsprechend aktualisiert werden.
So wird beispielsweise aus GMSFetchPlaceRequest FetchPlaceRequest.
Typverarbeitung
Die neue fetchPlace-Methode verwendet eine verbesserte Typverarbeitung. Während im alten Code die Rohwerte der Property übergeben werden mussten, müssen Entwickler im neuen Code die Rohwerte hier nicht explizit abrufen. Dadurch wird der Code prägnanter und besser lesbar.
Nebenläufigkeit
Außerdem unterstützt die neue Methode die Nebenläufigkeit, sodass der Callback in placesClient.fetchPlace durch ein switch/await-Muster in placesSwiftClient.fetchPlace ersetzt werden kann.
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
// Fetch Autocomplete Request.
let center = CLLocation(latitude: 37.3913916, longitude: -122.0879074)
let northEast = CLLocationCoordinate2DMake(37.388162, -122.088137)
let southWest = CLLocationCoordinate2DMake(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)
let placeID: String
switch await placesSwiftClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let results):
switch results.first {
case .place(let placeSuggestion):
placeID = placeSuggestion.placeID
case .none:
fallthrough
@unknown default:
return
}
case .failure(let placesError):
print("Autocomplete error: \(placesError)")
return
}
// Fetch Place Request.
let fetchPlaceRequest = FetchPlaceRequest(placeID: placeID, placeProperties: [.displayName, .websiteURL])
switch await placesSwiftClient.fetchPlace(with: fetchPlaceRequest) {
case .success(let place):
print("Place found: \(place.displayName): \(String(describing: place.description))")
case .failure(let placesError):
print("Place not found: \(placeID); \(placesError)")
}
Auf dem Laufenden bleiben
Besuchen Sie die Seite mit den Versionshinweisen zum Places Swift SDK for iOS, um mehr über neue Funktionen und Änderungen zu erfahren.