স্বয়ংসম্পূর্ণ রাখুন

ইউরোপীয় অর্থনৈতিক অঞ্চল (EEA) ডেভেলপাররা

অ্যান্ড্রয়েডের জন্য প্লেসেস এসডিকে-তে থাকা অটোকমপ্লিট সার্ভিসটি ব্যবহারকারীর সার্চ কোয়েরির জবাবে সম্ভাব্য স্থানের পূর্বাভাস প্রদান করে। ব্যবহারকারী টাইপ করার সাথে সাথে, অটোকমপ্লিট সার্ভিসটি ব্যবসা প্রতিষ্ঠান, ঠিকানা, প্লাস কোড এবং দর্শনীয় স্থানের মতো জায়গাগুলোর জন্য সাজেশন দেখায়।

আপনি নিম্নলিখিত উপায়ে আপনার অ্যাপে অটোকমপ্লিট যোগ করতে পারেন:

একটি অটোকমপ্লিট উইজেট যোগ করুন

অটোকমপ্লিট উইজেটটি হলো একটি সার্চ ডায়ালগ, যাতে অন্তর্নির্মিত অটোকমপ্লিট কার্যকারিতা রয়েছে। ব্যবহারকারী যখন অনুসন্ধানের জন্য শব্দ বা টার্ম প্রবেশ করান, তখন উইজেটটি বেছে নেওয়ার জন্য সম্ভাব্য স্থানগুলির একটি তালিকা উপস্থাপন করে। ব্যবহারকারী যখন কোনো একটি স্থান নির্বাচন করেন, তখন একটি Place ইনস্ট্যান্স ফেরত আসে, যা আপনার অ্যাপ নির্বাচিত স্থানটি সম্পর্কে বিস্তারিত তথ্য পেতে ব্যবহার করতে পারে।

আপনার অ্যাপে অটোকমপ্লিট উইজেট যোগ করার দুটি বিকল্প রয়েছে:

বিকল্প ১: একটি AutocompleteSupportFragment এমবেড করুন

আপনার অ্যাপে একটি AutocompleteSupportFragment যোগ করতে, নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনার অ্যাক্টিভিটির XML লেআউটে একটি ফ্র্যাগমেন্ট যোগ করুন।
  2. আপনার অ্যাক্টিভিটি বা ফ্র্যাগমেন্টে একটি লিসেনার যোগ করুন।

একটি অ্যাক্টিভিটিতে AutocompleteSupportFragment যোগ করুন

কোনো অ্যাক্টিভিটিতে AutocompleteSupportFragment যোগ করতে, একটি XML লেআউটে একটি নতুন ফ্র্যাগমেন্ট যোগ করুন। উদাহরণস্বরূপ:

<fragment android:id="@+id/autocomplete_fragment"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
  />
  • ডিফল্টরূপে, ফ্র্যাগমেন্টটির কোনো বর্ডার বা ব্যাকগ্রাউন্ড থাকে না। একটি সামঞ্জস্যপূর্ণ ভিজ্যুয়াল চেহারা প্রদানের জন্য, ফ্র্যাগমেন্টটিকে CardView- এর মতো অন্য কোনো লেআউট এলিমেন্টের মধ্যে নেস্ট করুন।
  • আপনি যদি অটোকমপ্লিট ফ্র্যাগমেন্ট ব্যবহার করেন এবং onActivityResult ওভাররাইড করার প্রয়োজন হয়, তাহলে আপনাকে অবশ্যই super.onActivityResult কল করতে হবে, অন্যথায় ফ্র্যাগমেন্টটি সঠিকভাবে কাজ করবে না।

একটি অ্যাক্টিভিটিতে একটি PlaceSelectionListener যোগ করুন

PlaceSelectionListener ব্যবহারকারীর নির্বাচনের প্রতিক্রিয়ায় একটি স্থান ফেরত দেওয়ার কাজটি পরিচালনা করে। নিম্নলিখিত কোডটিতে ফ্র্যাগমেন্টের একটি রেফারেন্স তৈরি করা এবং আপনার AutocompleteSupportFragment এ একটি লিসেনার যুক্ত করার পদ্ধতি দেখানো হয়েছে:

কোটলিন

    // Initialize the AutocompleteSupportFragment.
    val autocompleteFragment =
        supportFragmentManager.findFragmentById(R.id.autocomplete_fragment)
                as AutocompleteSupportFragment

    // Specify the types of place data to return.
    autocompleteFragment.setPlaceFields(listOf(Place.Field.ID, Place.Field.DISPLAY_NAME))

    // Set up a PlaceSelectionListener to handle the response.
    autocompleteFragment.setOnPlaceSelectedListener(object : PlaceSelectionListener {
        override fun onPlaceSelected(place: Place) {
            binding.autocompleteResult.text = getString(
                R.string.place_selection,
                place.displayName,
                place.id,
                place.formattedAddress
            )
            Log.i(TAG, "Place: ${place.displayName}, ${place.id}")
        }

        override fun onError(status: Status) {
            binding.autocompleteResult.text = getString(R.string.an_error_occurred, status)
            Log.i(TAG, "An error occurred: $status")
        }
    })

      

জাভা

    // Initialize the AutocompleteSupportFragment.
    AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
            getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);

    // Specify the types of place data to return.
    assert autocompleteFragment != null;
    autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS));

    // Set up a PlaceSelectionListener to handle the response.
    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(@NonNull Place place) {
            binding.autocompleteResult.setText(
                    getString(
                            R.string.place_selection,
                            place.getDisplayName(),
                            place.getId(),
                            place.getFormattedAddress()
                    )
            );
            Log.i(TAG, "Place: " + place.getDisplayName() + ", " + place.getId());
        }


        @Override
        public void onError(@NonNull Status status) {
            binding.autocompleteResult.setText(getString(R.string.an_error_occurred, status));
            Log.e(TAG, "An error occurred: " + status);
        }
    });

      

