Die Migration vom Places SDK for iOS zum Places Swift SDK for iOS sollte unkompliziert sein und kann schrittweise erfolgen. Da Strukturen 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 Ihr Projekt einbinden
Folgende Schritte sind erforderlich, um das Places Swift SDK for iOS zu verwenden:
- Aktivieren Sie die Places API (New).
Fügen Sie das Places Swift SDK zu Ihren Abhängigkeiten hinzu. Sie können
GooglePlaces
,GooglePlacesSwift
oder beides installieren.Initialisieren Sie den Places-Client mit
PlacesClient
.
Schritt-für-Schritt-Beispiel für die Migration
Angenommen, eine App, die das Places SDK for iOS verwendet, erhält auf Grundlage einer Texteingabe Vorschläge für die automatische Vervollständigung und ruft dann die Details des ersten Ortsvorschlags ab. Wenn Sie das Places SDK for iOS verwenden, sieht der vorhandene Code möglicherweise so aus:
// 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))")
}
}
Places-Client-Initialisierung aktualisieren
Um den Code zu modernisieren und die Funktionen des neuen SDK zu nutzen, müssen Sie den GMSPlacesClient durch den 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 wird im Places Swift SDK die aktualisierte AutocompleteRequest verwendet.
Aktualisierter Code
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
Original code
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()
Autocomplete-Anfrage aktualisieren
Sie könnten damit beginnen, den Ablauf der Anfragen zur automatischen Vervollständigung zu aktualisieren. Im alten Code wird ein Callback verwendet, um Vorschläge zur automatischen Vervollständigung anzufordern, während im neuen Code das Muster switch
/await
verwendet wird. Callbacks können die Codestruktur und die Fehlerbehandlung komplexer machen. Das neue Places Swift SDK unterstützt die Parallelität, 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))")
}
Methoden- und Klassennamen aktualisieren
Schließen Sie die Migration ab, indem Sie den fetchPlace
-Code refaktorieren 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, z. B.: GMSFetchPlaceRequest
wird zu FetchPlaceRequest
.
Typverarbeitung
Die neue Methode fetchPlace
verwendet eine verbesserte Typverarbeitung. Im alten Code mussten die Rohwerte der Property übergeben werden. Im neuen Code ist es nicht erforderlich, dass Entwickler Rohwerte explizit abrufen. Das verbessert die Übersichtlichkeit und Lesbarkeit.
Gleichzeitigkeit
Außerdem unterstützt die neue Methode die Parallelität, 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
Auf der Seite Versionshinweise zum Places Swift SDK for iOS finden Sie Informationen zu neuen Funktionen und Änderungen.