A migração do SDK do Places para iOS para o SDK do Places Swift para iOS é simples e pode ser feita de forma incremental. Como as structs no SDK do Places Swift para iOS não são compatíveis com as contrapartes baseadas em Objective-C, recomendamos migrar blocos discretos de funcionalidade com base nos usos de APIs no GMSPlacesClient.
Adicionar o SDK do Places Swift para iOS ao seu projeto
As etapas a seguir são necessárias para usar o SDK do Places Swift para iOS:
- Ative a API Places (nova).
Adicione o SDK do Places Swift às suas dependências. Você pode escolher instalar
GooglePlaces,GooglePlacesSwift, ou ambos.Inicialize o cliente do Places com
PlacesClient.
Exemplo de migração detalhada
Por exemplo, suponha que um app que usa o SDK do Places para iOS receba sugestões de preenchimento automático com base em uma entrada de texto e, em seguida, busque os detalhes da primeira sugestão de lugar. Usando o SDK do Places para iOS, o código atual pode ser semelhante ao seguinte:
// 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))")
}
}
Atualizar o inicializador do cliente do Places
Para modernizar o código e aproveitar os recursos do novo SDK, é necessário substituir o GMSPlacesClient pelo PlacesClient. Além disso, os nomes dos parâmetros são alterados no novo método. Portanto, é necessário atualizar o parâmetro para from em vez de with. Por fim, o
SDK do Places Swift usa o
AutocompleteRequest atualizado.
Código atualizado
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
Código original
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()
Atualizar a solicitação de preenchimento automático
Você pode começar atualizando o fluxo de solicitação de preenchimento automático. O código antigo usa um callback para solicitar sugestões de preenchimento automático, enquanto o novo código emprega um padrão switch/await. Os callbacks podem adicionar complexidade à estrutura do código e ao tratamento de erros. O novo SDK do Places Swift oferece suporte à simultaneidade, o que simplifica as operações assíncronas.
// 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))")
}
Substituir classes, métodos e typedefs descontinuados
As classes, os métodos e os typedefs a seguir no SDK do Places para iOS foram descontinuados na versão 10.4. Eles não estarão mais disponíveis na versão 11.0, que será lançada no terceiro trimestre de 2026.
Esta tabela mostra os métodos descontinuados e as substituições deles:
| Descontinuado | Substituição |
|---|---|
currentPlaceWithCallback ou findPlaceLikelihoodsFromCurrentLocationWithPlaceFields |
searchNearbyWithRequest |
lookUpPlaceID ou fetchPlaceFromPlaceID |
fetchPlaceWithRequest |
lookUpPhotosForPlaceID ou loadPlacePhoto |
fetchPhotoWithRequest |
GMSAutocompletePrediction |
AutocompleteSuggestion |
findAutocompletePredictionsFromQuery ou GMSAutocompleteFetcher |
fetchAutocompleteSuggestionsFromRequest |
isOpenWithPlaceID ou isOpenWithPlace |
isOpenWithRequest |
GMSAutocompleteResultsViewController, GMSAutocompleteTableDataSource ou GMSAutocompleteViewController |
placeAutocomplete |
Atualizar nomes de métodos e classes
Por fim, conclua a migração refatorando o código fetchPlace e removendo a inicialização GMSPlacesClient e a declaração GMSPlaceProperty. No SDK do Places Swift, o método e os nomes de classe
foram atualizados para remover o prefixo "GMS" e precisam ser atualizados de acordo.
Por exemplo, GMSFetchPlaceRequest se torna FetchPlaceRequest.
Tratamento de tipos
O novo método fetchPlace usa o tratamento de tipos aprimorado. Embora o código antigo exigisse a transmissão dos valores brutos da propriedade, o novo código não exige que os desenvolvedores busquem valores brutos explicitamente aqui, melhorando a concisão e a legibilidade.
Simultaneidade
Além disso, o novo método oferece suporte à simultaneidade, permitindo a substituição do callback em placesClient.fetchPlace por um padrão switch/await em placesSwiftClient.fetchPlace.
// 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)")
}
Ficar por dentro
Acesse a página de notas de lançamento do SDK do Places Swift para iOS para saber mais sobre novos recursos e mudanças.