বিকল্প ২: অটোকমপ্লিট অ্যাক্টিভিটি চালু করতে একটি ইন্টেন্ট ব্যবহার করুন

আপনি যদি আপনার অ্যাপে একটি ভিন্ন নেভিগেশনাল ফ্লো ব্যবহার করতে চান (উদাহরণস্বরূপ, সার্চ ফিল্ডের পরিবর্তে কোনো আইকন থেকে অটোকমপ্লিট চালু করতে), তাহলে আপনার অ্যাপ একটি ইন্টেন্ট ব্যবহার করে অটোকমপ্লিট চালু করতে পারে।

ইন্টেন্ট ব্যবহার করে অটোকমপ্লিট উইজেট চালু করতে, এই ধাপগুলো অনুসরণ করুন:

  1. কাঙ্ক্ষিত Autocomplete মোডটি পাস করে একটি ইন্টেন্ট তৈরি করতে Autocomplete.IntentBuilder ব্যবহার করুন।
  2. একটি অ্যাক্টিভিটি রেজাল্ট লঞ্চার registerForActivityResult সংজ্ঞায়িত করুন, যা ইন্টেন্ট চালু করতে এবং ফলাফলে ব্যবহারকারীর নির্বাচিত স্থানের পূর্বাভাস পরিচালনা করতে ব্যবহার করা যেতে পারে।

একটি অটোকমপ্লিট ইন্টেন্ট তৈরি করুন

নিচের উদাহরণটিতে অটোকমপ্লিট উইজেটটিকে একটি ইন্টেন্ট হিসেবে চালু করার জন্য Autocomplete.IntentBuilder ব্যবহার করে একটি ইন্টেন্ট তৈরি করা হয়েছে:

কোটলিন

    // Set the fields to specify which types of place data to
    // return after the user has made a selection.
    val fields = listOf(Place.Field.ID, Place.Field.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS)

    val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
        .setTypesFilter(listOf(PlaceTypes.ESTABLISHMENT))
        .build(this)

    startAutocomplete.launch(intent)

      

জাভা

    // Set the fields to specify which types of place data to
    // return after the user has made a selection.
    List<Place.Field> fields = Arrays.asList(Place.Field.ID, Place.Field.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS);

    // Start the autocomplete intent.
    Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
            .setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT))
            .build(this);
    startAutocomplete.launch(intent);

      

ইন্টেন্ট ব্যবহার করে অটোকমপ্লিট উইজেট চালু করার সময়, আপনি ওভারলে বা ফুল-স্ক্রিন ডিসপ্লে মোড থেকে বেছে নিতে পারেন। নিচের স্ক্রিনশটগুলোতে প্রতিটি ডিসপ্লে মোড যথাক্রমে দেখানো হয়েছে:

ওভারলে মোডে প্রদর্শিত হলে, অটোকমপ্লিট উইজেটটি মূল UI-এর উপরে স্থাপিত অবস্থায় দেখা যায়।
চিত্র ১ : ওভারলে মোডে অটোকমপ্লিট উইজেট
ফুলস্ক্রিন মোডে প্রদর্শিত হলে, অটোকমপ্লিট উইজেটটি পুরো স্ক্রিন জুড়ে থাকে।
চিত্র ২ : ফুলস্ক্রিন মোডে অটোকমপ্লিট উইজেট

ইনটেন্ট ফলাফলের জন্য একটি কলব্যাক নিবন্ধন করুন।

ব্যবহারকারী যখন কোনো স্থান নির্বাচন করেন তখন নোটিফিকেশন পাওয়ার জন্য, একটি registerForActivityResult() লঞ্চার সংজ্ঞায়িত করুন, যা অ্যাক্টিভিটি চালু করে এবং নিম্নলিখিত উদাহরণে দেখানো অনুযায়ী ফলাফলও পরিচালনা করে। যদি ব্যবহারকারী কোনো প্রেডিকশন নির্বাচন করেন, তবে সেটি রেজাল্ট অবজেক্টের মধ্যে থাকা ইন্টেন্টে ডেলিভার করা হবে। যেহেতু ইন্টেন্টটি Autocomplete.IntentBuilder দ্বারা তৈরি করা হয়েছে, তাই Autocomplete.getPlaceFromIntent() মেথডটি এর থেকে Place অবজেক্টটি বের করে নিতে পারে।

কোটলিন

private val startAutocomplete =
    registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
        if (result.resultCode == RESULT_OK) {
            val intent = result.data
            if (intent != null) {
                val place = Autocomplete.getPlaceFromIntent(intent)
                binding.autocompleteResult.text = getString(
                    R.string.place_selection,
                    place.displayName,
                    place.id,
                    place.formattedAddress)
                Log.i(
                    TAG, "Place: ${place.displayName}, ${place.id}"
                )
            }
        } else if (result.resultCode == RESULT_CANCELED) {
            // The user canceled the operation.
            binding.autocompleteResult.setText(R.string.user_canceled_autocomplete)
            Log.i(TAG, "User canceled autocomplete")
        }
    }

      

জাভা

