Places Swift SDK for iOS(プレビュー)に移行する

Places SDK for iOS から Places Swift SDK for iOS(プレビュー版)への移行は簡単で、段階的に行うことができます。Places Swift SDK for iOS(プレビュー版)の構造体は 対応している場合は、移行することをおすすめします。 GMSPlacesClient の API の使用に基づく、個別の機能ブロックです。

Places Swift SDK for iOS(プレビュー)をプロジェクトに追加する

Places Swift SDK for iOS(プレビュー版)を使用するには、次の手順が必要です。

  1. Places API を有効化 (新規)
  2. 追加 Places Swift SDK for iOS(プレビュー) 依存関係に追加します。
  3. プレイス クライアントを PlacesClient

移行の詳細な例

例として、Places SDK for iOS を使用するアプリについて考えてみましょう。 は、テキスト入力に基づいて予測入力の候補を受け取り、 1 位の提案の詳細です使用 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」を削除して更新しました適宜更新する必要があります。 例:GMSFetchPlaceRequestFetchPlaceRequest になります。

型の取り扱い

新しい fetchPlace メソッドでは、改善された型処理が使用されています。以前のコードは プロパティの未加工の値を渡さなければならないため、新しいコードでは 明示的に未加工の値を取得できるため、簡潔性と できます。

同時実行

さらに、新しいメソッドは同時実行をサポートしているため、 switch/await パターンを指定した placesClient.fetchPlace のコールバック 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)")
}