Migration zum Places Swift SDK for iOS (Vorabversion)

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:

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

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