private final ActivityResultLauncher<Intent> startAutocomplete = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            if (result.getResultCode() == Activity.RESULT_OK) {
                Intent intent = result.getData();
                if (intent != null) {
                    Place place = Autocomplete.getPlaceFromIntent(intent);
                    binding.autocompleteResult.setText(
                            getString(
                                    R.string.place_selection,
                                    place.getDisplayName(),
                                    place.getId(),
                                    place.getFormattedAddress()
                            )
                    );
                    Log.i(TAG, "Place: " + place.getDisplayName() + ", " + place.getId());
                }
            } else if (result.getResultCode() == Activity.RESULT_CANCELED) {
                // The user canceled the operation.
                binding.autocompleteResult.setText(R.string.user_canceled_autocomplete);
                Log.i(TAG, "User canceled autocomplete");
            }
        });

      

প্রোগ্রামের মাধ্যমে স্থানের পূর্বাভাস পাওয়া

অটোকমপ্লিট উইজেট দ্বারা প্রদত্ত UI-এর বিকল্প হিসেবে আপনি একটি কাস্টম সার্চ UI তৈরি করতে পারেন। এটি করার জন্য, আপনার অ্যাপকে প্রোগ্রাম্যাটিকভাবে স্থানের পূর্বাভাস সংগ্রহ করতে হবে। আপনার অ্যাপ নিম্নলিখিত প্যারামিটারসহ একটি FindAutocompletePredictionsRequest অবজেক্ট পাস করে PlacesClient.findAutocompletePredictions() কল করার মাধ্যমে অটোকমপ্লিট API থেকে পূর্বাভাসিত স্থানের নাম এবং/অথবা ঠিকানার একটি তালিকা পেতে পারে:

  • আবশ্যক: ব্যবহারকারীর টাইপ করা টেক্সট সম্বলিত একটি query স্ট্রিং।
  • সুপারিশকৃত: একটি AutocompleteSessionToken , যা বিলিংয়ের উদ্দেশ্যে ব্যবহারকারীর অনুসন্ধানের কোয়েরি এবং নির্বাচন পর্যায়গুলোকে একটি পৃথক সেশনে একত্রিত করে। ব্যবহারকারী যখন কোয়েরি টাইপ করা শুরু করেন তখন সেশনটি শুরু হয় এবং যখন তিনি একটি স্থান নির্বাচন করেন তখন তা শেষ হয়।
  • সুপারিশকৃত: একটি RectangularBounds অবজেক্ট, যা ফলাফলকে নির্দিষ্ট অঞ্চলে সীমাবদ্ধ করার জন্য অক্ষাংশ এবং দ্রাঘিমাংশের সীমানা নির্ধারণ করে।
  • ঐচ্ছিক: এক বা একাধিক দুই-অক্ষরের দেশের কোড (আইএসও ৩১৬৬-১ আলফা-২), যা নির্দেশ করে যে ফলাফল কোন দেশ বা দেশগুলোতে সীমাবদ্ধ রাখা উচিত।
  • ঐচ্ছিক: একটি TypeFilter , যা ব্যবহার করে আপনি ফলাফলকে নির্দিষ্ট স্থানের ধরনে সীমাবদ্ধ করতে পারেন। নিম্নলিখিত স্থানের ধরনগুলো সমর্থিত:

    • TypeFilter.GEOCODE – ব্যবসার পরিবর্তে শুধুমাত্র জিওকোডিং ফলাফল ফেরত দেয়। যেখানে নির্দিষ্ট অবস্থানটি অনির্দিষ্ট হতে পারে, সেখানে ফলাফলগুলোর মধ্যে দ্ব্যর্থকতা দূর করতে এই অনুরোধটি ব্যবহার করুন।
    • TypeFilter.ADDRESS – শুধুমাত্র সুনির্দিষ্ট ঠিকানাসহ অটোকমপ্লিট ফলাফল ফেরত দেয়। যখন আপনি জানেন যে ব্যবহারকারী একটি সম্পূর্ণ নির্দিষ্ট ঠিকানা খুঁজছেন, তখন এই টাইপটি ব্যবহার করুন।
    • TypeFilter.ESTABLISHMENT – শুধুমাত্র ব্যবসায়িক স্থানগুলো ফেরত দেয়।
    • TypeFilter.REGIONS – শুধুমাত্র সেই স্থানগুলো ফেরত দেয় যেগুলো নিম্নলিখিত প্রকারগুলোর কোনো একটির সাথে মেলে:

    • LOCALITY

    • SUBLOCALITY

    • POSTAL_CODE

    • COUNTRY

    • ADMINISTRATIVE_AREA_LEVEL_1

    • ADMINISTRATIVE_AREA_LEVEL_2

    • TypeFilter.CITIES – শুধুমাত্র LOCALITY অথবা ADMINISTRATIVE_AREA_LEVEL_3 সাথে মেলে এমন ফলাফল ফেরত দেয়।

  • ঐচ্ছিক: অনুরোধের উৎসস্থল নির্দিষ্ট করার জন্য একটি LatLng । যখন আপনি setOrigin() কল করেন, তখন পরিষেবাটি প্রতিক্রিয়ার প্রতিটি অটোকমপ্লিট পূর্বাভাসের জন্য নির্দিষ্ট উৎসস্থল থেকে দূরত্ব মিটারে ( distanceMeters ) ফেরত দেয়।

স্থানের প্রকারভেদ সম্পর্কে তথ্যের জন্য, স্থানের প্রকারভেদ নির্দেশিকাটি দেখুন।

নিচের উদাহরণটিতে PlacesClient.findAutocompletePredictions() -এর একটি সম্পূর্ণ কল দেখানো হয়েছে।

