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

অটোকমপ্লিট UI কন্ট্রোলটি হলো একটি সার্চ ডায়ালগ, যাতে বিল্ট-ইন অটোকমপ্লিট কার্যকারিতা রয়েছে। ব্যবহারকারী যখন সার্চ টার্ম প্রবেশ করান, তখন কন্ট্রোলটি বেছে নেওয়ার জন্য সম্ভাব্য স্থানগুলোর একটি তালিকা প্রদর্শন করে। ব্যবহারকারী যখন কোনো একটি স্থান নির্বাচন করেন, তখন একটি GMSPlace ইনস্ট্যান্স ফেরত আসে, যা আপনার অ্যাপ নির্বাচিত স্থানটি সম্পর্কে বিস্তারিত তথ্য পেতে ব্যবহার করতে পারে।
আপনি নিম্নলিখিত উপায়ে আপনার অ্যাপে অটোকমপ্লিট UI কন্ট্রোল যোগ করতে পারেন:
পূর্ণ-স্ক্রিন নিয়ন্ত্রণ যোগ করা
যখন আপনি একটি মোডাল কনটেক্সট চান, তখন ফুল-স্ক্রিন কন্ট্রোল ব্যবহার করুন; এক্ষেত্রে ব্যবহারকারী তার নির্বাচন সম্পন্ন না করা পর্যন্ত অটোকমপ্লিট UI সাময়িকভাবে আপনার অ্যাপের UI-কে প্রতিস্থাপন করে। এই কার্যকারিতাটি GMSAutocompleteViewController ক্লাস দ্বারা প্রদান করা হয়। যখন ব্যবহারকারী কোনো স্থান নির্বাচন করেন, তখন আপনার অ্যাপ একটি কলব্যাক বার্তা পায়।
আপনার অ্যাপে একটি পূর্ণ-স্ক্রিন নিয়ন্ত্রণ যোগ করতে:
- আপনার মূল অ্যাপে অটোকমপ্লিট UI কন্ট্রোলটি চালু করার জন্য একটি UI এলিমেন্ট তৈরি করুন, যেমন একটি
UIButtonএর টাচ হ্যান্ডলার। - প্যারেন্ট ভিউ কন্ট্রোলারে
GMSAutocompleteViewControllerDelegateপ্রোটোকলটি প্রয়োগ করুন। -
GMSAutocompleteViewControllerএর একটি ইনস্ট্যান্স তৈরি করুন এবং প্যারেন্ট ভিউ কন্ট্রোলারটিকে ডেলিগেট প্রপার্টি হিসেবে অ্যাসাইন করুন। - ফেরত দেওয়া স্থানের ডেটা টাইপগুলো নির্ধারণ করতে একটি
GMSPlaceFieldতৈরি করুন। - কোয়েরিকে একটি নির্দিষ্ট ধরনের স্থানের মধ্যে সীমাবদ্ধ করতে একটি
GMSAutocompleteFilterযোগ করুন। -
[self presentViewController...]ব্যবহার করেGMSAutocompleteViewControllerটি উপস্থাপন করুন। -
didAutocompleteWithPlaceডেলিগেট মেথডে ব্যবহারকারীর নির্বাচন পরিচালনা করুন। -
didAutocompleteWithPlace,didFailAutocompleteWithErrorএবংwasCancelledডেলিগেট মেথডগুলোতে কন্ট্রোলারটিকে বাতিল করুন।
নিম্নলিখিত উদাহরণটি ব্যবহারকারীর বোতামে ট্যাপ করার প্রতিক্রিয়ায় GMSAutocompleteViewController চালু করার একটি সম্ভাব্য উপায় প্রদর্শন করে।
সুইফট
import UIKit import GooglePlaces class ViewController: UIViewController { override func viewDidLoad() { makeButton() } // Present the Autocomplete view controller when the button is pressed. @objc func autocompleteClicked(_ sender: UIButton) { let autocompleteController = GMSAutocompleteViewController() autocompleteController.delegate = self // Specify the place data types to return. let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) | UInt(GMSPlaceField.placeID.rawValue))! autocompleteController.placeFields = fields // Specify a filter. let filter = GMSAutocompleteFilter() filter.types = [.address] autocompleteController.autocompleteFilter = filter // Display the autocomplete view controller. present(autocompleteController, animated: true, completion: nil) } // Add a button to the view. func makeButton() { let btnLaunchAc = UIButton(frame: CGRect(x: 5, y: 150, width: 300, height: 35)) btnLaunchAc.backgroundColor = .blue btnLaunchAc.setTitle("Launch autocomplete", for: .normal) btnLaunchAc.addTarget(self, action: #selector(autocompleteClicked), for: .touchUpInside) self.view.addSubview(btnLaunchAc) } } extension ViewController: GMSAutocompleteViewControllerDelegate { // Handle the user's selection. func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) { print("Place name: \(place.name)") print("Place ID: \(place.placeID)") print("Place attributions: \(place.attributions)") dismiss(animated: true, completion: nil) } func viewController(_ viewController: GMSAutocompleteViewController, didFailAutocompleteWithError error: Error) { // TODO: handle the error. print("Error: ", error.localizedDescription) } // User canceled the operation. func wasCancelled(_ viewController: GMSAutocompleteViewController) { dismiss(animated: true, completion: nil) } // Turn the network activity indicator on and off again. func didRequestAutocompletePredictions(_ viewController: GMSAutocompleteViewController) { UIApplication.shared.isNetworkActivityIndicatorVisible = true } func didUpdateAutocompletePredictions(_ viewController: GMSAutocompleteViewController) { UIApplication.shared.isNetworkActivityIndicatorVisible = false } }
উদ্দেশ্য-সি
#import "ViewController.h" @import GooglePlaces; @interface ViewController () <GMSAutocompleteViewControllerDelegate> @end @implementation ViewController { GMSAutocompleteFilter *_filter; } - (void)viewDidLoad { [super viewDidLoad]; [self makeButton]; } // Present the autocomplete view controller when the button is pressed. - (void)autocompleteClicked { GMSAutocompleteViewController *acController = [[GMSAutocompleteViewController alloc] init]; acController.delegate = self; // Specify the place data types to return. GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID); acController.placeFields = fields; // Specify a filter. _filter = [[GMSAutocompleteFilter alloc] init]; _filter.types = @[ kGMSPlaceTypeBank ]; acController.autocompleteFilter = _filter; // Display the autocomplete view controller. [self presentViewController:acController animated:YES completion:nil]; } // Add a button to the view. - (void)makeButton{ UIButton *btnLaunchAc = [UIButton buttonWithType:UIButtonTypeCustom]; [btnLaunchAc addTarget:self action:@selector(autocompleteClicked) forControlEvents:UIControlEventTouchUpInside]; [btnLaunchAc setTitle:@"Launch autocomplete" forState:UIControlStateNormal]; btnLaunchAc.frame = CGRectMake(5.0, 150.0, 300.0, 35.0); btnLaunchAc.backgroundColor = [UIColor blueColor]; [self.view addSubview:btnLaunchAc]; } // Handle the user's selection. - (void)viewController:(GMSAutocompleteViewController *)viewController didAutocompleteWithPlace:(GMSPlace *)place { [self dismissViewControllerAnimated:YES completion:nil]; // Do something with the selected place. NSLog(@"Place name %@", place.name); NSLog(@"Place ID %@", place.placeID); NSLog(@"Place attributions %@", place.attributions.string); } - (void)viewController:(GMSAutocompleteViewController *)viewController didFailAutocompleteWithError:(NSError *)error { [self dismissViewControllerAnimated:YES completion:nil]; // TODO: handle the error. NSLog(@"Error: %@", [error description]); } // User canceled the operation. - (void)wasCancelled:(GMSAutocompleteViewController *)viewController { [self dismissViewControllerAnimated:YES completion:nil]; } // Turn the network activity indicator on and off again. - (void)didRequestAutocompletePredictions:(GMSAutocompleteViewController *)viewController { [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; } - (void)didUpdateAutocompletePredictions:(GMSAutocompleteViewController *)viewController { [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; } @end
একটি ফলাফল নিয়ন্ত্রক যোগ করা
টেক্সট ইনপুট UI-এর উপর আরও বেশি নিয়ন্ত্রণ চাইলে একটি রেজাল্টস কন্ট্রোলার ব্যবহার করুন। রেজাল্টস কন্ট্রোলারটি ইনপুট UI ফোকাসের উপর ভিত্তি করে ফলাফল তালিকার দৃশ্যমানতা গতিশীলভাবে পরিবর্তন করে।
আপনার অ্যাপে একটি ফলাফল কন্ট্রোলার যোগ করতে:
- একটি
GMSAutocompleteResultsViewControllerতৈরি করুন।- প্যারেন্ট ভিউ কন্ট্রোলারে
GMSAutocompleteResultsViewControllerDelegateপ্রোটোকলটি প্রয়োগ করুন এবং প্যারেন্ট ভিউ কন্ট্রোলারটিকে ডেলিগেট প্রপার্টি হিসেবে নির্ধারণ করুন।
- প্যারেন্ট ভিউ কন্ট্রোলারে
- একটি
UISearchControllerঅবজেক্ট তৈরি করুন এবং results controller আর্গুমেন্ট হিসেবেGMSAutocompleteResultsViewControllerকে পাস করুন। -
UISearchControllerএরsearchResultsUpdaterপ্রপার্টি হিসেবেGMSAutocompleteResultsViewControllerকে সেট করুন। - আপনার অ্যাপের UI-তে
UISearchControllerএর জন্যsearchBarযোগ করুন। -
didAutocompleteWithPlaceডেলিগেট মেথডে ব্যবহারকারীর নির্বাচন পরিচালনা করুন।
আপনার অ্যাপের UI-তে একটি UISearchController এর সার্চ বার স্থাপন করার কয়েকটি উপায় রয়েছে:
- ন্যাভিগেশন বারে একটি সার্চ বার যোগ করুন
- একটি ভিউয়ের শীর্ষে একটি সার্চ বার যোগ করুন
- পপওভার ফলাফল ব্যবহার করে একটি সার্চ বার যোগ করুন
ন্যাভিগেশন বারে একটি সার্চ বার যোগ করা
নিম্নলিখিত কোড উদাহরণটি একটি রেজাল্টস কন্ট্রোলার যোগ করা, নেভিগেশন বারে searchBar যোগ করা এবং ব্যবহারকারীর নির্বাচন পরিচালনা করা প্রদর্শন করে:
সুইফট
class ViewController: UIViewController { var resultsViewController: GMSAutocompleteResultsViewController? var searchController: UISearchController? var resultView: UITextView? override func viewDidLoad() { super.viewDidLoad() resultsViewController = GMSAutocompleteResultsViewController() resultsViewController?.delegate = self searchController = UISearchController(searchResultsController: resultsViewController) searchController?.searchResultsUpdater = resultsViewController // Put the search bar in the navigation bar. searchController?.searchBar.sizeToFit() navigationItem.titleView = searchController?.searchBar // When UISearchController presents the results view, present it in // this view controller, not one further up the chain. definesPresentationContext = true // Prevent the navigation bar from being hidden when searching. searchController?.hidesNavigationBarDuringPresentation = false } } // Handle the user's selection. extension ViewController: GMSAutocompleteResultsViewControllerDelegate { func resultsController(_ resultsController: GMSAutocompleteResultsViewController, didAutocompleteWith place: GMSPlace) { searchController?.isActive = false // Do something with the selected place. print("Place name: \(place.name)") print("Place address: \(place.formattedAddress)") print("Place attributions: \(place.attributions)") } func resultsController(_ resultsController: GMSAutocompleteResultsViewController, didFailAutocompleteWithError error: Error){ // TODO: handle the error. print("Error: ", error.localizedDescription) } // Turn the network activity indicator on and off again. func didRequestAutocompletePredictions(_ viewController: GMSAutocompleteViewController) { UIApplication.shared.isNetworkActivityIndicatorVisible = true } func didUpdateAutocompletePredictions(_ viewController: GMSAutocompleteViewController) { UIApplication.shared.isNetworkActivityIndicatorVisible = false } }
উদ্দেশ্য-সি
- (void)viewDidLoad { _resultsViewController = [[GMSAutocompleteResultsViewController alloc] init]; _resultsViewController.delegate = self; _searchController = [[UISearchController alloc] initWithSearchResultsController:_resultsViewController]; _searchController.searchResultsUpdater = _resultsViewController; // Put the search bar in the navigation bar. [_searchController.searchBar sizeToFit]; self.navigationItem.titleView = _searchController.searchBar; // When UISearchController presents the results view, present it in // this view controller, not one further up the chain. self.definesPresentationContext = YES; // Prevent the navigation bar from being hidden when searching. _searchController.hidesNavigationBarDuringPresentation = NO; } // Handle the user's selection. - (void)resultsController:(GMSAutocompleteResultsViewController *)resultsController didAutocompleteWithPlace:(GMSPlace *)place { _searchController.active = NO; // Do something with the selected place. NSLog(@"Place name %@", place.name); NSLog(@"Place address %@", place.formattedAddress); NSLog(@"Place attributions %@", place.attributions.string); } - (void)resultsController:(GMSAutocompleteResultsViewController *)resultsController didFailAutocompleteWithError:(NSError *)error { [self dismissViewControllerAnimated:YES completion:nil]; // TODO: handle the error. NSLog(@"Error: %@", [error description]); } // Turn the network activity indicator on and off again. - (void)didRequestAutocompletePredictionsForResultsController: (GMSAutocompleteResultsViewController *)resultsController { [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; } - (void)didUpdateAutocompletePredictionsForResultsController: (GMSAutocompleteResultsViewController *)resultsController { [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; }
একটি ভিউয়ের শীর্ষে সার্চ বার যোগ করা
নিম্নলিখিত কোড উদাহরণটিতে একটি ভিউ-এর শীর্ষে searchBar যুক্ত করার পদ্ধতি দেখানো হয়েছে।
সুইফট
import UIKit import GooglePlaces class ViewController: UIViewController { var resultsViewController: GMSAutocompleteResultsViewController? var searchController: UISearchController? var resultView: UITextView? override func viewDidLoad() { super.viewDidLoad() resultsViewController = GMSAutocompleteResultsViewController() resultsViewController?.delegate = self searchController = UISearchController(searchResultsController: resultsViewController) searchController?.searchResultsUpdater = resultsViewController let subView = UIView(frame: CGRect(x: 0, y: 65.0, width: 350.0, height: 45.0)) subView.addSubview((searchController?.searchBar)!) view.addSubview(subView) searchController?.searchBar.sizeToFit() searchController?.hidesNavigationBarDuringPresentation = false // When UISearchController presents the results view, present it in // this view controller, not one further up the chain. definesPresentationContext = true } } // Handle the user's selection. extension ViewController: GMSAutocompleteResultsViewControllerDelegate { func resultsController(_ resultsController: GMSAutocompleteResultsViewController, didAutocompleteWith place: GMSPlace) { searchController?.isActive = false // Do something with the selected place. print("Place name: \(place.name)") print("Place address: \(place.formattedAddress)") print("Place attributions: \(place.attributions)") } func resultsController(_ resultsController: GMSAutocompleteResultsViewController, didFailAutocompleteWithError error: Error){ // TODO: handle the error. print("Error: ", error.localizedDescription) } // Turn the network activity indicator on and off again. func didRequestAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) { UIApplication.shared.isNetworkActivityIndicatorVisible = true } func didUpdateAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) { UIApplication.shared.isNetworkActivityIndicatorVisible = false } }
উদ্দেশ্য-সি
- (void)viewDidLoad { [super viewDidLoad]; _resultsViewController = [[GMSAutocompleteResultsViewController alloc] init]; _resultsViewController.delegate = self; _searchController = [[UISearchController alloc] initWithSearchResultsController:_resultsViewController]; _searchController.searchResultsUpdater = _resultsViewController; UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 65.0, 250, 50)]; [subView addSubview:_searchController.searchBar]; [_searchController.searchBar sizeToFit]; [self.view addSubview:subView]; // When UISearchController presents the results view, present it in // this view controller, not one further up the chain. self.definesPresentationContext = YES; } // Handle the user's selection. - (void)resultsController:(GMSAutocompleteResultsViewController *)resultsController didAutocompleteWithPlace:(GMSPlace *)place { [self dismissViewControllerAnimated:YES completion:nil]; // Do something with the selected place. NSLog(@"Place name %@", place.name); NSLog(@"Place address %@", place.formattedAddress); NSLog(@"Place attributions %@", place.attributions.string); } - (void)resultsController:(GMSAutocompleteResultsViewController *)resultsController didFailAutocompleteWithError:(NSError *)error { [self dismissViewControllerAnimated:YES completion:nil]; // TODO: handle the error. NSLog(@"Error: %@", [error description]); } // Turn the network activity indicator on and off again. - (void)didRequestAutocompletePredictionsForResultsController: (GMSAutocompleteResultsViewController *)resultsController { [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; } - (void)didUpdateAutocompletePredictionsForResultsController: (GMSAutocompleteResultsViewController *)resultsController { [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; }
ডিফল্টরূপে, UISearchController প্রেজেন্ট করার সময় ন্যাভিগেশন বারটি লুকিয়ে রাখে (এটি নিষ্ক্রিয় করা যেতে পারে)। যেসব ক্ষেত্রে ন্যাভিগেশন বারটি দৃশ্যমান এবং অস্বচ্ছ থাকে, UISearchController সেটির অবস্থান সঠিকভাবে নির্ধারণ করে না।
বিকল্প সমাধান হিসেবে নিম্নলিখিত কোডটি ব্যবহার করুন:
সুইফট
navigationController?.navigationBar.translucent = false searchController?.hidesNavigationBarDuringPresentation = false // This makes the view area include the nav bar even though it is opaque. // Adjust the view placement down. self.extendedLayoutIncludesOpaqueBars = true self.edgesForExtendedLayout = .top
উদ্দেশ্য-সি
self.navigationController.navigationBar.translucent = NO; _searchController.hidesNavigationBarDuringPresentation = NO; // This makes the view area include the nav bar even though it is opaque. // Adjust the view placement down. self.extendedLayoutIncludesOpaqueBars = YES; self.edgesForExtendedLayout = UIRectEdgeTop;
পপওভার ফলাফল ব্যবহার করে একটি সার্চ বার যোগ করা
নিম্নলিখিত কোড উদাহরণটিতে নেভিগেশন বারের ডানদিকে একটি সার্চ বার স্থাপন করা এবং একটি পপওভারে ফলাফল প্রদর্শন করা দেখানো হয়েছে।
সুইফট
import UIKit import GooglePlaces class ViewController: UIViewController { var resultsViewController: GMSAutocompleteResultsViewController? var searchController: UISearchController? var resultView: UITextView? override func viewDidLoad() { super.viewDidLoad() resultsViewController = GMSAutocompleteResultsViewController() resultsViewController?.delegate = self searchController = UISearchController(searchResultsController: resultsViewController) searchController?.searchResultsUpdater = resultsViewController // Add the search bar to the right of the nav bar, // use a popover to display the results. // Set an explicit size as we don't want to use the entire nav bar. searchController?.searchBar.frame = (CGRect(x: 0, y: 0, width: 250.0, height: 44.0)) navigationItem.rightBarButtonItem = UIBarButtonItem(customView: (searchController?.searchBar)!) // When UISearchController presents the results view, present it in // this view controller, not one further up the chain. definesPresentationContext = true // Keep the navigation bar visible. searchController?.hidesNavigationBarDuringPresentation = false searchController?.modalPresentationStyle = .popover } } // Handle the user's selection. extension ViewController: GMSAutocompleteResultsViewControllerDelegate { func resultsController(_ resultsController: GMSAutocompleteResultsViewController, didAutocompleteWith place: GMSPlace) { searchController?.isActive = false // Do something with the selected place. print("Place name: \(place.name)") print("Place address: \(place.formattedAddress)") print("Place attributions: \(place.attributions)") } func resultsController(_ resultsController: GMSAutocompleteResultsViewController, didFailAutocompleteWithError error: Error){ // TODO: handle the error. print("Error: ", error.localizedDescription) } // Turn the network activity indicator on and off again. func didRequestAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) { UIApplication.shared.isNetworkActivityIndicatorVisible = true } func didUpdateAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) { UIApplication.shared.isNetworkActivityIndicatorVisible = false } }
উদ্দেশ্য-সি
- (void)viewDidLoad { [super viewDidLoad]; _resultsViewController = [[GMSAutocompleteResultsViewController alloc] init]; _resultsViewController.delegate = self; _searchController = [[UISearchController alloc] initWithSearchResultsController:_resultsViewController]; _searchController.searchResultsUpdater = _resultsViewController; // Add the search bar to the right of the nav bar, // use a popover to display the results. // Set an explicit size as we don't want to use the entire nav bar. _searchController.searchBar.frame = CGRectMake(0, 0, 250.0f, 44.0f); self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:_searchController.searchBar]; // When UISearchController presents the results view, present it in // this view controller, not one further up the chain. self.definesPresentationContext = YES; // Keep the navigation bar visible. _searchController.hidesNavigationBarDuringPresentation = NO; _searchController.modalPresentationStyle = UIModalPresentationPopover; } // Handle the user's selection. - (void)resultsController:(GMSAutocompleteResultsViewController *)resultsController didAutocompleteWithPlace:(GMSPlace *)place { [self dismissViewControllerAnimated:YES completion:nil]; NSLog(@"Place name %@", place.name); NSLog(@"Place address %@", place.formattedAddress); NSLog(@"Place attributions %@", place.attributions.string); } - (void)resultsController:(GMSAutocompleteResultsViewController *)resultsController didFailAutocompleteWithError:(NSError *)error { [self dismissViewControllerAnimated:YES completion:nil]; // TODO: handle the error. NSLog(@"Error: %@", [error description]); } // Turn the network activity indicator on and off again. - (void)didRequestAutocompletePredictionsForResultsController: (GMSAutocompleteResultsViewController *)resultsController { [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; } - (void)didUpdateAutocompletePredictionsForResultsController: (GMSAutocompleteResultsViewController *)resultsController { [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; }
টেবিল ডেটা উৎস ব্যবহার করে
আপনার অ্যাপে যদি একটি কাস্টম সার্চ টেক্সট UI থাকে, তাহলে ভিউ কন্ট্রোলারে ফলাফল প্রদর্শনকারী টেবিল ভিউটি পরিচালনা করতে আপনি GMSAutocompleteTableDataSource ক্লাসটি ব্যবহার করতে পারেন।
একটি ভিউ কন্ট্রোলারে UITableView এর ডেটা সোর্স এবং ডেলিগেট হিসেবে GMSAutocompleteTableDataSource ব্যবহার করতে হলে:
- ভিউ কন্ট্রোলারে
GMSAutocompleteTableDataSourceDelegateএবংUISearchBarDelegateপ্রোটোকলগুলো প্রয়োগ করুন। - একটি
GMSAutocompleteTableDataSourceইনস্ট্যান্স তৈরি করুন এবং ভিউ কন্ট্রোলারটিকে ডেলিগেট প্রপার্টি হিসেবে নির্ধারণ করুন। - ভিউ কন্ট্রোলারে থাকা
UITableViewইনস্ট্যান্সের ডেটাসোর্স এবং ডেলিগেট প্রপার্টি হিসেবেGMSAutocompleteTableDataSourceকে সেট করুন। - সার্চ টেক্সট ইনপুটের হ্যান্ডলারে,
GMSAutocompleteTableDataSourceএর উপরsourceTextHasChangedকল করুন।-
didAutocompleteWithPlaceডেলিগেট মেথডে ব্যবহারকারীর নির্বাচন পরিচালনা করুন।
-
-
didAutocompleteWithPlace,didFailAutocompleteWithError,wasCancelledডেলিগেট মেথডগুলোতে কন্ট্রোলারটিকে বাতিল করুন।
নিম্নলিখিত কোড উদাহরণটি দেখায় যে, যখন UISearchBar আলাদাভাবে যোগ করা হয়, তখন একটি UIViewController এর টেবিল ভিউ চালনা করার জন্য GMSAutocompleteTableDataSource ক্লাসটি কীভাবে ব্যবহার করতে হয়।
সুইফট
// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import GooglePlaces import UIKit class PlaceAutocompleteViewController: UIViewController { private var tableView: UITableView! private var tableDataSource: GMSAutocompleteTableDataSource! override func viewDidLoad() { super.viewDidLoad() let searchBar = UISearchBar(frame: CGRect(x: 0, y: 20, width: self.view.frame.size.width, height: 44.0)) searchBar.delegate = self view.addSubview(searchBar) tableDataSource = GMSAutocompleteTableDataSource() tableDataSource.delegate = self tableView = UITableView(frame: CGRect(x: 0, y: 64, width: self.view.frame.size.width, height: self.view.frame.size.height - 44)) tableView.delegate = tableDataSource tableView.dataSource = tableDataSource view.addSubview(tableView) } } extension PlaceAutocompleteViewController: UISearchBarDelegate { func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { // Update the GMSAutocompleteTableDataSource with the search text. tableDataSource.sourceTextHasChanged(searchText) } } extension PlaceAutocompleteViewController: GMSAutocompleteTableDataSourceDelegate { func didUpdateAutocompletePredictions(for tableDataSource: GMSAutocompleteTableDataSource) { // Turn the network activity indicator off. UIApplication.shared.isNetworkActivityIndicatorVisible = false // Reload table data. tableView.reloadData() } func didRequestAutocompletePredictions(for tableDataSource: GMSAutocompleteTableDataSource) { // Turn the network activity indicator on. UIApplication.shared.isNetworkActivityIndicatorVisible = true // Reload table data. tableView.reloadData() } func tableDataSource(_ tableDataSource: GMSAutocompleteTableDataSource, didAutocompleteWith place: GMSPlace) { // Do something with the selected place. print("Place name: \(place.name)") print("Place address: \(place.formattedAddress)") print("Place attributions: \(place.attributions)") } func tableDataSource(_ tableDataSource: GMSAutocompleteTableDataSource, didFailAutocompleteWithError error: Error) { // Handle the error. print("Error: \(error.localizedDescription)") } func tableDataSource(_ tableDataSource: GMSAutocompleteTableDataSource, didSelect prediction: GMSAutocompletePrediction) -> Bool { return true } }
উদ্দেশ্য-সি
// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #import "PlaceAutocompleteViewController.h" @import GooglePlaces; @import UIKit; @interface PlaceAutocompleteViewController () <GMSAutocompleteTableDataSourceDelegate, UISearchBarDelegate> @end @implementation PlaceAutocompleteViewController { UITableView *tableView; GMSAutocompleteTableDataSource *tableDataSource; } - (void)viewDidLoad { [super viewDidLoad]; UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, 44)]; searchBar.delegate = self; [self.view addSubview:searchBar]; tableDataSource = [[GMSAutocompleteTableDataSource alloc] init]; tableDataSource.delegate = self; tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height - 44)]; tableView.delegate = tableDataSource; tableView.dataSource = tableDataSource; [self.view addSubview:tableView]; } #pragma mark - GMSAutocompleteTableDataSourceDelegate - (void)didUpdateAutocompletePredictionsForTableDataSource:(GMSAutocompleteTableDataSource *)tableDataSource { // Turn the network activity indicator off. UIApplication.sharedApplication.networkActivityIndicatorVisible = NO; // Reload table data. [tableView reloadData]; } - (void)didRequestAutocompletePredictionsForTableDataSource:(GMSAutocompleteTableDataSource *)tableDataSource { // Turn the network activity indicator on. UIApplication.sharedApplication.networkActivityIndicatorVisible = YES; // Reload table data. [tableView reloadData]; } - (void)tableDataSource:(GMSAutocompleteTableDataSource *)tableDataSource didAutocompleteWithPlace:(GMSPlace *)place { // Do something with the selected place. NSLog(@"Place name: %@", place.name); NSLog(@"Place address: %@", place.formattedAddress); NSLog(@"Place attributions: %@", place.attributions); } - (void)tableDataSource:(GMSAutocompleteTableDataSource *)tableDataSource didFailAutocompleteWithError:(NSError *)error { // Handle the error NSLog(@"Error %@", error.description); } - (BOOL)tableDataSource:(GMSAutocompleteTableDataSource *)tableDataSource didSelectPrediction:(GMSAutocompletePrediction *)prediction { return YES; } #pragma mark - UISearchBarDelegate - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { // Update the GMSAutocompleteTableDataSource with the search text. [tableDataSource sourceTextHasChanged:searchText]; } @end
টেক্সট এবং ব্যাকগ্রাউন্ডের রঙ কাস্টমাইজ করা
আপনি অটোকমপ্লিট UI কন্ট্রোলের সমস্ত টেক্সট এবং ব্যাকগ্রাউন্ডের রঙ সেট করতে পারেন, যাতে উইজেটটি আপনার অ্যাপের ভিজ্যুয়াল চেহারার সাথে আরও ভালোভাবে মিলে যায়। UI কন্ট্রোলের রঙ সেট করার দুটি উপায় রয়েছে:
- যেখানে সম্ভব, বিল্ট-ইন iOS UIAppearance প্রোটোকল ব্যবহার করে UI কন্ট্রোলগুলোকে বিশ্বব্যাপী স্টাইল করা হয়। এই সেটিংসগুলো অনেক UI কন্ট্রোল এলিমেন্টের ক্ষেত্রে প্রযোজ্য, কিন্তু সবগুলোর ক্ষেত্রে নয়।
- উইজেট ক্লাসগুলিতে SDK পদ্ধতি ব্যবহার করে এমন সব প্রোপার্টি সেট করা, যা UIAppearance প্রোটোকল দ্বারা সমর্থিত নয়।
সাধারণত, আপনার অ্যাপে UIAppearance প্রোটোকল এবং SDK মেথডগুলোর কোনো না কোনো সংমিশ্রণ ব্যবহার করা হবে। নিচের ডায়াগ্রামটিতে দেখানো হয়েছে কোন কোন এলিমেন্টকে স্টাইল করা যায়:

নিচের সারণিতে সমস্ত UI এলিমেন্টের তালিকা দেওয়া হয়েছে এবং প্রত্যেকটিকে কীভাবে স্টাইল করতে হবে (UIAppearance প্রোটোকল বা SDK পদ্ধতি) তা নির্দেশ করা হয়েছে।
| UI উপাদান | পদ্ধতি | কীভাবে স্টাইল করবেন |
|---|---|---|
| নেভিগেশন বারের রঙ (পটভূমি) | UIAppearance প্রোটোকল | UINavigationBar প্রক্সিতে setBarTintColor কল করুন। |
| নেভিগেশন বারের টিন্ট কালার (সার্চ বারের টেক্সট ক্যারেট এবং ক্যানসেল বাটন) | UIAppearance প্রোটোকল | UINavigationBar প্রক্সিতে setTintColor কল করুন। |
| সার্চ বারের লেখার রঙ | UIAppearance প্রোটোকল | searchBarTextAttributes এ NSForegroundColorAttributeName সেট করুন। |
| সার্চ বারের টিন্ট রঙ | প্রযোজ্য নয় | সার্চ বারটি স্বচ্ছ এবং এটি নেভিগেশন বারের একটি শেডযুক্ত সংস্করণ হিসেবে প্রদর্শিত হবে। |
| সার্চ বারের প্লেসহোল্ডার টেক্সটের রঙ (ডিফল্ট সার্চ টেক্সট) | UIAppearance প্রোটোকল | placeholderAttributes এ NSForegroundColorAttributeName সেট করুন। |
| মূল লেখা (ত্রুটি এবং বার্তার লেখার ক্ষেত্রেও প্রযোজ্য) | এসডিকে পদ্ধতি | primaryTextColor কে কল করুন। |
| প্রাথমিক পাঠ্য হাইলাইট | এসডিকে পদ্ধতি | primaryTextHighlightColor কে কল করুন। |
| দ্বিতীয় পাঠ্য | এসডিকে পদ্ধতি | secondaryTextColor কে কল করুন। |
| ত্রুটি এবং বার্তার পাঠ্য | এসডিকে পদ্ধতি | primaryTextColor কে কল করুন। |
| টেবিল সেলের পটভূমি | এসডিকে পদ্ধতি | tableCellBackgroundColor . কল করুন। |
| টেবিল সেল বিভাজকের রঙ | এসডিকে পদ্ধতি | tableCellSeparatorColor . কল করুন। |
| "আবার চেষ্টা করুন" বোতাম | এসডিকে পদ্ধতি | tintColor কল করুন। |
| কার্যকলাপ সূচক (অগ্রগতি স্পিনার) | UIAppearance প্রোটোকল | UIActivityIndicatorView প্রক্সিতে setColor কল করুন। |
| "Powered by Google" লোগো, বিষণ্ণ মেঘের ছবি | প্রযোজ্য নয় | পটভূমির বৈসাদৃশ্যের উপর ভিত্তি করে সাদা বা ধূসর সংস্করণটি স্বয়ংক্রিয়ভাবে নির্বাচিত হয়। |
| সার্চ বারের টেক্সট ফিল্ডে ম্যাগনিফাইং গ্লাস এবং স্পষ্ট টেক্সট আইকন | প্রযোজ্য নয় | স্টাইল করার জন্য, ডিফল্ট ছবিগুলোকে আপনার পছন্দের রঙের ছবি দিয়ে প্রতিস্থাপন করুন। |
UIAppearance প্রোটোকল ব্যবহার করে
আপনি UIAppearance প্রোটোকল ব্যবহার করে একটি নির্দিষ্ট UI এলিমেন্টের অ্যাপিয়ারেন্স প্রক্সি পেতে পারেন, যা আপনি পরবর্তীতে সেই UI এলিমেন্টের রঙ নির্ধারণ করতে ব্যবহার করতে পারেন। যখন কোনো পরিবর্তন করা হয়, তখন একটি নির্দিষ্ট UI এলিমেন্টের সমস্ত ইনস্ট্যান্স প্রভাবিত হয়। উদাহরণস্বরূপ, নিম্নলিখিত উদাহরণটি UITextField ক্লাসগুলির টেক্সটের রঙ বিশ্বব্যাপী সবুজে পরিবর্তন করে দেয় যখন সেগুলি একটি UISearchBar এর মধ্যে থাকে:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{NSForegroundColorAttributeName:[UIColor greenColor]}];
রঙের মান নির্ধারণ সম্পর্কে আরও তথ্যের জন্য, UIColor ক্লাস রেফারেন্স দেখুন।
নিম্নলিখিত কোড স্নিপেটগুলিতে সেই সমস্ত প্রক্সি কমান্ড দেখানো হয়েছে যা ফুল-স্ক্রিন অটোকমপ্লিট UI কন্ট্রোলের সবকিছু স্টাইল করার জন্য আপনার ব্যবহার করা প্রয়োজন। এই কোডটি Appdelegate.m-এর didFinishLaunchingWithOptions মেথডে যোগ করুন:
// Define some colors. UIColor *darkGray = [UIColor darkGrayColor]; UIColor *lightGray = [UIColor lightGrayColor]; // Navigation bar background. [[UINavigationBar appearance] setBarTintColor:darkGray]; [[UINavigationBar appearance] setTintColor:lightGray]; // Color of typed text in the search bar. NSDictionary *searchBarTextAttributes = @{ NSForegroundColorAttributeName: lightGray, NSFontAttributeName : [UIFont systemFontOfSize:[UIFont systemFontSize]] }; [UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] .defaultTextAttributes = searchBarTextAttributes; // Color of the placeholder text in the search bar prior to text entry. NSDictionary *placeholderAttributes = @{ NSForegroundColorAttributeName: lightGray, NSFontAttributeName : [UIFont systemFontOfSize:[UIFont systemFontSize]] }; // Color of the default search text. // NOTE: In a production scenario, "Search" would be a localized string. NSAttributedString *attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Search" attributes:placeholderAttributes]; [UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] .attributedPlaceholder = attributedPlaceholder; // Color of the in-progress spinner. [[UIActivityIndicatorView appearance] setColor:lightGray]; // To style the two image icons in the search bar (the magnifying glass // icon and the 'clear text' icon), replace them with different images. [[UISearchBar appearance] setImage:[UIImage imageNamed:@"custom_clear_x_high"] forSearchBarIcon:UISearchBarIconClear state:UIControlStateHighlighted]; [[UISearchBar appearance] setImage:[UIImage imageNamed:@"custom_clear_x"] forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal]; [[UISearchBar appearance] setImage:[UIImage imageNamed:@"custom_search"] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal]; // Color of selected table cells. UIView *selectedBackgroundView = [[UIView alloc] init]; selectedBackgroundView.backgroundColor = [UIColor lightGrayColor]; [UITableViewCell appearanceWhenContainedIn:[GMSAutocompleteViewController class], nil] .selectedBackgroundView = selectedBackgroundView;
UI কন্ট্রোল স্টাইল প্রোপার্টি সেট করা
UI কন্ট্রোল এলিমেন্টগুলোর একটি উপসেটের এমন কিছু প্রোপার্টি থাকে যা UIAppearance প্রোটোকল দ্বারা প্রভাবিত হয় না, এবং তাই সেগুলো সরাসরি সেট করতে হয়। নিম্নলিখিত কোড উদাহরণটি acController নামের একটি UI কন্ট্রোল ইনস্ট্যান্সে ফোরগ্রাউন্ড এবং ব্যাকগ্রাউন্ড কালার নির্ধারণ ও প্রয়োগ করা দেখাচ্ছে। ViewController.m-এর onLaunchClicked মেথডে এই কোডটি যোগ করুন:
UIColor *darkGray = [UIColor darkGrayColor]; UIColor *lightGray = [UIColor lightGrayColor]; acController.secondaryTextColor = [UIColor colorWithWhite:1.0f alpha:0.5f]; acController.primaryTextColor = lightGray; acController.primaryTextHighlightColor = [UIColor grayColor]; acController.tableCellBackgroundColor = darkGray; acController.tableCellSeparatorColor = lightGray; acController.tintColor = lightGray;
প্রোগ্রামের মাধ্যমে স্থানের পূর্বাভাস পাওয়া
অটোকমপ্লিট উইজেট দ্বারা প্রদত্ত UI-এর বিকল্প হিসেবে আপনি একটি কাস্টম সার্চ UI তৈরি করতে পারেন। এটি করার জন্য, আপনার অ্যাপকে প্রোগ্রাম্যাটিকভাবে স্থানের পূর্বাভাস সংগ্রহ করতে হবে। আপনার অ্যাপ নিম্নলিখিত উপায়গুলির মধ্যে যেকোনো একটির মাধ্যমে পূর্বাভাসিত স্থানের নাম এবং/অথবা ঠিকানার একটি তালিকা পেতে পারে:
GMSPlacesClient findAutocompletePredictionsFromQuery:
পূর্বাভাসিত স্থানের নাম এবং/অথবা ঠিকানার একটি তালিকা পেতে, প্রথমে GMSPlacesClient ইনস্ট্যানশিয়েট করুন , তারপর নিম্নলিখিত প্যারামিটারগুলো সহ GMSPlacesClient findAutocompletePredictionsFromQuery: মেথডটি কল করুন:
- একটি
autocompleteQueryস্ট্রিং, যা ব্যবহারকারীর টাইপ করা টেক্সট ধারণ করে। - একটি
GMSAutocompleteSessionToken, যা প্রতিটি স্বতন্ত্র সেশন শনাক্ত করতে ব্যবহৃত হয়। আপনার অ্যাপকে প্রতিটি অটোকমপ্লিট রিকোয়েস্ট কলের জন্য একই টোকেন পাস করতে হবে এবং তারপর ব্যবহারকারীর নির্বাচিত স্থানের বিবরণ পুনরুদ্ধার করার জন্য, পরবর্তী `fetchPlacefromPlaceID:কলে সেই টোকেনটি একটি প্লেস আইডি-র সাথে পাস করতে হবে। - একটি
GMSAutocompleteFilterযা:- ফলাফলকে পক্ষপাতদুষ্ট করা বা একটি নির্দিষ্ট অঞ্চলে সীমাবদ্ধ করা।
- ফলাফলকে একটি নির্দিষ্ট ধরনের স্থানে সীমাবদ্ধ করুন।
- একটি
GMSPlaceLocationBias/Restriction অবজেক্ট, যা অক্ষাংশ এবং দ্রাঘিমাংশের সীমানা দ্বারা নির্দিষ্ট একটি এলাকার দিকে ফলাফলকে পক্ষপাতদুষ্ট করে।
- প্রত্যাবর্তিত পূর্বাভাসগুলো পরিচালনা করার জন্য একটি কলব্যাক মেথড।
নীচের কোড উদাহরণগুলিতে findAutocompletePredictionsFromQuery: ।
সুইফট
/** * Create a new session token. Be sure to use the same token for calling * findAutocompletePredictions, as well as the subsequent place details request. * This ensures that the user's query and selection are billed as a single session. */ let token = GMSAutocompleteSessionToken.init() // Create a type filter. let filter = GMSAutocompleteFilter() filter.types = [.bank] filter.locationBias = GMSPlaceRectangularLocationOption( northEastBounds, southWestBounds); placesClient?.findAutocompletePredictions(fromQuery: "cheesebu", filter: filter, sessionToken: token, callback: { (results, error) in if let error = error { print("Autocomplete error: \(error)") return } if let results = results { for result in results { print("Result \(result.attributedFullText) with placeID \(result.placeID)") } } })
উদ্দেশ্য-সি
/** * Create a new session token. Be sure to use the same token for calling * findAutocompletePredictionsFromQuery:, as well as the subsequent place details request. * This ensures that the user's query and selection are billed as a single session. */ GMSAutocompleteSessionToken *token = [[GMSAutocompleteSessionToken alloc] init]; // Create a type filter. GMSAutocompleteFilter *_filter = [[GMSAutocompleteFilter alloc] init]; _filter.types = @[ kGMSPlaceTypeBank ]; [_placesClient findAutocompletePredictionsFromQuery:@"cheesebu" filter:_filter sessionToken:token callback:^(NSArray<GMSAutocompletePrediction *> * _Nullable results, NSError * _Nullable error) { if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } if (results != nil) { for (GMSAutocompletePrediction *result in results) { NSLog(@"Result %@ with PlaceID %@", result.attributedFullText, result.placeID); } } }];
এপিআইটি GMSAutocompletePrediction অবজেক্টের একটি অ্যারে পাস করে নির্দিষ্ট কলব্যাক মেথডটিকে কল করে।
প্রতিটি GMSAutocompletePrediction অবজেক্টে নিম্নলিখিত তথ্য থাকে:
-
attributedFullText– ভবিষ্যদ্বাণীর সম্পূর্ণ টেক্সট, যা একটিNSAttributedStringআকারে থাকে। উদাহরণস্বরূপ, 'Sydney Opera House, Sydney, New South Wales, Australia'। ব্যবহারকারীর ইনপুটের সাথে মেলে এমন প্রতিটি টেক্সট রেঞ্জের একটি অ্যাট্রিবিউট থাকে,kGMSAutocompleteMatchAttribute। আপনি এই অ্যাট্রিবিউটটি ব্যবহার করে ব্যবহারকারীর কোয়েরিতে মিলে যাওয়া টেক্সট হাইলাইট করতে পারেন, যেমনটি নিচে দেখানো হয়েছে। -
placeID– পূর্বাভাসিত স্থানটির প্লেস আইডি। প্লেস আইডি হলো একটি পাঠ্য শনাক্তকারী যা কোনো স্থানকে অনন্যভাবে চিহ্নিত করে। প্লেস আইডি সম্পর্কে আরও তথ্যের জন্য, প্লেস আইডি ওভারভিউ দেখুন। -
distanceMeters– নির্দিষ্টoriginথেকে গন্তব্য পর্যন্ত সরলরৈখিক দূরত্ব। যদিoriginপ্রপার্টিটি সেট করা না থাকে, তাহলে কোনো দূরত্বের মান ফেরত দেওয়া হবে না।
নিম্নলিখিত কোড উদাহরণটি দেখায় কিভাবে enumerateAttribute ব্যবহার করে ব্যবহারকারীর কোয়েরির টেক্সটের সাথে মেলে এমন ফলাফলের অংশগুলিকে বোল্ড টেক্সটে হাইলাইট করতে হয়:
সুইফট
let regularFont = UIFont.systemFont(ofSize: UIFont.labelFontSize) let boldFont = UIFont.boldSystemFont(ofSize: UIFont.labelFontSize) let bolded = prediction.attributedFullText.mutableCopy() as! NSMutableAttributedString bolded.enumerateAttribute(kGMSAutocompleteMatchAttribute, in: NSMakeRange(0, bolded.length), options: []) { (value, range: NSRange, stop: UnsafeMutablePointer<ObjCBool>) -> Void in let font = (value == nil) ? regularFont : boldFont bolded.addAttribute(NSFontAttributeName, value: font, range: range) } label.attributedText = bolded
উদ্দেশ্য-সি
UIFont *regularFont = [UIFont systemFontOfSize:[UIFont labelFontSize]]; UIFont *boldFont = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]]; NSMutableAttributedString *bolded = [prediction.attributedFullText mutableCopy]; [bolded enumerateAttribute:kGMSAutocompleteMatchAttribute inRange:NSMakeRange(0, bolded.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) { UIFont *font = (value == nil) ? regularFont : boldFont; [bolded addAttribute:NSFontAttributeName value:font range:range]; }]; label.attributedText = bolded;
ফেচার ব্যবহার করে
আপনি যদি একেবারে গোড়া থেকে নিজের অটোকমপ্লিট কন্ট্রোল তৈরি করতে চান, তাহলে আপনি GMSAutocompleteFetcher ব্যবহার করতে পারেন, যা GMSPlacesClient এর autocompleteQuery মেথডটিকে র্যাপ করে। এই ফেচারটি রিকোয়েস্টগুলোকে থ্রটল করে এবং শুধুমাত্র সর্বশেষ প্রবেশ করানো সার্চ টেক্সটের ফলাফল ফেরত দেয়। এটি কোনো UI এলিমেন্ট প্রদান করে না।
GMSAutocompleteFetcher প্রয়োগ করতে, নিম্নলিখিত পদক্ষেপগুলি গ্রহণ করুন:
-
GMSAutocompleteFetcherDelegateপ্রোটোকলটি বাস্তবায়ন করুন। - একটি
GMSAutocompleteFetcherঅবজেক্ট তৈরি করুন। - ব্যবহারকারী টাইপ করার সাথে সাথে ফেচার-এর
sourceTextHasChangedকল করুন। -
didAutcompleteWithPredictionsএবংdidFailAutocompleteWithErrorপ্রোটোকল মেথডগুলো ব্যবহার করে প্রেডিকশন এবং এররগুলো হ্যান্ডেল করুন।
নিম্নলিখিত কোড উদাহরণটি ফেচার ব্যবহার করে ব্যবহারকারীর ইনপুট গ্রহণ এবং একটি টেক্সট ভিউতে স্থানগুলোর মিল প্রদর্শন করে। স্থান নির্বাচনের কার্যকারিতা বাদ দেওয়া হয়েছে। FetcherSampleViewController FetcherSampleViewController.h-এ UIViewController থেকে ডিরাইভ করা হয়েছে।
সুইফট
import UIKit import GooglePlaces class ViewController: UIViewController { var textField: UITextField? var resultText: UITextView? var fetcher: GMSAutocompleteFetcher? override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white edgesForExtendedLayout = [] // Set bounds to inner-west Sydney Australia. let neBoundsCorner = CLLocationCoordinate2D(latitude: -33.843366, longitude: 151.134002) let swBoundsCorner = CLLocationCoordinate2D(latitude: -33.875725, longitude: 151.200349) // Set up the autocomplete filter. let filter = GMSAutocompleteFilter() filter.locationRestriction = GMSPlaceRectangularLocationOption(neBoundsCorner, swBoundsCorner) // Create a new session token. let token: GMSAutocompleteSessionToken = GMSAutocompleteSessionToken.init() // Create the fetcher. fetcher = GMSAutocompleteFetcher(bounds: nil, filter: filter) fetcher?.delegate = self fetcher?.provide(token) textField = UITextField(frame: CGRect(x: 5.0, y: 10.0, width: view.bounds.size.width - 5.0, height: 64.0)) textField?.autoresizingMask = .flexibleWidth textField?.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: .editingChanged) let placeholder = NSAttributedString(string: "Type a query...") textField?.attributedPlaceholder = placeholder resultText = UITextView(frame: CGRect(x: 0, y: 65.0, width: view.bounds.size.width, height: view.bounds.size.height - 65.0)) resultText?.backgroundColor = UIColor(white: 0.95, alpha: 1.0) resultText?.text = "No Results" resultText?.isEditable = false self.view.addSubview(textField!) self.view.addSubview(resultText!) } @objc func textFieldDidChange(textField: UITextField) { fetcher?.sourceTextHasChanged(textField.text!) } } extension ViewController: GMSAutocompleteFetcherDelegate { func didAutocomplete(with predictions: [GMSAutocompletePrediction]) { let resultsStr = NSMutableString() for prediction in predictions { resultsStr.appendFormat("\n Primary text: %@\n", prediction.attributedPrimaryText) resultsStr.appendFormat("Place ID: %@\n", prediction.placeID) } resultText?.text = resultsStr as String } func didFailAutocompleteWithError(_ error: Error) { resultText?.text = error.localizedDescription } }
উদ্দেশ্য-সি
#import "FetcherSampleViewController.h" #import <GooglePlaces/GooglePlaces.h> @interface FetcherSampleViewController () <GMSAutocompleteFetcherDelegate> @end @implementation FetcherSampleViewController { UITextField *_textField; UITextView *_resultText; GMSAutocompleteFetcher* _fetcher; } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; self.edgesForExtendedLayout = UIRectEdgeNone; // Set bounds to inner-west Sydney Australia. CLLocationCoordinate2D neBoundsCorner = CLLocationCoordinate2DMake(-33.843366, 151.134002); CLLocationCoordinate2D swBoundsCorner = CLLocationCoordinate2DMake(-33.875725, 151.200349); GMSAutocompleteFilter *autocompleteFilter = [[GMSAutocompleteFilter alloc] init]; autocompleteFilter.locationRestriction = GMSPlaceRectangularLocationOption(neBoundsCorner, swBoundsCorner); // Create the fetcher. _fetcher = [[GMSAutocompleteFetcher alloc] initWithBounds:nil filter:filter]; _fetcher.delegate = self; // Set up the UITextField and UITextView. _textField = [[UITextField alloc] initWithFrame:CGRectMake(5.0f, 0, self.view.bounds.size.width - 5.0f, 44.0f)]; _textField.autoresizingMask = UIViewAutoresizingFlexibleWidth; [_textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; _resultText =[[UITextView alloc] initWithFrame:CGRectMake(0, 45.0f, self.view.bounds.size.width, self.view.bounds.size.height - 45.0f)]; _resultText.backgroundColor = [UIColor colorWithWhite:0.95f alpha:1.0f]; _resultText.text = @"No Results"; _resultText.editable = NO; [self.view addSubview:_textField]; [self.view addSubview:_resultText]; } - (void)textFieldDidChange:(UITextField *)textField { NSLog(@"%@", textField.text); [_fetcher sourceTextHasChanged:textField.text]; } #pragma mark - GMSAutocompleteFetcherDelegate - (void)didAutocompleteWithPredictions:(NSArray *)predictions { NSMutableString *resultsStr = [NSMutableString string]; for (GMSAutocompletePrediction *prediction in predictions) { [resultsStr appendFormat:@"%@\n", [prediction.attributedPrimaryText string]]; } _resultText.text = resultsStr; } - (void)didFailAutocompleteWithError:(NSError *)error { _resultText.text = [NSString stringWithFormat:@"%@", error.localizedDescription]; } @end
সেশন টোকেন
বিলিংয়ের উদ্দেশ্যে, সেশন টোকেন ব্যবহারকারীর অটোকমপ্লিট সার্চের কোয়েরি এবং সিলেকশন পর্যায়গুলোকে একটি পৃথক সেশনে একত্রিত করে। ব্যবহারকারী যখন কোয়েরি টাইপ করা শুরু করেন, তখন সেশনটি শুরু হয় এবং যখন তিনি একটি স্থান নির্বাচন করেন, তখন তা শেষ হয়। প্রতিটি সেশনে একাধিক কোয়েরি থাকতে পারে, যার পরে একটি স্থান নির্বাচন করা হয়। একটি সেশন শেষ হয়ে গেলে, টোকেনটি আর বৈধ থাকে না; আপনার অ্যাপকে প্রতিটি সেশনের জন্য একটি নতুন টোকেন তৈরি করতে হবে। আমরা সমস্ত প্রোগ্রাম্যাটিক অটোকমপ্লিট সেশনের জন্য সেশন টোকেন ব্যবহার করার পরামর্শ দিই (যখন আপনি ফুল-স্ক্রিন কন্ট্রোলার বা রেজাল্টস কন্ট্রোলার ব্যবহার করেন, তখন এপিআই স্বয়ংক্রিয়ভাবে এর যত্ন নেয়)।
iOS-এর জন্য Places SDK প্রতিটি সেশন শনাক্ত করতে একটি GMSAutocompleteSessionToken ব্যবহার করে। আপনার অ্যাপের উচিত প্রতিটি নতুন সেশন শুরু করার সময় একটি নতুন সেশন টোকেন পাঠানো, এবং তারপর ব্যবহারকারীর দ্বারা নির্বাচিত স্থানটির বিবরণ পুনরুদ্ধার করার জন্য fetchPlacefromPlaceID: কলে সেই একই টোকেনটি একটি Place ID-সহ পাঠানো।
সেশন টোকেন সম্পর্কে আরও জানুন ।
একটি নতুন সেশন টোকেন তৈরি করতে নিম্নলিখিত কোডটি ব্যবহার করুন:
let token: GMSAutocompleteSessionToken = GMSAutocompleteSessionToken.init()
ব্যবহারের সীমা
-
GMSPlacesClient findAutocompletePredictionsFromQueryমেথডটির ব্যবহার স্তরভিত্তিক কোয়েরি সীমার অধীন। ব্যবহারের সীমা সম্পর্কে জানতে ডকুমেন্টেশন দেখুন।
আপনার অ্যাপে অ্যাট্রিবিউশন প্রদর্শন করা
- আপনার অ্যাপ যদি প্রোগ্রাম্যাটিকভাবে অটোকমপ্লিট পরিষেবা ব্যবহার করে, তাহলে আপনার UI-তে অবশ্যই 'Powered by Google' অ্যাট্রিবিউশন প্রদর্শন করতে হবে, অথবা এটি একটি গুগল-ব্র্যান্ডেড ম্যাপের মধ্যে প্রদর্শিত হতে হবে।
- আপনার অ্যাপ যদি অটোকমপ্লিট UI কন্ট্রোল ব্যবহার করে, তাহলে অতিরিক্ত কোনো পদক্ষেপের প্রয়োজন নেই (প্রয়োজনীয় অ্যাট্রিবিউশনটি ডিফল্টরূপে প্রদর্শিত হয়)।
- আইডি দ্বারা কোনো স্থান পাওয়ার পর যদি আপনি সেই স্থানের অতিরিক্ত তথ্য সংগ্রহ ও প্রদর্শন করেন, তবে আপনাকে তৃতীয় পক্ষের কৃতিত্বও প্রদর্শন করতে হবে।
আরও বিস্তারিত জানতে, অ্যাট্রিবিউশন সম্পর্কিত ডকুমেন্টেশন দেখুন।
নেটওয়ার্ক কার্যকলাপ সূচক নিয়ন্ত্রণ করা
অ্যাপ্লিকেশনের স্ট্যাটাস বারে নেটওয়ার্ক অ্যাক্টিভিটি ইন্ডিকেটর নিয়ন্ত্রণ করতে হলে, আপনাকে অবশ্যই আপনার ব্যবহৃত অটোকমপ্লিট ক্লাসের জন্য উপযুক্ত ঐচ্ছিক ডেলিগেট মেথডগুলো ইমপ্লিমেন্ট করতে হবে এবং নেটওয়ার্ক ইন্ডিকেটরটি নিজে থেকেই চালু ও বন্ধ করতে হবে।
-
GMSAutocompleteViewControllerজন্য আপনাকে অবশ্যইdidRequestAutocompletePredictions:এবংdidUpdateAutocompletePredictions:ডেলিগেট মেথডগুলো ইমপ্লিমেন্ট করতে হবে। -
GMSAutocompleteResultsViewControllerএর জন্য আপনাকে অবশ্যইdidRequestAutocompletePredictionsForResultsController:এবংdidUpdateAutocompletePredictionsForResultsController:ডেলিগেট মেথডগুলো ইমপ্লিমেন্ট করতে হবে। -
GMSAutocompleteTableDataSourceজন্য আপনাকে অবশ্যইdidRequestAutocompletePredictionsForTableDataSource:এবংdidUpdateAutocompletePredictionsForTableDataSource:ডেলিগেট মেথডগুলো ইমপ্লিমেন্ট করতে হবে।
এই পদ্ধতিগুলো প্রয়োগ করে এবং [UIApplication sharedApplication].networkActivityIndicatorVisible কে যথাক্রমে YES এবং NO তে সেট করার মাধ্যমে স্ট্যাটাস বারটি অটোকমপ্লিট UI-এর সাথে সঠিকভাবে মিলে যাবে।
স্বয়ংক্রিয় সম্পূর্ণতার ফলাফল সীমাবদ্ধ করুন
আপনি অটোকমপ্লিট UI কন্ট্রোল ব্যবহার করে ফলাফলকে একটি নির্দিষ্ট ভৌগোলিক অঞ্চলে সীমাবদ্ধ করতে পারেন, এবং/অথবা এক বা একাধিক স্থানের ধরণ, বা একটি নির্দিষ্ট দেশ বা দেশসমূহে ফলাফল ফিল্টার করতে পারেন। ফলাফল সীমাবদ্ধ করতে, আপনি নিম্নলিখিত কাজগুলো করতে পারেন:
- নির্ধারিত অঞ্চলের মধ্যে ফলাফলকে অগ্রাধিকার দিতে (পক্ষপাতদুষ্ট হতে),
GMSAutocompleteFilterএlocationBiasসেট করুন (নির্ধারিত অঞ্চলের বাইরের কিছু ফলাফলও ফেরত আসতে পারে)। যদিlocationRestrictionও সেট করা থাকে, তাহলেlocationBiasউপেক্ষা করা হবে। শুধুমাত্র নির্ধারিত অঞ্চলের মধ্যে ফলাফল দেখানোর (সীমাবদ্ধ করার) জন্য,
GMSAutocompleteFilterএlocationRestrictionসেট করুন (কেবলমাত্র নির্ধারিত অঞ্চলের ভেতরের ফলাফলই ফেরত দেওয়া হবে)।- দ্রষ্টব্য: এই সীমাবদ্ধতা শুধুমাত্র সম্পূর্ণ রুটের ক্ষেত্রেই প্রযোজ্য; আয়তক্ষেত্রাকার সীমার বাইরে অবস্থিত সংশ্লেষিত ফলাফল এমন কোনো রুটের উপর ভিত্তি করে ফেরত দেওয়া হতে পারে যা অবস্থানগত সীমাবদ্ধতার সাথে ওভারল্যাপ করে।
শুধুমাত্র একটি নির্দিষ্ট স্থানের ধরণ অনুযায়ী ফলাফল ফেরত পেতে,
GMSAutocompleteFilterএtypesনির্ধারণ করুন (উদাহরণস্বরূপ, TypeFilter.ADDRESS নির্দিষ্ট করলে উইজেটটি শুধুমাত্র সুনির্দিষ্ট ঠিকানাসহ ফলাফল ফেরত দেবে)।সর্বোচ্চ পাঁচটি নির্দিষ্ট দেশের মধ্যে থেকে ফলাফল পেতে,
GMSAutocompleteFilterএcountriesসেট করুন।
একটি নির্দিষ্ট অঞ্চলে ফলাফল পক্ষপাতদুষ্ট হয়।
নির্ধারিত অঞ্চলের মধ্যে ফলাফলকে অগ্রাধিকার দিতে (পক্ষপাতদুষ্ট হতে), GMSAutocompleteFilter এ locationBias সেট করুন, যেমনটি এখানে দেখানো হয়েছে:
northEast = CLLocationCoordinate2DMake(39.0, -95.0); southWest =
CLLocationCoordinate2DMake(37.5, -100.0); GMSAutocompleteFilter *filter =
[[GMSAutocompleteFilter alloc] init]; filter.locationBias =
GMSPlaceRectangularLocationOption(northEast, southWest);
ফলাফল একটি নির্দিষ্ট অঞ্চলে সীমাবদ্ধ করুন
শুধুমাত্র নির্ধারিত অঞ্চলের মধ্যে ফলাফল দেখানোর (সীমাবদ্ধ করার) জন্য, GMSAutocompleteFilter এ locationRestriction সেট করুন, যেমনটি এখানে দেখানো হয়েছে:
northEast = CLLocationCoordinate2DMake(39.0, -95.0); southWest =
CLLocationCoordinate2DMake(37.5, -100.0); GMSAutocompleteFilter *filter =
[[GMSAutocompleteFilter alloc] init]; filter.locationRestriction =
GMSPlaceRectangularLocationOption(northEast, southWest);
দেশ অনুযায়ী ফলাফল ফিল্টার করুন
সর্বোচ্চ পাঁচটি নির্দিষ্ট দেশের মধ্যে ফলাফল ফিল্টার করতে, এখানে দেখানো অনুযায়ী GMSAutocompleteFilter এ countries সেট করুন:
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.countries = @[ @"au", @"nz" ];
স্থানের ধরণ বা প্রকার সংগ্রহ অনুযায়ী ফলাফল ফিল্টার করুন
GMSAutoCompleteFilter এর types প্রপার্টি সেট করে ফলাফলকে একটি নির্দিষ্ট প্রকার বা প্রকার সংগ্রহের মধ্যে সীমাবদ্ধ করুন। Place Types- এর টেবিল ১, ২, এবং ৩-এ তালিকাভুক্ত ফিল্টারগুলি নির্দিষ্ট করতে এই প্রপার্টিটি ব্যবহার করুন। কিছু নির্দিষ্ট না করা হলে, সব ধরনের ফলাফল ফেরত দেওয়া হয়।
একটি প্রকার বা প্রকার সংগ্রহ ফিল্টার নির্দিষ্ট করতে:
Place Types- এ দেখানো টেবিল ১ এবং টেবিল ২ থেকে সর্বোচ্চ পাঁচটি টাইপ ভ্যালু নির্দিষ্ট করতে
typesপ্রপার্টিটি ব্যবহার করুন। টাইপ ভ্যালুগুলোGMSPlaceTypeএর কনস্ট্যান্ট দ্বারা সংজ্ঞায়িত করা হয়।Place Types- এ দেখানো টেবিল ৩ থেকে একটি টাইপ কালেকশন নির্দিষ্ট করতে
typesপ্রপার্টিটি ব্যবহার করুন। টাইপ কালেকশনের মানগুলোGMSPlaceTypeএর কনস্ট্যান্ট দ্বারা সংজ্ঞায়িত করা হয়।অনুরোধে টেবিল ৩ থেকে শুধুমাত্র একটি প্রকারের অনুমতি আছে। আপনি যদি টেবিল ৩ থেকে কোনো মান নির্দিষ্ট করেন, তাহলে আপনি টেবিল ১ বা টেবিল ২ থেকে কোনো মান নির্দিষ্ট করতে পারবেন না। যদি তা করেন, তাহলে একটি ত্রুটি ঘটবে।
উদাহরণস্বরূপ, শুধুমাত্র একটি নির্দিষ্ট স্থানের ধরনের সাথে সামঞ্জস্যপূর্ণ ফলাফল ফেরত পেতে, GMSAutocompleteFilter এ types সেট করুন। নিম্নলিখিত উদাহরণটি শুধুমাত্র একটি সুনির্দিষ্ট ঠিকানা সহ ফলাফল ফেরত দেওয়ার জন্য ফিল্টার সেট করা দেখাচ্ছে:
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.types = @[ kGMSPlaceTypeAirport, kGMSPlaceTypeAmusementPark ];
স্থান স্বয়ংসম্পূর্ণতা (লেগ্যাসি) অপ্টিমাইজেশন
এই বিভাগে প্লেস অটোকমপ্লিট (লেগ্যাসি) পরিষেবাটির সর্বোত্তম ব্যবহার নিশ্চিত করার জন্য সেরা অনুশীলনগুলো বর্ণনা করা হয়েছে।
এখানে কিছু সাধারণ নির্দেশিকা দেওয়া হলো:
- একটি কার্যকরী ইউজার ইন্টারফেস তৈরি করার সবচেয়ে দ্রুত উপায় হলো Maps JavaScript API Place Autocomplete (Legacy) উইজেট , Places SDK for Android Place Autocomplete (Legacy) উইজেট , অথবা Places SDK for iOS Place Autocomplete (Legacy) UI কন্ট্রোল ব্যবহার করা।
- শুরু থেকেই প্লেস অটোকমপ্লিট (লেগ্যাসি)-এর অপরিহার্য ডেটা ফিল্ডগুলো বুঝুন।
- অবস্থান পক্ষপাত এবং অবস্থান সীমাবদ্ধতা ক্ষেত্রগুলি ঐচ্ছিক, কিন্তু অটোকমপ্লিট পারফরম্যান্সের উপর এগুলির উল্লেখযোগ্য প্রভাব থাকতে পারে।
- এপিআই কোনো ত্রুটি ফেরত দিলে আপনার অ্যাপটি যেন সুষ্ঠুভাবে তার কার্যক্ষমতা হারায়, তা নিশ্চিত করতে এরর হ্যান্ডলিং ব্যবহার করুন।
- নিশ্চিত করুন যে, কোনো বিকল্প না থাকলে আপনার অ্যাপটি তা সামলে নেয় এবং ব্যবহারকারীদের চালিয়ে যাওয়ার একটি উপায় প্রদান করে।
ব্যয় অপ্টিমাইজেশনের সর্বোত্তম অনুশীলন
মৌলিক ব্যয় অপ্টিমাইজেশন
Place Autocomplete (Legacy) পরিষেবা ব্যবহারের খরচ অপ্টিমাইজ করতে, Place Details (Legacy) এবং Place Autocomplete (Legacy) উইজেটগুলিতে ফিল্ড মাস্ক ব্যবহার করুন, যাতে শুধুমাত্র আপনার প্রয়োজনীয় Place Autocomplete (Legacy) ডেটা ফিল্ডগুলিই ফেরত আসে।
উন্নত ব্যয় অপ্টিমাইজেশন
SKU: Autocomplete - Per Request প্রাইসিং অ্যাক্সেস করতে এবং Place Details (Legacy)-এর পরিবর্তে নির্বাচিত স্থান সম্পর্কে Geocoding API-এর ফলাফল অনুরোধ করতে Place Autocomplete (Legacy)-এর প্রোগ্রাম্যাটিক বাস্তবায়ন বিবেচনা করুন। যদি নিম্নলিখিত উভয় শর্তই পূরণ হয়, তবে Geocoding API-এর সাথে যুক্ত প্রতি-অনুরোধ প্রাইসিং, প্রতি-সেশন (সেশন-ভিত্তিক) প্রাইসিং-এর চেয়ে বেশি সাশ্রয়ী হয়:
- ব্যবহারকারীর নির্বাচিত স্থানের শুধু অক্ষাংশ/দ্রাঘিমাংশ বা ঠিকানার প্রয়োজন হলে, জিওকোডিং এপিআই একটি প্লেস ডিটেইলস (লেগ্যাসি) কলের চেয়ে কম খরচে এই তথ্য সরবরাহ করে।
- যদি ব্যবহারকারীরা গড়ে চারটি বা তার কম প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রেডিকশন অনুরোধের মধ্যে একটি অটোকমপ্লিট প্রেডিকশন নির্বাচন করেন, তাহলে প্রতি-সেশন মূল্যের চেয়ে প্রতি-অনুরোধ মূল্য নির্ধারণ বেশি সাশ্রয়ী হতে পারে।
আপনার অ্যাপ্লিকেশনের জন্য কি নির্বাচিত পূর্বাভাসের ঠিকানা এবং অক্ষাংশ/দ্রাঘিমাংশ ছাড়া অন্য কোনো তথ্যের প্রয়োজন আছে?
হ্যাঁ, আরও বিস্তারিত তথ্যের প্রয়োজন।
প্লেস ডিটেইলস (লেগ্যাসি)-এর সাথে সেশন-ভিত্তিক প্লেস অটোকমপ্লিট (লেগ্যাসি) ব্যবহার করুন।
যেহেতু আপনার অ্যাপ্লিকেশনের জন্য স্থানের বিবরণ (লেগ্যাসি), যেমন স্থানের নাম, ব্যবসার অবস্থা, বা খোলার সময় প্রয়োজন, তাই আপনার প্লেস অটোকমপ্লিট (লেগ্যাসি) বাস্তবায়নে প্রতি সেশনের জন্য একটি সেশন টোকেন ( প্রোগ্রাম্যাটিকভাবে অথবা জাভাস্ক্রিপ্ট , অ্যান্ড্রয়েড বা আইওএস উইজেটে বিল্ট-ইন) এবং আপনি কোন স্থানের ডেটা ফিল্ড অনুরোধ করছেন তার উপর নির্ভর করে প্রযোজ্য প্লেস ডেটা SKU ব্যবহার করা উচিত ।
উইজেট বাস্তবায়ন
জাভাস্ক্রিপ্ট , অ্যান্ড্রয়েড বা আইওএস উইজেটগুলিতে সেশন ম্যানেজমেন্ট স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত থাকে। এর মধ্যে নির্বাচিত প্রেডিকশনের প্লেস অটোকমপ্লিট (লেগ্যাসি) রিকোয়েস্ট এবং প্লেস ডিটেইলস (লেগ্যাসি) রিকোয়েস্ট উভয়ই অন্তর্ভুক্ত। আপনি যেন শুধুমাত্র আপনার প্রয়োজনীয় প্লেস অটোকমপ্লিট (লেগ্যাসি) ডেটা ফিল্ডগুলির জন্যই রিকোয়েস্ট করেন, তা নিশ্চিত করতে fields প্যারামিটারটি নির্দিষ্ট করে দিন।
প্রোগ্রাম্যাটিক বাস্তবায়ন
আপনার প্লেস অটোকমপ্লিট (লেগ্যাসি) অনুরোধের সাথে একটি সেশন টোকেন ব্যবহার করুন। নির্বাচিত প্রেডিকশন সম্পর্কে প্লেস ডিটেইলস (লেগ্যাসি) অনুরোধ করার সময়, নিম্নলিখিত প্যারামিটারগুলো অন্তর্ভুক্ত করুন:
- প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রতিক্রিয়া থেকে প্রাপ্ত স্থানের আইডি
- প্লেস অটোকমপ্লিট (লেগ্যাসি) অনুরোধে ব্যবহৃত সেশন টোকেন
-
fieldsপ্যারামিটারটি আপনার প্রয়োজনীয় প্লেস অটোকমপ্লিট (লেগ্যাসি) ডেটা ফিল্ডগুলি নির্দিষ্ট করে।
না, শুধু ঠিকানা ও অবস্থান প্রয়োজন।
আপনার অ্যাপ্লিকেশনের জন্য প্লেস অটোকমপ্লিট (লেগ্যাসি) ব্যবহারের পারফরম্যান্সের উপর নির্ভর করে, জিওকোডিং এপিআই প্লেস ডিটেইলস (লেগ্যাসি)-এর চেয়ে বেশি সাশ্রয়ী বিকল্প হতে পারে। প্রতিটি অ্যাপ্লিকেশনের প্লেস অটোকমপ্লিট (লেগ্যাসি)-এর কার্যকারিতা নির্ভর করে ব্যবহারকারীরা কী তথ্য প্রবেশ করাচ্ছেন, অ্যাপ্লিকেশনটি কোথায় ব্যবহার করা হচ্ছে এবং পারফরম্যান্স অপ্টিমাইজেশনের সেরা অনুশীলনগুলো প্রয়োগ করা হয়েছে কিনা তার উপর।
নিম্নলিখিত প্রশ্নের উত্তর দেওয়ার জন্য, আপনার অ্যাপ্লিকেশনে একটি প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রেডিকশন নির্বাচন করার আগে একজন ব্যবহারকারী গড়ে কতগুলি অক্ষর টাইপ করেন তা বিশ্লেষণ করুন।
আপনার ব্যবহারকারীরা কি গড়ে চার বা তার কম অনুরোধে একটি প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রেডিকশন নির্বাচন করেন?
হ্যাঁ
সেশন টোকেন ছাড়াই প্রোগ্রাম্যাটিকভাবে প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রয়োগ করুন এবং নির্বাচিত স্থানের পূর্বাভাসের উপর জিওকোডিং এপিআই কল করুন।
জিওকোডিং এপিআই ঠিকানা এবং অক্ষাংশ/দ্রাঘিমাংশের স্থানাঙ্ক সরবরাহ করে। চারটি অটোকমপ্লিট - পার রিকোয়েস্ট অনুরোধ এবং নির্বাচিত স্থানের পূর্বাভাস সম্পর্কে একটি জিওকোডিং এপিআই কল করার খরচ, প্রতি সেশনের প্লেস অটোকমপ্লিট (লেগ্যাসি) খরচের চেয়ে কম ।
আপনার ব্যবহারকারীদের আরও কম অক্ষরের মধ্যে তাদের কাঙ্ক্ষিত পূর্বাভাস পেতে সাহায্য করার জন্য পারফরম্যান্সের সেরা অনুশীলনগুলো প্রয়োগ করার কথা বিবেচনা করুন।
না
প্লেস ডিটেইলস (লেগ্যাসি)-এর সাথে সেশন-ভিত্তিক প্লেস অটোকমপ্লিট (লেগ্যাসি) ব্যবহার করুন।
যেহেতু একজন ব্যবহারকারী একটি প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রেডিকশন নির্বাচন করার আগে আপনার প্রত্যাশিত গড় অনুরোধের সংখ্যা প্রতি-সেশন মূল্যের খরচকে ছাড়িয়ে যায়, তাই আপনার প্লেস অটোকমপ্লিট (লেগ্যাসি) বাস্তবায়নে প্রতি সেশনে প্লেস অটোকমপ্লিট (লেগ্যাসি) অনুরোধ এবং সংশ্লিষ্ট প্লেস ডিটেইলস (লেগ্যাসি) অনুরোধ উভয়ের জন্যই একটি সেশন টোকেন ব্যবহার করা উচিত ।
উইজেট বাস্তবায়ন
জাভাস্ক্রিপ্ট , অ্যান্ড্রয়েড বা আইওএস উইজেটগুলিতে সেশন ম্যানেজমেন্ট স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত থাকে। এর মধ্যে নির্বাচিত প্রেডিকশনের প্লেস অটোকমপ্লিট (লেগ্যাসি) রিকোয়েস্ট এবং প্লেস ডিটেইলস (লেগ্যাসি) রিকোয়েস্ট উভয়ই অন্তর্ভুক্ত। আপনি যেন শুধুমাত্র আপনার প্রয়োজনীয় ফিল্ডগুলোর জন্যই রিকোয়েস্ট করেন, তা নিশ্চিত করতে fields প্যারামিটারটি নির্দিষ্ট করে দিন।
প্রোগ্রাম্যাটিক বাস্তবায়ন
আপনার প্লেস অটোকমপ্লিট (লেগ্যাসি) অনুরোধের সাথে একটি সেশন টোকেন ব্যবহার করুন। নির্বাচিত প্রেডিকশন সম্পর্কে প্লেস ডিটেইলস (লেগ্যাসি) অনুরোধ করার সময়, নিম্নলিখিত প্যারামিটারগুলো অন্তর্ভুক্ত করুন:
- প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রতিক্রিয়া থেকে প্রাপ্ত স্থানের আইডি
- প্লেস অটোকমপ্লিট (লেগ্যাসি) অনুরোধে ব্যবহৃত সেশন টোকেন
-
fieldsপ্যারামিটারটি ঠিকানা এবং জ্যামিতির মতো মৌলিক ডেটা ক্ষেত্রগুলি নির্দিষ্ট করে।
Place Autocomplete (Legacy) অনুরোধগুলি বিলম্বিত করার কথা বিবেচনা করুন।
আপনি এমন কৌশল অবলম্বন করতে পারেন, যেমন ব্যবহারকারী প্রথম তিন বা চারটি অক্ষর টাইপ না করা পর্যন্ত একটি প্লেস অটোকমপ্লিট (লেগ্যাসি) অনুরোধ বিলম্বিত করা, যাতে আপনার অ্যাপ্লিকেশনটি কম অনুরোধ করে। উদাহরণস্বরূপ, ব্যবহারকারী তৃতীয় অক্ষরটি টাইপ করার পর প্রতিটি অক্ষরের জন্য প্লেস অটোকমপ্লিট (লেগ্যাসি) অনুরোধ করার অর্থ হলো, যদি ব্যবহারকারী সাতটি অক্ষর টাইপ করার পর এমন একটি প্রেডিকশন নির্বাচন করে যার জন্য আপনি একটি জিওকোডিং এপিআই অনুরোধ করেন, তাহলে মোট খরচ হবে প্রতি অনুরোধে ৪টি প্লেস অটোকমপ্লিট (লেগ্যাসি) + জিওকোডিং ।
যদি অনুরোধ বিলম্বিত করার মাধ্যমে আপনার গড় প্রোগ্রাম্যাটিক অনুরোধের সংখ্যা চারের নিচে নামিয়ে আনা যায়, তাহলে আপনি জিওকোডিং এপিআই ইমপ্লিমেন্টেশন সহ পারফরম্যান্ট প্লেস অটোকমপ্লিট (লেগ্যাসি) -এর নির্দেশিকা অনুসরণ করতে পারেন। মনে রাখবেন যে, অনুরোধ বিলম্বিত করাকে ব্যবহারকারী লেটেন্সি হিসেবে উপলব্ধি করতে পারেন, কারণ তিনি প্রতিটি নতুন কীস্ট্রোকের সাথে প্রেডিকশন দেখার প্রত্যাশা করতে পারেন।
আপনার ব্যবহারকারীরা যাতে কম অক্ষরের মধ্যে তাদের কাঙ্ক্ষিত পূর্বাভাস পেতে পারেন, সেজন্য পারফরম্যান্সের সর্বোত্তম অনুশীলনগুলো প্রয়োগ করার কথা বিবেচনা করুন।
খরচের জন্য, গুগল ম্যাপস প্ল্যাটফর্মের মূল্য তালিকা দেখুন।
কর্মক্ষমতার সর্বোত্তম অনুশীলন
নিম্নলিখিত নির্দেশিকাগুলিতে প্লেস অটোকমপ্লিট (লেগ্যাসি)-এর পারফরম্যান্স অপ্টিমাইজ করার উপায়গুলি বর্ণনা করা হয়েছে:
- আপনার প্লেস অটোকমপ্লিট (লেগ্যাসি) ইমপ্লিমেন্টেশনে দেশভিত্তিক সীমাবদ্ধতা, অবস্থানভিত্তিক পক্ষপাত এবং (প্রোগ্রামভিত্তিক বাস্তবায়নের জন্য) ভাষার পছন্দ যোগ করুন। উইজেটগুলোর ক্ষেত্রে ভাষার পছন্দের প্রয়োজন নেই, কারণ সেগুলো ব্যবহারকারীর ব্রাউজার বা মোবাইল ডিভাইস থেকে ভাষার পছন্দ গ্রহণ করে।
- যদি প্লেস অটোকমপ্লিট (লেগ্যাসি)-এর সাথে একটি মানচিত্র থাকে, তাহলে আপনি মানচিত্রের ভিউপোর্ট অনুযায়ী অবস্থান নির্ধারণ করতে পারেন।
- যখন কোনো ব্যবহারকারী প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রেডিকশনগুলোর মধ্যে থেকে কোনো একটি বেছে নেন না—সাধারণত কারণ সেই প্রেডিকশনগুলোর কোনোটিই কাঙ্ক্ষিত ঠিকানা নয়—তখন আপনি আরও প্রাসঙ্গিক ফলাফল পাওয়ার চেষ্টা করার জন্য ব্যবহারকারীর মূল ইনপুটটি পুনরায় ব্যবহার করতে পারেন:
- যদি আপনি আশা করেন যে ব্যবহারকারী শুধুমাত্র ঠিকানার তথ্য প্রবেশ করাবেন, তাহলে জিওকোডিং এপিআই (Geocoding API) -কে কল করার সময় ব্যবহারকারীর মূল ইনপুটটি পুনরায় ব্যবহার করুন।
- যদি ব্যবহারকারী কোনো নির্দিষ্ট স্থানের জন্য নাম বা ঠিকানা দিয়ে অনুসন্ধান করবে বলে আশা করা হয়, তাহলে একটি প্লেস ডিটেইলস (লেগ্যাসি) রিকোয়েস্ট ব্যবহার করুন। যদি শুধুমাত্র একটি নির্দিষ্ট অঞ্চলে ফলাফল প্রত্যাশিত হয়, তাহলে লোকেশন বায়াসিং ব্যবহার করুন।
- ব্যবহারকারীরা কোনো ভবনের নির্দিষ্ট ইউনিট বা অ্যাপার্টমেন্টের মতো উপ-ঠিকানা ইনপুট করেন। উদাহরণস্বরূপ, চেক ঠিকানা "Stroupežnického 3191/17, Praha" প্লেস অটোকমপ্লিট (লেগ্যাসি)-তে একটি আংশিক পূর্বাভাস দেয়।
- ব্যবহারকারীরা নিউ ইয়র্ক সিটির "23-30 29th St, Queens" বা হাওয়াই দ্বীপপুঞ্জের কাওয়াই দ্বীপের "47-380 Kamehameha Hwy, Kaneohe"-এর মতো রোড-সেগমেন্ট প্রিফিক্স সহ ঠিকানা ইনপুট করছেন।
অবস্থান পক্ষপাত
একটি location প্যারামিটার এবং একটি radius প্যারামিটার পাস করে ফলাফলকে একটি নির্দিষ্ট এলাকার দিকে পক্ষপাতদুষ্ট করুন। এটি প্লেস অটোকমপ্লিট (লেগ্যাসি)-কে সংজ্ঞায়িত এলাকার মধ্যে ফলাফল দেখাতে অগ্রাধিকার দিতে নির্দেশ দেয়। সংজ্ঞায়িত এলাকার বাইরের ফলাফলও প্রদর্শিত হতে পারে। আপনি includedRegionCodes প্যারামিটার ব্যবহার করে ফলাফল ফিল্টার করে শুধুমাত্র একটি নির্দিষ্ট দেশের মধ্যে থাকা স্থানগুলো দেখাতে পারেন।
অবস্থান সীমাবদ্ধ করা
locationRestriction প্যারামিটারটি দিয়ে ফলাফল একটি নির্দিষ্ট এলাকায় সীমাবদ্ধ করুন।
আপনি strictbounds প্যারামিটারটি যোগ করে location এবং একটি radius প্যারামিটার দ্বারা সংজ্ঞায়িত অঞ্চলে ফলাফল সীমাবদ্ধ করতে পারেন। এটি Place Autocomplete (Legacy)-কে শুধুমাত্র সেই অঞ্চলের মধ্যে থাকা ফলাফলগুলি ফেরত দিতে নির্দেশ দেয়।
সমস্যা সমাধান
যদিও বিভিন্ন ধরণের ত্রুটি ঘটতে পারে, আপনার অ্যাপে যে ত্রুটিগুলো হওয়ার সম্ভাবনা বেশি, তার বেশিরভাগই সাধারণত কনফিগারেশন ত্রুটি (যেমন, ভুল এপিআই কী ব্যবহার করা হয়েছে, বা এপিআই কী ভুলভাবে কনফিগার করা হয়েছে) অথবা কোটা ত্রুটির (আপনার অ্যাপ তার কোটা অতিক্রম করেছে) কারণে হয়ে থাকে। কোটা সম্পর্কে আরও তথ্যের জন্য ব্যবহারের সীমা (Usage Limits) দেখুন।
অটোকমপ্লিট কন্ট্রোল ব্যবহারে যে ত্রুটিগুলো ঘটে, সেগুলো বিভিন্ন ডেলিগেট প্রোটোকলের didFailAutocompleteWithError() মেথডে রিটার্ন করা হয়। সরবরাহকৃত NSError অবজেক্টের code প্রপার্টিটি GMSPlacesErrorCode এনুমারেশনের মানগুলোর মধ্যে একটিতে সেট করা হয়।