نقل البيانات إلى حزمة تطوير البرامج Swift لنظام التشغيل iOS

يجب أن تكون عملية الانتقال من حزمة تطوير البرامج (SDK) لخدمة "الأماكن" على iOS إلى حزمة Places Swift SDK على iOS بسيطة ويمكن إجراؤها بشكل تدريجي. بما أنّ البُنى في حزمة Places Swift SDK على iOS غير متوافقة مع نظيراتها المستندة إلى Objective-C، ننصحك بنقل أجزاء منفصلة من الوظائف استنادًا إلى استخدام واجهات برمجة التطبيقات في GMSPlacesClient.

إضافة حزمة Places Swift SDK على iOS إلى مشروعك

يجب اتّباع الخطوات التالية لاستخدام حزمة Places Swift SDK على iOS:

  1. تفعيل Places API (الجديدة).
  2. إضافة حزمة Places Swift SDK إلى التبعيات يمكنك اختيار تثبيت GooglePlaces أو GooglePlacesSwift أو كلتيهما.

  3. تهيئة عميل "الأماكن" باستخدام PlacesClient

مثال على عملية نقل تدريجية

على سبيل المثال، لنفترض أنّ تطبيقًا يستخدم حزمة تطوير البرامج (SDK) لخدمة "الأماكن" على iOS يتلقّى اقتراحات الإكمال التلقائي استنادًا إلى نص تم إدخاله، ثم يسترد تفاصيل أول اقتراح مكان. باستخدام حزمة تطوير البرامج (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))")
  }
}

تعديل أداة تهيئة عميل "الأماكن"

لتحديث الرمز والاستفادة من إمكانات حزمة تطوير البرامج (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()

تعديل طلب الإكمال التلقائي

يمكنك البدء بتعديل مسار طلب الإكمال التلقائي. يستخدم الرمز القديم رد اتصال لطلب اقتراحات الإكمال التلقائي، بينما يستخدم الرمز الجديد نمط 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))")
}

استبدال الفئات والطرق والأسماء المستعارة التي تم إيقافها

تم إيقاف الفئات والطرق والأسماء المستعارة التالية في حزمة تطوير البرامج (SDK) لخدمة "الأماكن" على iOS اعتبارًا من الإصدار 10.4. لن تعود متاحة في الإصدار 11.0 الذي سيتم إطلاقه في الربع الثالث من عام 2026.

يعرض هذا الجدول الطرق التي تم إيقافها وبدائلها:

منهي العمل به البديل
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 بنمط 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 للتعرّف على الميزات والتغييرات الجديدة.