কোটলিন

    // Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest,
    // and once again when the user makes a selection (for example when calling fetchPlace()).
    val token = AutocompleteSessionToken.newInstance()

    // Create a RectangularBounds object.
    val bounds = RectangularBounds.newInstance(
        LatLng(-33.880490, 151.184363),
        LatLng(-33.858754, 151.229596)
    )
    // Use the builder to create a FindAutocompletePredictionsRequest.
    val request =
        FindAutocompletePredictionsRequest.builder()
            // Call either setLocationBias() OR setLocationRestriction().
            .setLocationBias(bounds)
            //.setLocationRestriction(bounds)
            .setOrigin(LatLng(-33.8749937, 151.2041382))
            .setCountries("AU", "NZ")
            .setTypesFilter(listOf(PlaceTypes.ESTABLISHMENT))
            .setSessionToken(token)
            .setQuery(query)
            .build()
    placesClient.findAutocompletePredictions(request)
        .addOnSuccessListener { response: FindAutocompletePredictionsResponse ->
            val builder = StringBuilder()
            for (prediction in response.autocompletePredictions) {
                builder.append(prediction.getPrimaryText(null).toString()).append("\n")
                Log.i(TAG, prediction.placeId)
                Log.i(TAG, prediction.getPrimaryText(null).toString())
            }
            binding.autocompleteResult.text = builder.toString()
        }.addOnFailureListener { exception: Exception? ->
            if (exception is ApiException) {
                Log.e(TAG, "Place not found: ${exception.statusCode}")
                binding.autocompleteResult.text = getString(R.string.place_not_found, exception.message)
            }
        }

      

জাভা

    // Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest,
    // and once again when the user makes a selection (for example when calling fetchPlace()).
    AutocompleteSessionToken token = AutocompleteSessionToken.newInstance();

    // Create a RectangularBounds object.
    RectangularBounds bounds = RectangularBounds.newInstance(
            new LatLng(-33.880490, 151.184363),
            new LatLng(-33.858754, 151.229596));
    // Use the builder to create a FindAutocompletePredictionsRequest.
    FindAutocompletePredictionsRequest request = FindAutocompletePredictionsRequest.builder()
            // Call either setLocationBias() OR setLocationRestriction().
            .setLocationBias(bounds)
            //.setLocationRestriction(bounds)
            .setOrigin(new LatLng(-33.8749937, 151.2041382))
            .setCountries("AU", "NZ")
            .setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT))
            .setSessionToken(token)
            .setQuery(query)
            .build();

    placesClient.findAutocompletePredictions(request).addOnSuccessListener((response) -> {
        StringBuilder builder = new StringBuilder();
        for (AutocompletePrediction prediction : response.getAutocompletePredictions()) {
            builder.append(prediction.getPrimaryText(null).toString()).append("\n");
            Log.i(TAG, prediction.getPlaceId());
            Log.i(TAG, prediction.getPrimaryText(null).toString());
        }
        binding.autocompleteResult.setText(builder.toString());
    }).addOnFailureListener((exception) -> {
        if (exception instanceof ApiException apiException) {
            Log.e(TAG, "Place not found: " + apiException.getStatusCode());
            binding.autocompleteResult.setText(getString(R.string.place_not_found, apiException.getMessage()));
        }
    });

      

এপিআইটি একটি Task মধ্যে FindAutocompletePredictionsResponse রিটার্ন করে। FindAutocompletePredictionsResponse টিতে পূর্বাভাসিত স্থানগুলির প্রতিনিধিত্বকারী AutocompletePrediction অবজেক্টের একটি তালিকা থাকে। যদি কোয়েরি এবং ফিল্টার শর্তের সাথে সঙ্গতিপূর্ণ কোনো পরিচিত স্থান না থাকে, তাহলে তালিকাটি খালি থাকতে পারে।

প্রতিটি পূর্বাভাসিত স্থানের জন্য, আপনি স্থানের বিবরণ পুনরুদ্ধার করতে নিম্নলিখিত পদ্ধতিগুলি কল করতে পারেন:

  • getFullText(CharacterStyle) একটি স্থানের বিবরণের সম্পূর্ণ টেক্সট ফেরত দেয়। এটি মূল এবং দ্বিতীয় টেক্সটের একটি সংমিশ্রণ। উদাহরণ: " Eiffel Tower, Avenue Anatole France, Paris, France "। এছাড়াও, এই মেথডটি আপনাকে CharacterStyle ব্যবহার করে আপনার পছন্দের স্টাইল দিয়ে, সার্চের সাথে মিলে যাওয়া বিবরণের অংশগুলোকে হাইলাইট করার সুযোগ দেয়। CharacterStyle প্যারামিটারটি ঐচ্ছিক। যদি আপনার কোনো হাইলাইটিংয়ের প্রয়োজন না হয়, তবে এটিকে null সেট করুন।
  • getPrimaryText(CharacterStyle) কোনো স্থানের মূল বর্ণনা প্রদান করে। এটি সাধারণত স্থানটির নাম হয়ে থাকে। উদাহরণ: " আইফেল টাওয়ার ", এবং " ১২৩ পিট স্ট্রিট "।
  • getSecondaryText(CharacterStyle) কোনো স্থানের বিবরণের সহায়ক লেখাটি ফেরত দেয়। উদাহরণস্বরূপ, অটোকমপ্লিট প্রেডিকশন দেখানোর সময় দ্বিতীয় লাইন হিসেবে এটি বেশ উপযোগী। উদাহরণ: " Avenue Anatole France, Paris, France ", এবং " Sydney, New South Wales "।
  • getPlaceId() ফাংশনটি পূর্বাভাসিত স্থানের প্লেস আইডি ফেরত দেয়। প্লেস আইডি হলো একটি টেক্সচুয়াল আইডেন্টিফায়ার যা একটি স্থানকে অনন্যভাবে শনাক্ত করে, এবং যা ব্যবহার করে আপনি পরবর্তীতে Place অবজেক্টটি পুনরায় পেতে পারেন। অ্যান্ড্রয়েডের জন্য প্লেসেস এসডিকে-তে প্লেস আইডি সম্পর্কে আরও তথ্যের জন্য, প্লেস ডিটেইলস দেখুন। প্লেস আইডি সম্পর্কে সাধারণ তথ্যের জন্য, প্লেস আইডি ওভারভিউ দেখুন।
  • getPlaceTypes() এই স্থানের সাথে সংশ্লিষ্ট স্থানের প্রকারগুলোর তালিকা ফেরত দেয়।
  • getDistanceMeters() এই স্থান এবং অনুরোধে উল্লেখিত মূলবিন্দুর মধ্যেকার সরলরৈখিক দূরত্ব মিটারে ফেরত দেয়।

