Die Migration vom Places SDK for iOS zum Places Swift SDK for iOS (Vorabversion) sollte unkompliziert sein und kann schrittweise erfolgen. Da die Strukturen im Places Swift SDK for iOS (Vorabversion) nicht mit ihren Objective-C-basierten Pendants kompatibel sind, empfehlen wir, einzelne Funktionsbereiche zu migrieren, die auf der Verwendung von APIs in GMSPlacesClient basieren.
Fügen Sie Ihrem Projekt das Places Swift SDK for iOS (Vorabversion) hinzu
Für die Verwendung des Places Swift SDK for iOS (Vorabversion) sind die folgenden Schritte erforderlich:
- Aktivieren Sie die Places API (New).
Fügen Sie das Places Swift SDK for iOS (Vorabversion) zu Ihren Abhängigkeiten hinzu. Sie können
GooglePlaces
,GooglePlacesSwift
oder beides installieren.Initialisieren Sie den Places-Client mit
PlacesClient
.
Beispiel für eine detaillierte Migration
Angenommen, eine App, die das Places SDK for iOS verwendet, erhält Vorschläge zur automatischen Vervollständigung auf Grundlage einer Textzeile und ruft dann die Details des ersten Ortsvorschlags ab. Mit dem Places SDK for iOS könnte der vorhandene Code in etwa 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))")
}
}
Places Client-Initialisierer aktualisieren
Wenn Sie den Code modernisieren und die Funktionen des neuen SDKs nutzen möchten, 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 von with
in from
ändern. Im Places Swift SDK for iOS (Vorabversion) wird 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önnen mit der Aktualisierung der Abläufe für automatische Vervollständigungsanfragen beginnen. Im alten Code wird ein Rückruf verwendet, um Vorschläge zur automatischen Vervollständigung anzufordern. Im neuen Code wird ein switch
/await
-Muster verwendet. Callbacks können die Codestruktur und die Fehlerbehandlung verkomplizieren. Das neue Places Swift SDK for iOS (Vorabversion) 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))")
}
Aktualisierungsmethode und Klassennamen aktualisieren
Schließen Sie die Migration ab, indem Sie den fetchPlace
-Code umstrukturieren und sowohl die GMSPlacesClient
-Initialisierung als auch die GMSPlaceProperty
-Deklaration entfernen. Im Places Swift SDK for iOS (Vorabversion) wurden die Methoden- und Klassennamen aktualisiert, um das Präfix „GMS“ zu entfernen.Sie müssen daher entsprechend aktualisiert werden. Beispiele: GMSFetchPlaceRequest
wird zu FetchPlaceRequest
.
Typbehandlung
Bei der neuen fetchPlace
-Methode wird die Typenbehandlung verbessert. Im alten Code mussten die Rohwerte der Property übergeben werden. Im neuen Code müssen Entwickler die Rohwerte hier nicht mehr explizit abrufen. Das erhöht die Übersichtlichkeit und Lesbarkeit.
Gleichzeitigkeit
Außerdem unterstützt die neue Methode die Parallelität, sodass der Rückruf 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 Versionshinweisen zum Places Swift SDK for iOS (Vorabversion) finden Sie Informationen zu neuen Funktionen und Änderungen.