Zum Places Swift SDK for iOS migrieren

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:

  1. Aktivieren Sie die Places API (neu).
  2. Fügen Sie das Places Swift SDK Ihren Abhängigkeiten hinzu. Sie können GooglePlaces, GooglePlacesSwift oder beides installieren.

  3. 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.