সেশন টোকেন

বিলিংয়ের উদ্দেশ্যে, সেশন টোকেন ব্যবহারকারীর অটোকমপ্লিট সার্চের কোয়েরি এবং সিলেকশন পর্যায়গুলোকে একটি পৃথক সেশনে একত্রিত করে। ব্যবহারকারী যখন কোনো কোয়েরি টাইপ করা শুরু করেন, তখন সেশনটি শুরু হয় এবং যখন তিনি কোনো স্থান নির্বাচন করেন, তখন তা শেষ হয়। প্রতিটি সেশনে একাধিক কোয়েরি এবং তার পরে একটি স্থান নির্বাচন থাকতে পারে। একটি সেশন শেষ হয়ে গেলে টোকেনটি আর বৈধ থাকে না; আপনার অ্যাপকে প্রতিটি সেশনের জন্য একটি নতুন টোকেন তৈরি করতে হবে। আমরা সমস্ত প্রোগ্রাম্যাটিক অটোকমপ্লিট সেশনের জন্য সেশন টোকেন ব্যবহার করার পরামর্শ দিই (যখন আপনি একটি ফ্র্যাগমেন্ট এমবেড করেন, বা একটি ইন্টেন্ট ব্যবহার করে অটোকমপ্লিট চালু করেন, তখন এপিআই স্বয়ংক্রিয়ভাবে এর যত্ন নেয়)।

অ্যান্ড্রয়েডের জন্য প্লেসেস এসডিকে প্রতিটি সেশন শনাক্ত করতে একটি AutocompleteSessionToken ব্যবহার করে। আপনার অ্যাপের উচিত প্রতিটি নতুন সেশন শুরু করার সময় একটি নতুন সেশন টোকেন পাঠানো, এবং তারপর ব্যবহারকারীর দ্বারা নির্বাচিত স্থানটির বিবরণ পুনরুদ্ধার করার জন্য fetchPlace() ফাংশনের পরবর্তী কলে সেই একই টোকেনটি একটি প্লেস আইডি-র সাথে পাঠানো।

সেশন টোকেন সম্পর্কে আরও জানুন

স্বয়ংক্রিয় সম্পূর্ণতার ফলাফল সীমাবদ্ধ করুন

আপনি অটোকমপ্লিট ফলাফলকে একটি নির্দিষ্ট ভৌগোলিক অঞ্চলে সীমাবদ্ধ করতে পারেন, এবং/অথবা ফলাফলকে এক বা একাধিক স্থানের ধরণ বা সর্বোচ্চ পাঁচটি দেশে ফিল্টার করতে পারেন। আপনি এই সীমাবদ্ধতাগুলো অটোকমপ্লিট অ্যাক্টিভিটি, AutocompleteSupportFragment এবং প্রোগ্রাম্যাটিক অটোকমপ্লিট API-গুলোতে প্রয়োগ করতে পারেন।

ফলাফল সীমিত করতে, নিম্নলিখিতগুলি করুন:

  • নির্ধারিত অঞ্চলের মধ্যে ফলাফলকে অগ্রাধিকার দিতে , setLocationBias() কল করুন (নির্ধারিত অঞ্চলের বাইরে থেকেও কিছু ফলাফল ফেরত আসতে পারে)।
  • শুধুমাত্র নির্ধারিত অঞ্চলের মধ্যে ফলাফল দেখানোর জন্য, setLocationRestriction() কল করুন (শুধুমাত্র নির্ধারিত অঞ্চলের ভেতরের ফলাফলই ফেরত দেওয়া হবে)।
  • শুধুমাত্র একটি নির্দিষ্ট স্থানের ধরণ অনুযায়ী ফলাফল পেতে, setTypesFilter() কল করুন (উদাহরণস্বরূপ, TypeFilter.ADDRESS উল্লেখ করলে শুধুমাত্র সুনির্দিষ্ট ঠিকানাসহ ফলাফল পাওয়া যাবে)।
  • সর্বোচ্চ পাঁচটি নির্দিষ্ট দেশের মধ্যে ফলাফল পেতে setCountries() কল করুন। দেশগুলোকে অবশ্যই দুই অক্ষরের, ISO 3166-1 Alpha-2 সামঞ্জস্যপূর্ণ দেশের কোড হিসেবে পাস করতে হবে।

একটি নির্দিষ্ট অঞ্চলে ফলাফল পক্ষপাতদুষ্ট হয়।

