ย้ายข้อมูลไปยัง Places Swift SDK สำหรับ iOS

การย้ายข้อมูลจาก Places SDK สำหรับ iOS (เดิม) ไปยัง Places Swift SDK สำหรับ iOS ควรเป็นไปอย่างตรงไปตรงมาและสามารถทำได้ทีละขั้น เนื่องจากโครงสร้างใน Places Swift SDK สำหรับ iOS ไม่เข้ากันกับโครงสร้างที่ใช้ Objective-C เราขอแนะนำให้ย้ายข้อมูลฟังก์ชันการทำงานเป็นส่วนๆ ตามการใช้ API ใน GMSPlacesClient

เพิ่ม Places Swift SDK สำหรับ iOS ลงในโปรเจ็กต์

คุณต้องทำตามขั้นตอนต่อไปนี้เพื่อใช้ Places Swift SDK สำหรับ iOS

  1. เปิดใช้ Places API (ใหม่)
  2. เพิ่ม Places Swift SDK ลงในทรัพยากร Dependency คุณเลือกติดตั้ง GooglePlaces, GooglePlacesSwift หรือทั้ง 2 อย่างก็ได้

  3. เริ่มต้นไคลเอ็นต์ Places ด้วย PlacesClient

ตัวอย่างการย้ายข้อมูลทีละขั้นตอน

ตัวอย่างเช่น สมมติว่าแอปที่ใช้ Places SDK สำหรับ iOS ได้รับคำแนะนำที่เติมข้อความอัตโนมัติโดยอิงตามการป้อนข้อความ จากนั้นจึงดึงรายละเอียดของคำแนะนำสถานที่แรก เมื่อใช้ Places SDK สำหรับ 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 นอกจากนี้ ชื่อพารามิเตอร์จะเปลี่ยนไปในเมธอดใหม่ คุณจึงต้องอัปเดตพารามิเตอร์เป็น from แทน with สุดท้าย Places Swift SDK จะใช้ AutocompleteRequest ที่อัปเกรดแล้ว

โค้ดที่อัปเดต

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

โค้ดเดิม

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

อัปเดตคำขอเติมข้อความอัตโนมัติ

คุณสามารถเริ่มต้นด้วยการอัปเดตขั้นตอนคำขอเติมข้อความอัตโนมัติ โค้ดเก่าใช้ Callback เพื่อขอคำแนะนำที่เติมข้อความอัตโนมัติ ส่วนโค้ดใหม่ใช้รูปแบบ switch/await Callback อาจเพิ่มความซับซ้อนให้กับโครงสร้างโค้ดและการจัดการข้อผิดพลาด Places SDK สำหรับ Swift ใหม่รองรับการทำงานพร้อมกัน ซึ่งช่วยให้การดำเนินการแบบอะซิงโครนัสง่ายขึ้น

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

แทนที่คลาส เมธอด และ Typedef ที่เลิกใช้งานแล้ว

คลาส, เมธอด และ typedef ต่อไปนี้ใน Places SDK สำหรับ iOS จะใช้งานไม่ได้อีกต่อไปในเวอร์ชัน v11.0 ขึ้นไป

ตารางนี้แสดงเมธอดที่เลิกใช้งานและเมธอดที่ใช้แทน

เลิกใช้ การแทนที่
currentPlaceWithCallback หรือ findPlaceLikelihoodsFromCurrentLocationWithPlaceFields searchNearbyWithRequest
lookUpPlaceID หรือ fetchPlaceFromPlaceID fetchPlaceWithRequest
lookUpPhotosForPlaceID หรือ loadPlacePhoto fetchPhotoWithRequest
GMSAutocompletePrediction AutocompleteSuggestion
findAutocompletePredictionsFromQuery หรือ GMSAutocompleteFetcher fetchAutocompleteSuggestionsFromRequest
isOpenWithPlaceID หรือ isOpenWithPlace isOpenWithRequest
GMSAutocompleteResultsViewController, GMSAutocompleteTableDataSource หรือ GMSAutocompleteViewController placeAutocomplete

อัปเดตชื่อเมธอดและคลาส

สุดท้าย ให้ทำการย้ายข้อมูลให้เสร็จสมบูรณ์โดยเปลี่ยนโครงสร้างภายในโค้ด fetchPlace และนำทั้งการเริ่มต้น GMSPlacesClient และการประกาศ GMSPlaceProperty ออก ใน Places Swift SDK ชื่อเมธอดและคลาสได้รับการอัปเดตเพื่อนำคำนำหน้า "GMS" ออก และต้องอัปเดตตามนั้น เช่น GMSFetchPlaceRequest จะกลายเป็น FetchPlaceRequest

การจัดการประเภท

เมธอด fetchPlace ใหม่ใช้การจัดการประเภทที่ปรับปรุงแล้ว แม้ว่าโค้ดเก่าจะต้องส่งค่าดิบของพร็อพเพอร์ตี้ แต่โค้ดใหม่ไม่จำเป็นต้องให้นักพัฒนาซอฟต์แวร์ดึงค่าดิบอย่างชัดเจนที่นี่ จึงช่วยปรับปรุงความกระชับและความอ่านง่าย

การเกิดขึ้นพร้อมกัน

นอกจากนี้ เมธอดใหม่ยังรองรับการทำงานพร้อมกัน ซึ่งช่วยให้สามารถแทนที่ Callback ใน placesClient.fetchPlace ด้วยรูปแบบ switch/await ใน 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)")
}

รับข้อมูลอัปเดต

ไปที่หน้าบันทึกประจำรุ่นของ Places Swift SDK สำหรับ iOS เพื่อดูข้อมูลเกี่ยวกับฟีเจอร์ใหม่และการเปลี่ยนแปลง