Migrar do SDK do Places para iOS para SDK do Places Swift para iOS (pré-lançamento) deve ser simples e pode ser feito de forma incremental. Como os structs no SDK do Places Swift para iOS (pré-lançamento) não são compatíveis com as contrapartes baseadas em Objective-C, recomendamos migrar partes discretas da funcionalidade com base no uso de APIs no GMSPlacesClient.
Adicionar o SDK do Places Swift para iOS (pré-lançamento) ao seu projeto
As etapas a seguir são necessárias para usar o SDK do Places Swift para iOS (pré-lançamento):
- Ative a API Places (Novo).
- Adicione o método SDK do Places Swift para iOS (pré-lançamento) às dependências.
- Inicializar o cliente Places com
PlacesClient
Exemplo detalhado de migração
Por exemplo, suponha que um app que usa o SDK do Places para iOS recebe sugestões de preenchimento automático com base em uma entrada de texto e, em seguida, busca os detalhes da primeira sugestão de lugar. Usando o SDK do Places para iOS, o código atual pode ser parecido com este:
// 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, você
precisa substituir GMSPlacesClient por PlacesClient. Além disso, o
são alterados no novo método. Por isso, você precisará atualizar
como from
em vez de with
. Por fim, o
O SDK do Places Swift para iOS (pré-lançamento) usa a versão atualizada
AutocompleteRequest.
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
Comece atualizando o fluxo de solicitação de preenchimento automático. O código antigo usa uma
para solicitar sugestões de preenchimento automático, enquanto o novo código emprega uma
Padrão switch
/await
. Os callbacks podem aumentar a complexidade da estrutura do código e
do processamento de erros. O novo SDK do Places Swift para iOS (pré-lançamento) aceita 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))")
}
Atualizar nomes de métodos e classes
Por fim, conclua a migração refatorando o código fetchPlace
e
removendo a inicialização de GMSPlacesClient
e GMSPlaceProperty
declaração de serviço. No SDK do Places Swift para iOS (pré-lançamento), o método e os nomes de classe
foram atualizados para remover o "GMS" e precisam ser atualizados adequadamente.
Por exemplo: GMSFetchPlaceRequest
se torna FetchPlaceRequest
.
Manipulação de tipografia
O novo método fetchPlace
usa um processamento de tipo aprimorado. O código antigo
transmitir os valores brutos da propriedade, o novo código não exigirá
que os desenvolvedores busquem explicitamente valores brutos aqui, melhorando a concisão
facilitar a leitura.
Simultaneidade
Além disso, o novo método oferece suporte à simultaneidade, permitindo a substituição da
callback em placesClient.fetchPlace
com 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)")
}