iOS için Yerler Swift SDK'sına geçiş

iOS için Yerler SDK'sından (Eski) iOS için Places Swift SDK'ya geçiş işlemi kolaydır ve kademeli olarak yapılabilir. iOS için Places Swift SDK'sındaki yapılar, Objective-C tabanlı karşılıklarıyla uyumlu olmadığından GMSPlacesClient'taki API'lerin kullanımına dayalı ayrı işlev parçalarını taşımanızı öneririz.

iOS için Places Swift SDK'sını projenize ekleme

iOS için Places Swift SDK'yı kullanmak için aşağıdaki adımları uygulamanız gerekir:

  1. Places API'yi (Yeni) etkinleştirin.
  2. Places Swift SDK'sını bağımlılıklarınıza ekleyin. GooglePlaces, GooglePlacesSwift veya her ikisini birden yükleyebilirsiniz.

  3. PlacesClient ile Places istemcisini başlatın.

Adım adım taşıma örneği

Örneğin, iOS için Yerler SDK'sını kullanan bir uygulamanın, metin girişine dayalı otomatik tamamlama önerileri aldığını ve ardından ilk yer önerisinin ayrıntılarını getirdiğini varsayalım. iOS için Yerler SDK'sını kullanırken mevcut kod aşağıdaki gibi görünebilir:

// 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 başlatıcısını güncelleme

Kodu modernize etmek ve yeni SDK'nın özelliklerinden yararlanmak için GMSPlacesClient'ı PlacesClient ile değiştirmeniz gerekir. Ayrıca, yeni yöntemde parametre adları değiştirildiğinden parametreyi with yerine from olarak güncellemeniz gerekir. Son olarak Places Swift SDK'sı, yükseltilmiş AutocompleteRequest'i kullanır.

Güncellenen kod

// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared

Orijinal kod

// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()

Otomatik tamamlama isteğini güncelleme

Otomatik tamamlama isteği akışını güncelleyerek başlayabilirsiniz. Eski kod, otomatik tamamlama önerileri istemek için bir geri çağırma işlevi kullanırken yeni kod switch/await kalıbını kullanır. Geri çağırmalar, kod yapısını ve hata işlemeyi daha karmaşık hale getirebilir. Yeni Places Swift SDK'sı, eşzamanlılığı destekleyerek eşzamansız işlemleri basitleştirir.

// 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))")
}

Desteği sonlandırılan sınıfları, yöntemleri ve typedef'leri değiştirme

iOS için Yerler SDK'sındaki aşağıdaki sınıflar, yöntemler ve typedef'ler 11.0 ve sonraki sürümlerde artık kullanılamaz.

Bu tabloda, desteği sonlandırılan yöntemler ve bunların yerine kullanılacak yöntemler gösterilmektedir:

Kullanımdan kaldırıldı Değiştirme
currentPlaceWithCallback veya findPlaceLikelihoodsFromCurrentLocationWithPlaceFields searchNearbyWithRequest
lookUpPlaceID veya fetchPlaceFromPlaceID fetchPlaceWithRequest
lookUpPhotosForPlaceID veya loadPlacePhoto fetchPhotoWithRequest
GMSAutocompletePrediction AutocompleteSuggestion
findAutocompletePredictionsFromQuery veya GMSAutocompleteFetcher fetchAutocompleteSuggestionsFromRequest
isOpenWithPlaceID veya isOpenWithPlace isOpenWithRequest
GMSAutocompleteResultsViewController, GMSAutocompleteTableDataSource veya GMSAutocompleteViewController placeAutocomplete

Yöntem ve sınıf adlarını güncelleme

Son olarak, fetchPlace kodunu yeniden düzenleyip hem GMSPlacesClient başlatma hem de GMSPlaceProperty bildirimini kaldırarak taşıma işlemini tamamlayın. Places Swift SDK'da yöntem ve sınıf adları, "GMS" ön ekini kaldıracak şekilde güncellendi ve buna göre güncellenmesi gerekiyor. Örneğin, GMSFetchPlaceRequest, FetchPlaceRequest olur.

Tür işleme

Yeni fetchPlace yöntemi, iyileştirilmiş tür işleme özelliğini kullanır. Eski kod, özelliğin ham değerlerinin iletilmesini gerektirirken yeni kod, geliştiricilerin ham değerleri burada açıkça getirmesini gerektirmez. Bu sayede kod daha kısa ve okunabilir hale gelir.

Eşzamanlılık

Ayrıca yeni yöntem, eşzamanlılığı destekleyerek placesClient.fetchPlace içindeki geri çağırmanın placesSwiftClient.fetchPlace içinde bir switch/await kalıbıyla değiştirilmesine olanak tanır.

// 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)")
}

Son gelişmelerden haberdar olun.

Yeni özellikler ve değişiklikler hakkında bilgi edinmek için iOS için Places Swift SDK'sı sürüm notları sayfasını ziyaret edin.