অটোকমপ্লিট ফলাফলকে একটি নির্দিষ্ট ভৌগোলিক অঞ্চলের দিকে পক্ষপাতদুষ্ট করতে, একটি RectangularBounds পাস করে setLocationBias() কল করুন। নিম্নলিখিত কোড উদাহরণটি একটি fragment ইনস্ট্যান্সে setLocationBias() কল করে তার অটোকমপ্লিট সাজেশনগুলোকে অস্ট্রেলিয়ার সিডনি অঞ্চলের দিকে পক্ষপাতদুষ্ট করার পদ্ধতি দেখাচ্ছে।

কোটলিন

        autocompleteFragment.setLocationBias(bounds)

      

জাভা

        autocompleteFragment.setLocationBias(
                RectangularBounds.newInstance(
                        new LatLng(-33.880490, 151.184363),
                        new LatLng(-33.858754, 151.229596)
                )
        );

      

ফলাফল একটি নির্দিষ্ট অঞ্চলে সীমাবদ্ধ করুন

অটোকমপ্লিট ফলাফল একটি নির্দিষ্ট ভৌগোলিক অঞ্চলে সীমাবদ্ধ করতে, একটি RectangularBounds পাস করে setLocationRestriction() কল করুন। নিম্নলিখিত কোড উদাহরণটি একটি fragment ইনস্ট্যান্সে setLocationRestriction() কল করে তার অটোকমপ্লিট সাজেশনগুলোকে অস্ট্রেলিয়ার সিডনি অঞ্চলের দিকে পক্ষপাতদুষ্ট করার পদ্ধতি দেখাচ্ছে।

কোটলিন

        autocompleteFragment.setLocationRestriction(bounds)

      

জাভা

        autocompleteFragment.setLocationRestriction(
                RectangularBounds.newInstance(
                        new LatLng(-33.880490, 151.184363),
                        new LatLng(-33.858754, 151.229596)
                )
        );

      

দ্রষ্টব্য: এই সীমাবদ্ধতা শুধুমাত্র সম্পূর্ণ রুটের ক্ষেত্রেই প্রযোজ্য; আয়তক্ষেত্রাকার সীমার বাইরে অবস্থিত সংশ্লেষিত ফলাফল এমন কোনো রুটের উপর ভিত্তি করে ফেরত দেওয়া হতে পারে যা অবস্থানগত সীমাবদ্ধতার সাথে ওভারল্যাপ করে।

স্থানের ধরণ বা প্রকার সংগ্রহ অনুযায়ী ফলাফল ফিল্টার করুন

আপনি অটোকমপ্লিট অনুরোধের ফলাফল সীমাবদ্ধ করতে পারেন, যাতে কেবল একটি নির্দিষ্ট ধরনের স্থানই প্রদর্শিত হয়। 'স্থানের প্রকারভেদ' অংশের সারণি ১, ২ এবং ৩-এ তালিকাভুক্ত স্থানের প্রকারভেদ বা কোনো প্রকারভেদ সংগ্রহ ব্যবহার করে একটি ফিল্টার নির্দিষ্ট করুন। যদি কিছু নির্দিষ্ট না করা হয়, তবে সব ধরনের ফলাফলই প্রদর্শিত হবে।

অটোকমপ্লিট ফলাফল ফিল্টার করতে, ফিল্টারটি সেট করার জন্য setTypesFilter() কল করুন।

একটি প্রকার বা প্রকার সংগ্রহ ফিল্টার নির্দিষ্ট করতে:

  • setTypesFilter() কল করুন এবং Place Types- এ দেখানো টেবিল ১ ও টেবিল ২ থেকে সর্বোচ্চ পাঁচটি টাইপ ভ্যালু নির্দিষ্ট করুন। টাইপ ভ্যালুগুলো PlaceTypes এর কনস্ট্যান্ট দ্বারা সংজ্ঞায়িত করা হয়।

  • setTypesFilter() কল করুন এবং Place Types- এ দেখানো টেবিল ৩ থেকে একটি টাইপ কালেকশন নির্দিষ্ট করুন। কালেকশনের মানগুলো PlaceTypes এর কনস্ট্যান্ট দ্বারা সংজ্ঞায়িত করা হয়।

    অনুরোধে টেবিল ৩ থেকে শুধুমাত্র একটি প্রকারের অনুমতি আছে। আপনি যদি টেবিল ৩ থেকে কোনো মান নির্দিষ্ট করেন, তাহলে আপনি টেবিল ১ বা টেবিল ২ থেকে কোনো মান নির্দিষ্ট করতে পারবেন না। যদি তা করেন, তাহলে একটি ত্রুটি ঘটবে।

নিম্নলিখিত কোড উদাহরণটি একটি AutocompleteSupportFragment উপর setTypesFilter() কল করে এবং একাধিক টাইপ ভ্যালু নির্দিষ্ট করে।

কোটলিন

    autocompleteFragment.setTypesFilter(listOf("landmark", "restaurant", "store"))

      

জাভা

    autocompleteFragment.setTypesFilter(List.of("landmark", "restaurant", "store"));

      

নিম্নলিখিত কোড উদাহরণটি একটি টাইপ কালেকশন নির্দিষ্ট করে শুধুমাত্র একটি সুনির্দিষ্ট ঠিকানা সহ ফলাফল ফেরত দেওয়ার জন্য একটি ফিল্টার সেট করতে, একটি AutocompleteSupportFragment এর উপর setTypesFilter() কল করা দেখাচ্ছে।

