سرویس «تکمیل خودکار (جدید)» یک میانای برنامهسازی کاربردی iOS است که در پاسخ به درخواست، مکانهای پیشنهادی را برمیگرداند. در درخواست، رشته جستجوی نوشتاری و مرزهای جغرافیایی را که ناحیه جستجو را کنترل میکنند مشخص کنید.
سرویس «تکمیل خودکار (جدید)» میتواند با کلمات کامل و رشتههای فرعی ورودی مطابقت داشته باشد و نام مکانها، نشانیها، و کدهای Plus را حل کند. بنابراین، برنامهها میتوانند همزمان با تایپ کردن کاربر پُرسمان ارسال کنند تا پیشنهادهای مکان را درلحظه ارائه دهند.
پیشنهادهای مکان مکانهایی مثل کسبوکارها، نشانیها، و نقاط جالب هستند که براساس رشته نوشتاری ورودی و منطقه جستجوی مشخصشده ارائه میشوند.
برای مثال، بااستفاده از رشتهای که حاوی بخشی از ورودی کاربر است، «Spagh»، با محدود کردن منطقه جستجو به شهر نیویورک، میانای برنامهسازی کاربردی را بهعنوان ورودی فراخوانی میکنید. سپس پاسخ حاوی فهرستی از پیشنهادهای مکان است که با رشته جستجو و منطقه جستجو مطابقت دارد، مانند رستورانی بهنام «کافه اسپاگتی»، بههمراه جزئیاتی درباره آن مکان.
پیشنهادهای مکان برگرداندهشده برای ارائه به کاربر طراحی شدهاند تا بتواند مکان موردنظر را انتخاب کند. میتوانید درخواست جزئیات جا (جدید) بدهید تا اطلاعات بیشتری درباره هرکدام از پیشنهادهای مکان برگرداندهشده دریافت کنید.
میتوانید عملکرد «تکمیل خودکار (جدید)» را به دو روش اصلی در برنامهتان ادغام کنید:
- دریافت پیشبینیهای مکان بهصورت برنامهنویسیشده: مستقیماً با میانای برنامهسازی کاربردی تماس بگیرید تا پیشبینیها را بازیابی کنید و آنها را در میانای کاربر سفارشی نمایش دهید.
- افزودن ابزاره «تکمیل خودکار جا»: تجربه تکمیل خودکار جستجوی آماده استفادهای را ارائه میدهد که پیشبینیها را همزمان با تایپ کردن کاربر نمایش میدهد.
دریافت پیشبینیهای مکان بهصورت برنامهنویسیشده
درخواستهای «تکمیل خودکار (جدید)»
با فراخوانی روشی در
GMSPlacesClient، درخواست تکمیل خودکار ایجاد کنید.
میتوانید پارامترها را در شیء
GMSAutocompleteRequest
ارسال کنید. پاسخ، پیشنهادهای «تکمیل خودکار» را در شیء
GMSAutocompletePlaceSuggestion
ارائه میدهد.
کلید میانای API و
پارامترهای query
الزامی است. همچنین میتوانید
GMSAutocompleteSessionToken
را برای مرتبط کردن درخواستها با جلسه صورتحساب و
GMSAutocompleteFilter
را برای اعمال کردن روی نتایج اضافه کنید.
نسخه Places Swift SDK
با فراخوانی روشی در
PlacesClient، درخواست تکمیل خودکار ایجاد کنید.
میتوانید پارامترها را در شیء
AutocompleteRequest
ارسال کنید. پاسخ، پیشنهادهای «تکمیل خودکار» را در شیء
AutocompletePlaceSuggestion
ارائه میدهد.
کلید میانای API و پارامترهای query الزامی است. همچنین میتوانید
AutocompleteSessionToken
را برای مرتبط کردن درخواستها با جلسه صورتحساب و
AutocompleteFilter
را برای اعمال کردن روی نتایج اضافه کنید.
برای اطلاعات بیشتر درباره پارامترهای الزامی و اختیاری، بخش پارامترهای این سند را ببینید.
کیت توسعه نرمافزار Places Swift
let center = (37.3913916, -122.0879074) let northEast = (37.388162, -122.088137) let southWest = (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) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): // Handle suggestions. case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let northWestBounds = CLLocationCoordinate2DMake(40.921628, -73.700051) let southEastBounds = CLLocationCoordinate2DMake(40.477398, -74.259087) let filter = GMSAutocompleteFilter() filter.types = [kGMSPlaceTypeRestaurant] filter.locationBias = GMSPlaceRectangularLocationOption(northWestBounds, southEastBounds) let request = GMSAutocompleteRequest(query:"Spagh") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
آبجکتیو-سی
CLLocationCoordinate2D northEast = CLLocationCoordinate2DMake(37.388162, -122.088137); CLLocationCoordinate2D southWest = CLLocationCoordinate2DMake(37.395804, -122.077023); GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.types = @[ kGMSPlaceTypeRestaurant ]; filter.locationBias = GMSPlaceRectangularLocationOption(northEast, southWest); GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
پاسخهای تکمیل خودکار (جدید)
«تکمیل خودکار» آرایهای از حداکثر پنج
نمونه GMSAutocompleteSuggestion را برمیگرداند. آرایه شامل این موارد است:
placeID-
types: انواع قابلاعمال برای این مکان. distanceMeters: فاصله از مبدأ.-
attributedFullText: نوشتار کامل قابلخواندن برای انسان از یک پیشنهاد. attributedPrimaryText: نوشتار اصلی قابلخواندن برای انسان برای پیشنهاد.-
attributedSecondaryText: نوشتار ثانویه قابلخواندن برای انسان از یک پیشنهاد. structuredFormat: نام خاص و نوشتار ابهامزدایی، مثل شهر یا منطقه.
پارامترهای الزامی
پُرسمان
رشته نوشتاری که باید در آن جستجو شود. کلمات کامل و رشتههای فرعی، نام مکانها، نشانیها، و کدهای Plus Code را مشخص کنید. سرویس «تکمیل خودکار (جدید)» مطابقتهای احتمالی را براساس این رشته برمیگرداند و نتایج را براساس میزان ارتباطشان مرتب میکند.
پارامترهای اختیاری
sessionToken
کدهای جلسه رشتههای تولیدشده توسط کاربر هستند که تماسهای «تکمیل خودکار (جدید)» را (هم تماسهای برقرارشده ازطریق ابزاره و هم تماسهای برنامهای) بهعنوان «جلسه» ردیابی میکنند. «تکمیل خودکار (جدید)» از کد جلسه برای گروهبندی مراحل پُرسمان و انتخاب جستجوی تکمیل خودکار کاربر در یک جلسه مجزا برای اهداف صورتحساب استفاده میکند.
میتوانید کد جلسه «تکمیل خودکار جا» را آشکار کنید تا آن را به سرویسهای دیگری که بخشی از Places SDK for iOS نیستند، مانند اعتبارسنجی نشانی، ارسال کنید:
کیت توسعه نرمافزار Places Swift
let token = AutocompleteSessionToken() let filter = AutocompleteFilter(origin: CLLocationCoordinate2DMake(39.7, -94.5)) let request = AutocompleteRequest(query: "Piz", sessionToken: token, filter: filter) PlacesClient.shared.fetchAutocompleteSuggestions(request: request) { case .success(let suggestions): ... case .failure(let placesError): print(placesError) } // pass token's string format to use with a service that is not a part of iOS SDK. print("token: \(token)")
آبجکتیو-سی
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Piz"]; GMSAutocompleteSessionToken *token = [[GMSAutocompleteSessionToken alloc] init]; request.sessionToken = token; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.origin = [[CLLocation alloc] initWithLatitude:39.7 longitude:-94.5]; filter.locationBias = GMSPlaceRectangularLocationOption(topLocation, bottomLocation); request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> *_Nullable results, NSError *_Nullable error) { ... }]; // pass token's string format to use with a service that is not a part of iOS SDK. NSLog(@"%@", token.description);
برای اطلاعات بیشتر، کدهای جلسه را ببینید.
پارامترهای AutocompleteFilter اختیاری
انواع
هر مکان فقط میتواند یک نوع اصلی از انواع جدول
A یا جدول
B مرتبط با آن داشته باشد.
برای مثال، نوع اصلی ممکن است mexican_restaurant یا steak_house باشد.
بهطور پیشفرض، API همه مکانها را براساس پارامتر input برمیگرداند،
صرفنظر از مقدار نوع اصلی مرتبط با مکان. با ارسال پارامتر types، نتایج را به نوع اصلی یا انواع اصلی خاصی محدود کنید.
از این پارامتر برای مشخص کردن حداکثر پنج مقدار نوع از جدول A یا جدول B استفاده کنید. مکان باید با یکی از مقادیر نوع اصلی مشخصشده مطابقت داشته باشد تا در پاسخ گنجانده شود.
درخواست با خطای INVALID_REQUEST رد میشود اگر:
- بیشاز پنج نوع مشخص شده است.
- هر نوع ناشناختهای مشخص شده است.
برای مثال، برای محدود کردن نتایج به فروشگاههای کالاهای ورزشی، آن نوع را در
AutocompleteFilter خود مشخص کنید:
کیت توسعه نرمافزار Places Swift
let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ])
Swift
let filter = GMSAutocompleteFilter() filter.types = ["sporting_goods_store"]
آبجکتیو-سی
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.types = @[ "sporting_goods_store" ];
کشورها
فقط نتایج فهرست مناطق مشخصشده را که بهصورت آرایهای از حداکثر ۱۵ مقدار دو نویسهای ccTLD («دامنه سطح بالا») مشخص شدهاند، شامل شود. اگر حذف شود، هیچ محدودیتی برای پاسخ اعمال نمیشود. برای مثال، برای محدود کردن مناطق به آلمان و فرانسه:
کیت توسعه نرمافزار Places Swift
let filter = AutocompleteFilter(countries: ["DE", "FR"])
Swift
let filter = GMSAutocompleteFilter() filter.countries = ["DE", "FR"]
آبجکتیو-سی
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.countries = @[ @"DE", @"FR" ];
اگر هم locationRestriction و هم countries را مشخص کنید، نتایج در ناحیه تقاطع این دو تنظیم قرار میگیرند.
inputOffset
انحراف نویسه یونیکد صفرپایه که موقعیت مکاننما را در
input نشان میدهد. موقعیت مکاننما میتواند بر پیشبینیهای ارائهشده تأثیر بگذارد. اگر
خالی باشد، بهطور پیشفرض روی طول input تنظیم میشود.
locationBias یا locationRestriction
میتوانید locationBias یا locationRestriction را برای تعریف کردن منطقه جستجو مشخص کنید، اما نه هر دو را. locationRestriction را بهعنوان مشخصکننده منطقهای درنظر بگیرید که
نتایج باید در آن باشد، و locationBias را بهعنوان مشخصکننده منطقهای درنظر بگیرید که
نتایج باید نزدیک آن باشد اما میتواند خارج از آن منطقه باشد.
locationBiasمنطقهای را برای جستجو مشخص میکند. این مکان بهعنوان سوگیری عمل میکند، یعنی نتایج اطراف مکان مشخصشده میتواند برگردانده شود، ازجمله نتایج خارج از منطقه مشخصشده.locationRestrictionمنطقهای را برای جستجو مشخص میکند. نتایج خارج از منطقه مشخصشده برگردانده نمیشود.
منطقه locationBias یا locationRestriction را بهعنوان نمای مستطیلی یا دایرهای مشخص کنید.
دایره با نقطه مرکزی و شعاع به متر تعریف میشود. شعاع باید
بین ۰٫۰ و ۵۰۰۰۰٫۰ باشد. مقدار پیشفرض ۰٫۰ است. برای
locationRestriction، باید شعاع را روی مقداری بزرگتر از ۰٫۰ تنظیم کنید.
درغیراینصورت، درخواست هیچ نتیجهای برنمیگرداند.
برای مثال:
کیت توسعه نرمافزار Places Swift
let center = CLLocationCoordinate2DMake(40.477398, -74.259087) let bias = CircularCoordinateRegion(center: center, radius: 1000.0) let filter = AutocompleteFilter(coordinateRegionBias: bias)
Swift
let center = CLLocationCoordinate2DMake(40.730610, -73.935242) let radius = 1000.0 filter.locationBias = GMSPlaceCircularLocationOption(center, radius)
آبجکتیو-سی
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(40.730610, -73.935242); radius = 1000.0; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationBias = GMSPlaceCircularLocationOption(center, radius);
مستطیل یک نمای طول و عرض جغرافیایی است که بهصورت دو نقطه low و high
مخالف قطری نشان داده میشود. ناحیه نمایش بهعنوان منطقهای بسته درنظر گرفته میشود،
یعنی مرزهای آن را نیز شامل میشود. محدوده عرض جغرافیایی باید بین ۹۰- تا ۹۰ درجه باشد و محدوده طول جغرافیایی باید بین ۱۸۰- تا ۱۸۰ درجه باشد:
- اگر
low=high، ناحیه نمایش از آن نقطه واحد تشکیل میشود. - اگر
low.longitude>high.longitude، محدوده طول جغرافیایی معکوس میشود (نمای دید از خط طول جغرافیایی ۱۸۰ درجه عبور میکند). - اگر
low.longitude= ۱۸۰- درجه وhigh.longitude= ۱۸۰ درجه باشد، نمای هدف شامل همه طولهای جغرافیایی میشود. - اگر
low.longitude= ۱۸۰ درجه وhigh.longitude= ۱۸۰- درجه باشد، محدوده طول جغرافیایی خالی است.
low و high باید پر شوند و چارگوش نشاندادهشده نمیتواند خالی باشد. نمای خالی منجر به خطا میشود.
برای مثال، این ناحیه نمایش کاملاً شهر نیویورک را دربرمیگیرد:
کیت توسعه نرمافزار Places Swift
let northEast = CLLocationCoordinate2DMake(40.477398, -74.259087) let southWest = CLLocationCoordinate2DMake(40.921628, -73.700051) let filter = AutocompleteFilter(coordinateRegionBias: bias)
Swift
let high = CLLocationCoordinate2DMake(40.921628, -73.700051) let low = CLLocationCoordinate2DMake(40.477398, -74.259087) let filter = GMSAutocompleteFilter() filter.locationBias = GMSPlaceRectangularLocationOption(high, low)
آبجکتیو-سی
CLLocationCoordinate2D high = CLLocationCoordinate2DMake(40.477398, -74.259087); CLLocationCoordinate2D low = CLLocationCoordinate2DMake(440.921628, -73.700051); GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationBias = GMSPlaceRectangularLocationOption(high, low);
منشأ
نقطه مبدأ که فاصله مستقیم تا مقصد از آن محاسبه میشود (بهصورت distanceMeters برگردانده میشود). اگر این مقدار حذف شود، فاصله مستقیم برگردانده نخواهد شد. باید بهصورت مختصات طول و عرض جغرافیایی
مشخص شود:
کیت توسعه نرمافزار Places Swift
let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.395804, longitude: -122.077023))
Swift
let filter = GMSAutocompleteFilter() filter.origin = CLLocation(latitude: 37.395804, longitude: -122.077023)
آبجکتیو-سی
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude: -122.077023];
regionCode
کد منطقه استفادهشده برای قالببندی پاسخ، که بهصورت مقدار دو نویسهای ccTLD («دامنه سطح بالا») مشخص شده است. اکثر کدهای ccTLD با کدهای ISO 3166-1 یکسان هستند، با چند استثنای قابلتوجه. برای مثال، دامنه سطح بالای کد کشور پادشاهی متحد «uk» است (.co.uk) درحالیکه کد ISO 3166-1 آن «gb» است (ازنظر فنی برای نهاد «پادشاهی متحد بریتانیای کبیر و ایرلند شمالی»).
اگر کد منطقه نامعتبری را مشخص کنید، API خطای INVALID_ARGUMENT را برمیگرداند. این پارامتر میتواند براساس قانون ذیربط بر نتایج تأثیر بگذارد.
shouldIncludePureServiceAreaBusinesses
اگر true، کسبوکارهای با منطقه خدماتی خالص را در آرایه پاسخ برمیگرداند. کسبوکار با منطقه خدماتی خالص کسبوکاری است که مستقیماً از مشتریان بازدید میکند یا به آنها کالا یا خدمات ارسال میکند، ولی در نشانی کسبوکار به مشتریان خدمترسانی نمیکند.
برای مثال:
کیت توسعه نرمافزار Places Swift
let filter = AutocompleteFilter() filter.shouldIncludePureServiceAreaBusinesses = true
Swift
let filter = AutocompleteFilter() filter.shouldIncludePureServiceAreaBusinesses = true
آبجکتیو-سی
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.shouldIncludePureServiceAreaBusinesses = YES;
افزودن ابزارک «تکمیل خودکار جا»
برای ارائه آسانتر تجربه تکمیل خودکار جا بهصورت یکپارچه، میتوانید
ابزاره «تکمیل خودکار جا» را به برنامهتان اضافه کنید. این ابزاره یک میانای تمامصفحه اختصاصی
ارائه میدهد که ورودی کاربر را مدیریت میکند و پیشبینیهای جا را به کاربر نمایش میدهد و درعینحال
اشیاء AutocompletePlaceSuggestion را به برنامه برمیگرداند. سپس میتوانید درخواست جزئیات جا (جدید)
ارسال کنید تا اطلاعات بیشتری درباره هرکدام از پیشبینیهای جا دریافت کنید.
مانند زمانی که پیشبینیهای مکان را بهصورت برنامهنویسی دریافت میکنید،
ابزاره «تکمیل خودکار مکان» به شما امکان میدهد از کدهای جلسه برای
گروهبندی درخواستهای تکمیل خودکار در جلسه برای اهداف صورتحساب استفاده کنید. میتوانید با فراخوانی
AutocompleteSessionToken()،
یک کد جلسه را ارسال کنید.
اگر کد جلسه ارائه نکنید، ابزاره کد جلسه «تکمیل خودکار» برای شما ایجاد میکند که سپس میتوان آن را از فراخوانی برگشتی onSelection دریافت کرد. برای اطلاعات بیشتر درباره استفاده از کد جلسه، به درباره کد جلسه مراجعه کنید.
وقتی مقدار اتصال show روی true تنظیم شده باشد، کاربر به نمای تمامصفحه هدایت میشود که در آنجا میتواند مکانی را انتخاب کند. همانطور که کاربر تایپ میکند، ابزاره پیشنهادهایی برای مکانهایی مثل کسبوکارها، نشانیها، و نقاط جالب برمیگرداند. وقتی کاربر مکانی را انتخاب میکند، ابزاره با مکان انتخابشده،
گرداننده onSelection را فرامیخواند و نمای تمامصفحه را میبندد.
پارامترهای ابزاره «تکمیل خودکار جا»
علاوهبر پارامترهای دردسترس بهصورت برنامهنویسیشده، ابزاره «تکمیل خودکار جا» پارامترهای زیر را نیز ارائه میدهد.
نمایش
show مشخص میکند که آیا ابزاره نشان داده میشود یا نه.
onSelection
بستن برای اجرا هنگام انتخاب مکان.
onError
بستاری که هنگام وقوع خطا اجرا میشود. درصورت بروز خطا،
PlacesError
ارسال خواهد شد.
سفارشیسازی محتوا و زمینه
پارامترهای
AutocompleteUICustomization
سفارشیسازیهای واسط کاربر را برای اعمال روی ابزاره مشخص میکنند. گزینههای
سفارشیسازی عبارتاند از:
AutocompleteListDensity. این پارامتر به شما امکان میدهد تراکم فهرست پیشنهاد را انتخاب کنید،multiLineیاtwoLine.AutocompleteUIIcon. این پارامتر به شما امکان میدهد انتخاب کنید که نماد پیشفرض برای هر مورد فهرست نشان داده شود یا نه.theme. این پارامتر زمینه سفارشیای را مشخص میکند که هرکدام از مشخصههای سبک پیشفرض را لغو میکند. میتوانید رنگها، نویسهنگاری، فاصلهگذاری، حاشیهها، و گوشههای مؤلفه «تکمیل خودکار جا» را سفارشیسازی کنید. پیشفرضPlacesMaterialThemeاست. هر مشخصه زمینهای که لغو نشده باشد از سبکهای پیشفرض استفاده میکند.
نمونههای تکمیل خودکار (جدید)
استفاده از locationRestriction و locationBias
«تکمیل خودکار (جدید)» بهطور پیشفرض از سوگیری IP برای کنترل منطقه جستجو استفاده میکند. با سوگیری نشانی IP، میانای برنامهسازی کاربردی از نشانی IP دستگاه برای سوگیری نتایج استفاده میکند. میتوانید بهطور اختیاری از locationRestriction یا
locationBias (اما نه هردو) برای مشخص کردن
منطقه جستجو استفاده کنید.
محدودیت مکان، منطقه جستجو را مشخص میکند. نتایج خارج از منطقه مشخصشده برگردانده نمیشود. مثال زیر از محدودیت مکان برای محدود کردن درخواست به محدودیت مکان دایرهای با شعاع ۵۰۰۰ متر با مرکزیت سان فرانسیسکو استفاده میکند:
کیت توسعه نرمافزار Places Swift
let center = (37.775061, -122.419400) let radius = 5000.0 let restriction = CircularCoordinateRegion(center: center, radius: radius) let filter = AutocompleteFilter(coordinateRegionRestriction: restriction) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let center = CLLocationCoordinate2DMake(37.775061, -122.419400) let radius = 5000.0 let filter = GMSAutocompleteFilter() filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius) let request = GMSAutocompleteRequest(query:"Piz") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
آبجکتیو-سی
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400); radius = 5000.0; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius); GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
با سوگیری مکان، مکان بهعنوان سوگیری عمل میکند، یعنی نتایج اطراف مکان مشخصشده میتواند برگردانده شود، ازجمله نتایج خارج از منطقه مشخصشده. مثال بعدی درخواست قبلی را برای استفاده از سوگیری مکانی تغییر میدهد:
کیت توسعه نرمافزار Places Swift
let center = (37.775061, -122.419400) let radius = 5000.0 let bias = CircularCoordinateRegion(center: center, radius: radius) let filter = AutocompleteFilter(coordinateRegionBias: bias) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let center = CLLocationCoordinate2DMake(37.775061, -122.419400) let radius = 5000.0 let filter = GMSAutocompleteFilter() filter.locationBias = GMSPlaceCircularLocationOption(center, radius) let request = GMSAutocompleteRequest(query:"Piz") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
آبجکتیو-سی
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400); radius = 5000.0; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationBias = GMSPlaceCircularLocationOption(center, radius); GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
انواع کاربری
از پارامتر types برای محدود کردن نتایج درخواست به نوع خاصی که در جدول A و جدول B فهرست شده است استفاده کنید. میتوانید آرایهای با حداکثر پنج مقدار مشخص کنید. اگر حذف شود، همه انواع برگردانده میشود.
مثال زیر رشته پُرسمان «Soccer» را مشخص میکند و از پارامتر types برای محدود کردن نتایج به مؤسسههایی از نوع "sporting_goods_store" استفاده میکند:
کیت توسعه نرمافزار Places Swift
let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ]) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Soccer", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let filter = GMSAutocompleteFilter() filter.types = ["sporting_goods_store"] let request = GMSAutocompleteRequest(query:"Soccer") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
آبجکتیو-سی
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.types = @[ "sporting_goods_store" ]; GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Soccer"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
استفاده از مبدأ
وقتی پارامتر origin را در درخواست اضافه میکنید، که بهعنوان مختصات طول و عرض جغرافیایی مشخص میشود، API فاصله خط مستقیم از مبدأ تا مقصد را در پاسخ لحاظ میکند. پاسخ، فاصله را بهصورت distanceMeters برمیگرداند.
این مثال مبدأ را در مرکز سانفرانسیسکو تنظیم میکند:
کیت توسعه نرمافزار Places Swift
let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.7749, longitude: -122.4194)) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Amoeba", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let origin = CLLocation(latitude: 37.7749, longitude: -122.4194) let filter = GMSAutocompleteFilter() filter.origin = origin let request = GMSAutocompleteRequest(query:"Amoeba") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText)) and distance: \(String(describing: result.placeSuggestion?.distanceMeters))") } } })
آبجکتیو-سی
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude:-122.077023]; GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Amoeba"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
سفارشیسازی محتوا و زمینه
Swift
let uiCustomization = AutocompleteUICustomization( listDensity: .multiLine, listItemIcon: .noIcon, theme: PlacesMaterialTheme() )
افزودن ابزاره «تکمیل خودکار مکانها» (کد کامل)
کیت توسعه نرمافزار Places Swift
struct PlaceAutocompleteDemoView: View { @State private var fetchedPlace: Place? @State private var placesError: PlacesError? @State private var showWidget = false public var body: some View { VStack { Button("Search for a place") { showWidget.toggle() } .placeAutocomplete( show: $showWidget, onSelection: { (autocompletePlaceSuggestion, autocompleteSessionToken) in Task { let placesClient = await PlacesClient.shared let fetchPlaceRequest = FetchPlaceRequest( placeID: autocompletePlaceSuggestion.placeID, placeProperties: [.displayName, .formattedAddress], sessionToken: autocompleteSessionToken ) switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): print("Fetched place: \(place)") self.fetchedPlace = place case .failure(let placesError): print("Failed to fetch place: \(placesError)") self.placesError = placesError } } }, onError: { placesError in self.placesError = placesError } ) } } }
بهینهسازی تکمیل خودکار (جدید)
این بخش روالهای مطلوبی را شرح میدهد که به شما کمک میکند بیشترین بهره را از سرویس «تکمیل خودکار» (جدید) ببرید.
در اینجا چند دستورالعمل کلی ارائه شده است:
- سریعترین راه برای توسعه میانای کاربر فعال، استفاده از ابزاره «تکمیل خودکار (جدید)» در Maps JavaScript API، ابزاره «تکمیل خودکار (جدید)» در Places SDK for Android، یا ابزاره «تکمیل خودکار (جدید)» در Places SDK for iOS است.
- از همان ابتدا، فیلدهای داده ضروری «تکمیل خودکار (جدید)» را درک کنید.
- فیلدهای سوگیری مکان و محدودیت مکان اختیاری هستند اما میتوانند تأثیر قابلتوجهی بر عملکرد تکمیل خودکار داشته باشند.
- از مدیریت خطا استفاده کنید تا مطمئن شوید که اگر میانای برنامهسازی کاربردی خطایی برگرداند، برنامه شما بهخوبی تنزل پیدا میکند.
- مطمئن شوید که برنامهتان وقتی انتخابی وجود ندارد، این وضعیت را مدیریت میکند و راهی برای ادامه دادن به کاربران ارائه میدهد.
روالهای مطلوب بهینهسازی هزینه
بهینهسازی هزینه پایه
برای بهینهسازی هزینه استفاده از سرویس «تکمیل خودکار (جدید)»، از ماسکهای فیلد در ابزارههای «جزئیات جا (جدید)» و «تکمیل خودکار (جدید)» استفاده کنید تا فقط فیلدهای داده «تکمیل خودکار (جدید)» موردنیازتان برگردانده شود.
بهینهسازی پیشرفته هزینه
برای دسترسی به SKU: قیمتگذاری درخواست «تکمیل خودکار» و درخواست نتایج Geocoding API درباره مکان انتخابشده بهجای «جزئیات جا» (جدید)، پیادهسازی برنامهای «تکمیل خودکار» (جدید) را درنظر بگیرید. اگر هر دو شرط زیر برقرار باشد، قیمتگذاری بهازای درخواست همراه با Geocoding API مقرونبهصرفهتر از قیمتگذاری بهازای جلسه (جلسهمحور) است:
- اگر فقط به طول و عرض جغرافیایی یا نشانی مکان انتخابی کاربر نیاز دارید، Geocoding API این اطلاعات را با هزینه کمتری نسبتبه فراخوانی Place Details (New) ارائه میدهد.
- اگر کاربران پیشبینی تکمیل خودکار را در میانگین چهار درخواست پیشبینی «تکمیل خودکار» (جدید) یا کمتر انتخاب کنند، قیمتگذاری بهازای درخواست میتواند مقرونبهصرفهتر از قیمتگذاری بهازای جلسه باشد.
| آنچه برنامه شما نیاز دارد | میانگین درخواستهای «تکمیل خودکار» (جدید) قبلاز اینکه کاربر پیشبینیای را انتخاب کند | پیادهسازی توصیهشده |
|---|---|---|
| جزئیات مکان بهغیراز نشانی و مکان، مثل نام مکان، وضعیت کسبوکار، یا ساعت کاری | هر شمارهای | «تکمیل خودکار» مبتنی بر جلسه (جدید) با «جزئیات مکان» (جدید) |
| فقط نشانی و عرض/طول جغرافیایی پیشبینی انتخابشده | چهار یا کمتر | «تکمیل خودکار» (جدید) برای هر درخواست با Geocoding API |
| فقط نشانی و عرض/طول جغرافیایی پیشبینی انتخابشده | بیشتر از چهار | «تکمیل خودکار» مبتنی بر جلسه (جدید) برای برنامههای فقط نشانی |
بسته به عملکرد استفاده شما از «تکمیل خودکار» (جدید)، Geocoding API میتواند گزینه مقرونبهصرفهتری نسبتبه «جزئیات جا» (جدید) برای برنامه شما باشد. کارایی «تکمیل خودکار (جدید)» هر برنامه بسته به آنچه کاربران وارد میکنند، جایی که برنامه استفاده میشود، و اینکه آیا روالهای مطلوب بهینهسازی عملکرد اجرا شده است یا نه متفاوت است.
برای پیدا کردن میانگین تعداد درخواستها برای جدول، تحلیل کنید که کاربر بهطور میانگین چند نویسه تایپ میکند تا پیشبینی «تکمیل خودکار (جدید)» را در برنامهتان انتخاب کند.
«تکمیل خودکار» (جدید) مبتنی بر جلسه با «جزئیات مکان» (جدید)
از «تکمیل خودکار (جدید)» مبتنی بر جلسه با «جزئیات مکان (جدید)» استفاده کنید.
ازآنجاییکه برنامه شما به «جزئیات مکان (جدید)» مانند نام مکان، وضعیت کسبوکار،
یا ساعت کاری نیاز دارد، پیادهسازی شما از «تکمیل خودکار (جدید)» باید از کد جلسه استفاده کند
(بهصورت برنامهنویسیشده یا تعبیهشده در ابزارههای
JavaScript،
Android،
یا iOS)
بهازای هر جلسه بهعلاوه شناسههای یکتای کالای «مکانها»ی مربوطه،
بسته به اینکه کدام فیلدهای داده مکان را درخواست میکنید.۱
پیادهسازی ابزاره
مدیریت جلسه بهطور خودکار در ابزارههای
JavaScript،
Android،
یا iOS
ساخته میشود. این شامل درخواستهای «تکمیل خودکار» (جدید) و درخواست «جزئیات مکان» (جدید)
در پیشبینی انتخابشده میشود. حتماً پارامتر fields را مشخص کنید تا مطمئن شوید فقط
فیلدهای داده «تکمیل خودکار (جدید)»
موردنیازتان را درخواست میکنید.
پیادهسازی برنامهریزیشده
از
کد جلسه
با درخواستهای «تکمیل خودکار (جدید)» استفاده کنید. هنگام درخواست «جزئیات مکان (جدید)» درباره پیشبینی انتخابشده، پارامترهای زیر را اضافه کنید:
- شناسه جا از پاسخ «تکمیل خودکار» (جدید)
- نشانه جلسه استفادهشده در درخواست «تکمیل خودکار (جدید)»
- پارامتر
fieldsکه فیلدهای داده «تکمیل خودکار (جدید)» موردنیازتان را مشخص میکند
Per-request Autocomplete (New) with the Geocoding API
«تکمیل خودکار (جدید)» را بهصورت برنامهنویسیشده بدون کد جلسه پیادهسازی کنید و Geocoding API را در پیشبینی مکان انتخابشده فراخوانی کنید.
Geocoding API نشانیها و مختصات طول/عرض جغرافیایی را ارائه میدهد.
انجام چهار درخواست
تکمیل خودکار
بهعلاوه یک فراخوانی Geocoding API
درباره پیشبینی مکان انتخابشده کمتر از هزینه هر جلسه «تکمیل خودکار» (جدید)
است.۱
برای کمک به کاربران در دریافت پیشبینی موردنظرشان با نویسههای کمتر، روالهای مطلوب عملکرد را بهکار بگیرید.
«تکمیل خودکار» مبتنی بر جلسه (جدید) برای برنامههای فقط نشانی
از «تکمیل خودکار (جدید)» مبتنی بر جلسه با «جزئیات مکان (جدید)» استفاده کنید.
ازآنجاییکه میانگین تعداد درخواستهایی که انتظار دارید قبلاز اینکه کاربر پیشبینی «تکمیل خودکار (جدید)» را انتخاب کند، از هزینه قیمتگذاری هر جلسه فراتر میرود، پیادهسازی شما از «تکمیل خودکار (جدید)» باید از یک کد جلسه برای هر دو درخواست «تکمیل خودکار (جدید)» و درخواست مرتبط «جزئیات جا (جدید)» استفاده کند
در هر جلسه.
۱
پیادهسازی ابزاره
مدیریت جلسه بهطور خودکار در ابزارههای
JavaScript،
Android،
یا iOS
ساخته میشود. این شامل درخواستهای «تکمیل خودکار» (جدید) و درخواست «جزئیات مکان» (جدید) در پیشبینی انتخابشده میشود. حتماً پارامتر fields را مشخص کنید
تا مطمئن شوید فقط فیلدهای موردنیازتان را درخواست میکنید.
پیادهسازی برنامهریزیشده
از
کد جلسه
با درخواستهای «تکمیل خودکار (جدید)» استفاده کنید.
هنگام درخواست «جزئیات مکان (جدید)» درباره پیشبینی انتخابشده،
پارامترهای زیر را اضافه کنید:
- شناسه جا از پاسخ «تکمیل خودکار» (جدید)
- نشانه جلسه استفادهشده در درخواست «تکمیل خودکار (جدید)»
- پارامتر
fieldsکه فیلدهایی مثل نشانی و هندسه را مشخص میکند
بهتأخیر انداختن درخواستهای «تکمیل خودکار» (جدید) را درنظر بگیرید
میتوانید از راهبردهایی مثل بهتأخیر انداختن درخواست «تکمیل خودکار» (جدید) تا زمانی که کاربر سه یا چهار نویسه اول را تایپ کند استفاده کنید تا برنامهتان درخواستهای کمتری ارسال کند. برای مثال، اگر درخواستهای «تکمیل خودکار (جدید)» برای هر نویسه بعداز اینکه کاربر نویسه سوم را تایپ کرد انجام شود، یعنی اگر کاربر هفت نویسه تایپ کند و سپس پیشبینیای را انتخاب کند که برای آن یک درخواست Geocoding API انجام میدهید، هزینه کل برای ۴ «تکمیل خودکار (جدید)» بهازای هر درخواست + «زمینکدیابی» خواهد بود.۱
اگر با بهتأخیر انداختن درخواستها میتوانید میانگین درخواستهای برنامهریزیشده را به زیر چهار برسانید، میتوانید راهنمای پیادهسازی «تکمیل خودکار (جدید)» با عملکرد بالا با Geocoding API را دنبال کنید. توجه داشته باشید که تأخیر در درخواستها میتواند از دید کاربری که ممکن است انتظار داشته باشد با هر کلید جدید پیشبینیها را ببیند، بهعنوان تأخیر درک شود.
روالهای مطلوب عملکرد را بهکار بگیرید تا به کاربران کمک کنید پیشبینی موردنظرشان را با نویسههای کمتری دریافت کنند.
-
برای اطلاع از هزینهها، فهرستهای قیمتگذاری «پلاتفرم Google Maps» را ببینید.
روالهای مطلوب عملکرد
دستورالعملهای زیر روشهای بهینهسازی عملکرد «تکمیل خودکار» (جدید) را شرح میدهد:
- محدودیتهای کشور، سوگیری مکان، و (برای پیادهسازیهای برنامهای) اولویت زبان را به پیادهسازی «تکمیل خودکار» (جدید) خود اضافه کنید. برای ابزارهها به اولویت زبان نیازی نیست چون آنها اولویتهای زبان را از مرورگر یا دستگاه همراه کاربر انتخاب میکنند.
- اگر Autocomplete (New) با نقشه همراه باشد، میتوانید مکان را براساس نمای نقشه سوگیری کنید.
- در شرایطی که کاربر یکی از پیشبینیهای Autocomplete (New) را انتخاب نمیکند، معمولاً
به این دلیل که هیچکدام از آن پیشبینیها نشانی نتیجه موردنظر نیست، میتوانید از ورودی اصلی
کاربر دوباره استفاده کنید تا نتایج مرتبطتری دریافت کنید:
- اگر انتظار دارید کاربر فقط اطلاعات نشانی را وارد کند، از ورودی اصلی کاربر در فراخوانی به Geocoding API مجدداً استفاده کنید.
- اگر انتظار دارید کاربر پُرسمانها را برای مکان خاصی براساس نام یا نشانی وارد کند، از درخواست «جزئیات مکان (جدید)» استفاده کنید. اگر نتایج فقط در منطقه خاصی موردانتظار است، از سوگیری مکان استفاده کنید.
- کاربرانی که نشانیهای فرعی را وارد میکنند، مانند نشانیهای مربوط به واحدها یا آپارتمانهای خاص در یک ساختمان. برای مثال، نشانی «Stroupežnického 3191/17, Praha» در جمهوری چک پیشبینی جزئی در «تکمیل خودکار» (جدید) ارائه میدهد.
- کاربرانی که نشانیها را با پیشوندهای بخش جاده وارد میکنند، مانند «23-30 29th St, Queens» در شهر نیویورک یا «47-380 Kamehameha Hwy, Kaneohe» در جزیره کائوآئی در هاوایی.
سوگیری مکانی
با ارسال پارامتر location و پارامتر radius، نتایج را به منطقه مشخصی متمایل کنید. این کار به «تکمیل خودکار» (جدید) دستور میدهد که نمایش نتایج را در منطقه تعریفشده ترجیح دهد. ممکن است نتایج خارج از منطقه تعریفشده همچنان نمایش داده شود. میتوانید از پارامتر includedRegionCodes برای فیلتر کردن نتایج استفاده کنید
تا فقط مکانهای داخل کشور مشخصشده نشان داده شود.
محدود کردن مکان
با ارسال پارامتر locationRestriction، نتایج را به منطقه مشخصی محدود کنید.
همچنین میتوانید با افزودن پارامتر
locationRestriction
، نتایج را به منطقهای که با location
و پارامتر radius تعریف شده است محدود کنید. این به «تکمیل خودکار» (جدید) دستور میدهد فقط
نتایج درون آن منطقه را برگرداند.