Places SDK for iOS から Places Swift SDK for iOS(プレビュー版)への移行は簡単で、段階的に行うことができます。Places Swift SDK for iOS(プレビュー版)の構造体は Objective-C ベースの構造体と互換性がないため、GMSPlacesClient での API の使用に基づいて、機能の個別のチャンクを移行することをおすすめします。
iOS 向け Places Swift SDK(プレビュー版)をプロジェクトに追加する
Places Swift SDK for iOS(プレビュー版)を使用するには、次の手順が必要です。
- Places API(新版)を有効にします。
依存関係に Places Swift SDK for iOS(プレビュー版)を追加します。
GooglePlaces
またはGooglePlacesSwift
のいずれか、または両方をインストールできます。PlacesClient
を使用してプレイス クライアントを初期化します。
移行のステップバイステップの例
たとえば、Places SDK for iOS を使用するアプリがテキスト入力に基づいてオートコンプリート候補を受け取った後、最初の場所候補の詳細を取得するとします。Places SDK for iOS を使用している場合、既存のコードは次のようになります。
// 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 クライアントの初期化処理を更新する
コードを最新化して新しい SDK の機能を活用するには、GMSPlacesClient を PlacesClient に置き換える必要があります。また、新しいメソッドではパラメータ名が変更されているため、パラメータを with
ではなく from
に更新する必要があります。最後に、Places Swift SDK for iOS(プレビュー版)では、アップグレードされた AutocompleteRequest が使用されます。
コードの更新
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
元のコード
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()
予測入力リクエストを更新する
まず、予測入力リクエストのフローを更新します。古いコードではコールバックを使用して予測入力の候補をリクエストしますが、新しいコードでは switch
/await
パターンを使用します。コールバックを使用すると、コード構造とエラー処理が複雑になる可能性があります。新しい iOS 向け Places Swift SDK(プレビュー版)は同時実行をサポートしているため、非同期オペレーションが簡素化されます。
// 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))")
}
メソッド名とクラス名を更新する
最後に、fetchPlace
コードをリファクタリングし、GMSPlacesClient
の初期化と GMSPlaceProperty
の宣言の両方を削除して、移行を完了します。Places Swift SDK for iOS(プレビュー版)では、メソッドとクラス名が更新され、「GMS」接頭辞が削除されているため、それに応じて更新する必要があります。GMSFetchPlaceRequest
は FetchPlaceRequest
になります。
型の処理
新しい fetchPlace
メソッドでは、改善された型処理が使用されます。古いコードではプロパティの元の値を渡す必要がありましたが、新しいコードでは、デベロッパーがここで元の値を明示的に取得する必要がないため、簡潔さと読みやすさが向上します。
同時実行
また、新しいメソッドは同時実行をサポートしているため、placesClient.fetchPlace
のコールバックを placesSwiftClient.fetchPlace
の switch
/await
パターンに置き換えることができます。
// 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)")
}
最新情報を入手する
新機能と変更点については、Places Swift SDK for iOS(プレビュー版)のリリースノート ページをご覧ください。