কোটলিন

    autocompleteFragment.setTypesFilter(listOf(PlaceTypes.ADDRESS))

      

জাভা

    autocompleteFragment.setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT));

      

নিম্নলিখিত কোড উদাহরণটি একটি টাইপ কালেকশন নির্দিষ্ট করে, একটি সুনির্দিষ্ট ঠিকানাসহ ফলাফল ফেরত দেওয়ার জন্য একটি ফিল্টার সেট করতে IntentBuildersetTypesFilter() কল করা দেখাচ্ছে।

কোটলিন

    val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
        .setTypesFilter(listOf(PlaceTypes.ESTABLISHMENT))
        .build(this)

      

জাভা

    Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
            .setTypesFilter(List.of(PlaceTypes.ESTABLISHMENT))
            .build(this);

      

দেশ অনুযায়ী ফলাফল ফিল্টার করুন

অটোকমপ্লিট ফলাফল থেকে সর্বোচ্চ পাঁচটি দেশ ফিল্টার করতে, দেশের কোড সেট করার জন্য setCountries() কল করুন। এরপর, ফিল্টারটি একটি fragment বা intent-এ পাস করুন। দেশগুলোকে অবশ্যই দুই অক্ষরের, ISO 3166-1 Alpha-2 সামঞ্জস্যপূর্ণ দেশের কোড হিসেবে পাস করতে হবে।

নিম্নলিখিত কোড উদাহরণটিতে একটি AutocompleteSupportFragment এর উপর setCountries() কল করার পদ্ধতি দেখানো হয়েছে, যা শুধুমাত্র নির্দিষ্ট দেশগুলোর ফলাফল ফেরত দেওয়ার জন্য একটি ফিল্টার সেট করে।

কোটলিন

    autocompleteFragment.setCountries("AU", "NZ")

      

জাভা

    autocompleteFragment.setCountries("AU", "NZ");

      

ব্যবহারের সীমা

অ্যান্ড্রয়েডের জন্য প্লেসেস এসডিকে সহ প্লেসেস এপিআই-এর আপনার ব্যবহার এখন আর দৈনিক সর্বোচ্চ সংখ্যক অনুরোধ (কিউপিডি) দ্বারা সীমাবদ্ধ নয়। তবে, নিম্নলিখিত ব্যবহারের সীমাবদ্ধতাগুলি এখনও প্রযোজ্য:

  • রেট লিমিট হলো প্রতি মিনিটে ৬,০০০ অনুরোধ (QPM)। একই প্রজেক্টের ক্রেডেনশিয়াল ব্যবহারকারী সমস্ত অ্যাপ্লিকেশনের ক্লায়েন্ট-সাইড এবং সার্ভার-সাইড অনুরোধের সমষ্টি হিসাবে এটি গণনা করা হয়।

আপনার অ্যাপে অ্যাট্রিবিউশন প্রদর্শন করুন

  • আপনার অ্যাপ যদি প্রোগ্রাম্যাটিকভাবে অটোকমপ্লিট পরিষেবা ব্যবহার করে, তাহলে আপনার UI-তে অবশ্যই 'Powered by Google' অ্যাট্রিবিউশন প্রদর্শন করতে হবে, অথবা এটি একটি গুগল-ব্র্যান্ডেড ম্যাপের মধ্যে প্রদর্শিত হতে হবে।
  • আপনার অ্যাপ যদি অটোকমপ্লিট উইজেট ব্যবহার করে, তাহলে অতিরিক্ত কোনো পদক্ষেপের প্রয়োজন নেই (প্রয়োজনীয় অ্যাট্রিবিউশন ডিফল্টরূপে প্রদর্শিত হয়)।
  • আইডি দ্বারা কোনো স্থান পাওয়ার পর যদি আপনি সেই স্থানের অতিরিক্ত তথ্য সংগ্রহ ও প্রদর্শন করেন, তবে আপনাকে তৃতীয় পক্ষের কৃতিত্বও প্রদর্শন করতে হবে।

আরও বিস্তারিত জানতে, অ্যাট্রিবিউশন সম্পর্কিত ডকুমেন্টেশন দেখুন।

স্থান স্বয়ংসম্পূর্ণতা (লেগ্যাসি) অপ্টিমাইজেশন

এই বিভাগে প্লেস অটোকমপ্লিট (লেগ্যাসি) পরিষেবাটির সর্বোত্তম ব্যবহার নিশ্চিত করার জন্য সেরা অনুশীলনগুলো বর্ণনা করা হয়েছে।

এখানে কিছু সাধারণ নির্দেশিকা দেওয়া হল:

  • একটি কার্যকরী ইউজার ইন্টারফেস তৈরি করার সবচেয়ে দ্রুত উপায় হলো 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 প্যারামিটারটি নির্দিষ্ট করে দিন।

প্রোগ্রাম্যাটিক বাস্তবায়ন
আপনার প্লেস অটোকমপ্লিট (লেগ্যাসি) অনুরোধের সাথে একটি সেশন টোকেন ব্যবহার করুন। নির্বাচিত প্রেডিকশন সম্পর্কে প্লেস ডিটেইলস (লেগ্যাসি) অনুরোধ করার সময়, নিম্নলিখিত প্যারামিটারগুলো অন্তর্ভুক্ত করুন:

  1. প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রতিক্রিয়া থেকে প্রাপ্ত স্থানের আইডি
  2. প্লেস অটোকমপ্লিট (লেগ্যাসি) অনুরোধে ব্যবহৃত সেশন টোকেন
  3. fields প্যারামিটারটি আপনার প্রয়োজনীয় প্লেস অটোকমপ্লিট (লেগ্যাসি) ডেটা ফিল্ডগুলি নির্দিষ্ট করে।

