iOS के लिए Places Swift SDK पर माइग्रेट करना

Places SDK for iOS (लेगसी) से Places Swift SDK for iOS पर माइग्रेट करना आसान है. साथ ही, इसे धीरे-धीरे किया जा सकता है. iOS के लिए Places Swift SDK में मौजूद स्ट्रक्चर, Objective-C पर आधारित स्ट्रक्चर के साथ काम नहीं करते. इसलिए, हमारा सुझाव है कि GMSPlacesClient में एपीआई के इस्तेमाल के आधार पर, फ़ंक्शन के अलग-अलग हिस्सों को माइग्रेट करें.

अपने प्रोजेक्ट में Places Swift SDK for iOS जोड़ना

iOS के लिए Places Swift SDK का इस्तेमाल करने के लिए, यह तरीका अपनाना ज़रूरी है:

  1. Places API (नया) को चालू करें.
  2. अपनी डिपेंडेंसी में Places Swift SDK जोड़ें. आपके पास GooglePlaces, GooglePlacesSwift या दोनों को इंस्टॉल करने का विकल्प है.

  3. Places क्लाइंट को 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 Client initializer को अपडेट करना

कोड को आधुनिक बनाने और नए SDK टूल की सुविधाओं का फ़ायदा लेने के लिए, आपको GMSPlacesClient को PlacesClient से बदलना होगा. इसके अलावा, नए तरीके में पैरामीटर के नाम बदल दिए गए हैं. इसलिए, आपको पैरामीटर को with के बजाय from पर अपडेट करना होगा. आखिर में, 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()

ऑटोकंप्लीट के अनुरोध को अपडेट करना

ऑटोकंप्लीट की सुविधा के अनुरोध के फ़्लो को अपडेट करके, इसकी शुरुआत की जा सकती है. पुराने कोड में, अपने-आप पूरा होने वाले सुझावों का अनुरोध करने के लिए कॉलबैक का इस्तेमाल किया जाता है. वहीं, नए कोड में switch/await पैटर्न का इस्तेमाल किया जाता है. कॉलबैक से कोड स्ट्रक्चर और गड़बड़ी को मैनेज करने की प्रोसेस जटिल हो सकती है. नया 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))")
}

इस्तेमाल से बाहर हो चुकी क्लास, मेथड, और typedefs को बदलना

iOS के लिए Places SDK में मौजूद ये क्लास, तरीके, और typedef, 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 के नए तरीके में, टाइप हैंडलिंग को बेहतर बनाया गया है. पुराने कोड में प्रॉपर्टी की रॉ वैल्यू पास करनी पड़ती थी. हालांकि, नए कोड में डेवलपर को रॉ वैल्यू को साफ़ तौर पर फ़ेच करने की ज़रूरत नहीं होती. इससे कोड को छोटा और पढ़ने में आसान बनाया जा सकता है.

एक साथ कई टास्क करने की सुविधा

इसके अलावा, नया तरीका एक साथ कई काम करने की सुविधा के साथ काम करता है. इससे 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 के रिलीज़ नोट पेज पर जाएं.