iOS-এর জন্য Places Swift SDK-তে মাইগ্রেট করা

iOS-এর জন্য Places SDK (পুরনো) থেকে iOS-এর জন্য Places Swift SDK-তে মাইগ্রেট করা সহজ এবং এটি ধাপে ধাপে করা যেতে পারে। iOS-এর জন্য Places Swift SDK-তে স্ট্রাক্টগুলি তাদের অবজেক্টিভ-সি ভিত্তিক সমকক্ষগুলির সাথে সামঞ্জস্যপূর্ণ নয়, তাই আমরা GMSPlacesClient-এ API-এর ব্যবহারের উপর ভিত্তি করে কার্যকারিতার বিচ্ছিন্ন অংশগুলি মাইগ্রেট করার পরামর্শ দিই।

আপনার প্রোজেক্টে iOS-এর জন্য Places Swift SDK যোগ করা

iOS-এর জন্য Places Swift SDK ব্যবহার করতে নিম্নলিখিত ধাপগুলি অনুসরণ করতে হবে:

  1. Places API (নতুন) চালু করুন।
  2. আপনার ডিপেন্ডেন্সিতে Places Swift SDK যোগ করুন। আপনি GooglePlaces, GooglePlacesSwift বা দুটিই ইনস্টল করার বিকল্প বেছে নিতে পারেন।

  3. PlacesClient-এর মাধ্যমে Places ক্লায়েন্ট শুরু করুন।

ধাপে-ধাপে মাইগ্রেশনের উদাহরণ

উদাহরণস্বরূপ, ধরা যাক iOS-এর জন্য Places SDK ব্যবহার করে এমন একটি অ্যাপ টেক্সট ইনপুটের উপর ভিত্তি করে অটোকমপ্লিট সাজেশন পায়, তারপর প্রথম স্থানের সাজেশনের বিবরণ নিয়ে আসে। iOS-এর জন্য Places SDK ব্যবহার করে, আগে থেকে থাকা কোডটি দেখতে নিম্নলিখিত কোডের মতো হতে পারে:

// 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 ইনিশিয়ালাইজার আপডেট করুন

কোডকে আধুনিক করতে এবং নতুন 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))")
}

বাতিল করা ক্লাস, পদ্ধতি ও টাইপডেফ পরিবর্তন করুন

iOS-এর জন্য Places SDK-তে নিম্নলিখিত ক্লাস, পদ্ধতি এবং টাইপডেফ 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)")
}

আপ-টু-ডেট থাকুন

নতুন ফিচার ও পরিবর্তন সম্পর্কে জানতে iOS-এর জন্য Places Swift SDK-এর রিলিজ নোট পৃষ্ঠা দেখুন।