না, শুধু ঠিকানা ও অবস্থান প্রয়োজন।

আপনার অ্যাপ্লিকেশনের জন্য প্লেস অটোকমপ্লিট (লেগ্যাসি) ব্যবহারের পারফরম্যান্সের উপর নির্ভর করে, জিওকোডিং এপিআই প্লেস ডিটেইলস (লেগ্যাসি)-এর চেয়ে বেশি সাশ্রয়ী বিকল্প হতে পারে। প্রতিটি অ্যাপ্লিকেশনের প্লেস অটোকমপ্লিট (লেগ্যাসি)-এর কার্যকারিতা নির্ভর করে ব্যবহারকারীরা কী তথ্য প্রবেশ করাচ্ছেন, অ্যাপ্লিকেশনটি কোথায় ব্যবহার করা হচ্ছে এবং পারফরম্যান্স অপ্টিমাইজেশনের সেরা অনুশীলনগুলো প্রয়োগ করা হয়েছে কিনা তার উপর।

নিম্নলিখিত প্রশ্নের উত্তর দেওয়ার জন্য, আপনার অ্যাপ্লিকেশনে একটি প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রেডিকশন নির্বাচন করার আগে একজন ব্যবহারকারী গড়ে কতগুলি অক্ষর টাইপ করেন তা বিশ্লেষণ করুন।

আপনার ব্যবহারকারীরা কি গড়ে চার বা তার কম অনুরোধে একটি প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রেডিকশন নির্বাচন করেন?

হ্যাঁ

সেশন টোকেন ছাড়াই প্রোগ্রাম্যাটিকভাবে প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রয়োগ করুন এবং নির্বাচিত স্থানের পূর্বাভাসের উপর জিওকোডিং এপিআই কল করুন।
জিওকোডিং এপিআই ঠিকানা এবং অক্ষাংশ/দ্রাঘিমাংশের স্থানাঙ্ক সরবরাহ করে। চারটি অটোকমপ্লিট - পার রিকোয়েস্ট অনুরোধ এবং নির্বাচিত স্থানের পূর্বাভাস সম্পর্কে একটি জিওকোডিং এপিআই কল করার খরচ, প্রতি সেশনের প্লেস অটোকমপ্লিট (লেগ্যাসি) খরচের চেয়ে কম

আপনার ব্যবহারকারীদের আরও কম অক্ষরের মধ্যে তাদের কাঙ্ক্ষিত পূর্বাভাস পেতে সাহায্য করার জন্য পারফরম্যান্সের সেরা অনুশীলনগুলো প্রয়োগ করার কথা বিবেচনা করুন।

না

প্লেস ডিটেইলস (লেগ্যাসি)-এর সাথে সেশন-ভিত্তিক প্লেস অটোকমপ্লিট (লেগ্যাসি) ব্যবহার করুন।
যেহেতু একজন ব্যবহারকারী একটি প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রেডিকশন নির্বাচন করার আগে আপনার প্রত্যাশিত গড় অনুরোধের সংখ্যা প্রতি-সেশন মূল্যের খরচকে ছাড়িয়ে যায়, তাই আপনার প্লেস অটোকমপ্লিট (লেগ্যাসি) বাস্তবায়নে প্রতি সেশনে প্লেস অটোকমপ্লিট (লেগ্যাসি) অনুরোধ এবং সংশ্লিষ্ট প্লেস ডিটেইলস (লেগ্যাসি) অনুরোধ উভয়ের জন্যই একটি সেশন টোকেন ব্যবহার করা উচিত

উইজেট বাস্তবায়ন
জাভাস্ক্রিপ্ট , অ্যান্ড্রয়েড বা আইওএস উইজেটগুলিতে সেশন ম্যানেজমেন্ট স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত থাকে। এর মধ্যে নির্বাচিত প্রেডিকশনের প্লেস অটোকমপ্লিট (লেগ্যাসি) রিকোয়েস্ট এবং প্লেস ডিটেইলস (লেগ্যাসি) রিকোয়েস্ট উভয়ই অন্তর্ভুক্ত। আপনি যেন শুধুমাত্র আপনার প্রয়োজনীয় ফিল্ডগুলোর জন্যই রিকোয়েস্ট করেন, তা নিশ্চিত করতে fields প্যারামিটারটি নির্দিষ্ট করে দিন।

প্রোগ্রাম্যাটিক বাস্তবায়ন
আপনার প্লেস অটোকমপ্লিট (লেগ্যাসি) অনুরোধের সাথে একটি সেশন টোকেন ব্যবহার করুন। নির্বাচিত প্রেডিকশন সম্পর্কে প্লেস ডিটেইলস (লেগ্যাসি) অনুরোধ করার সময়, নিম্নলিখিত প্যারামিটারগুলো অন্তর্ভুক্ত করুন:

  1. প্লেস অটোকমপ্লিট (লেগ্যাসি) প্রতিক্রিয়া থেকে প্রাপ্ত স্থানের আইডি
  2. প্লেস অটোকমপ্লিট (লেগ্যাসি) অনুরোধে ব্যবহৃত সেশন টোকেন
  3. 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) দেখুন।

অটোকমপ্লিট কন্ট্রোল ব্যবহারে যে ত্রুটিগুলো ঘটে, তা onActivityResult() কলব্যাকে ফেরত দেওয়া হয়। ফলাফলের স্ট্যাটাস মেসেজ পেতে Autocomplete.getStatus() কল করুন।