Nav SDK-এর মাধ্যমে মোবাইল সম্পদ ট্র্যাক করতে জিওফেন্সেস ক্লায়েন্ট-সাইড ট্রিগার করুন

এই নথিটি বর্ণনা করে ক্লায়েন্ট-সাইড জিওফেন্সিং কী, কখন এটি ব্যবহার করতে হবে এবং মোবাইল অ্যাপ্লিকেশনে কেস ব্যবহারের জন্য এটি কীভাবে প্রয়োগ করতে হবে। এটি Google নেভিগেশন SDK ব্যবহার করে অ্যান্ড্রয়েডে একটি উদাহরণ কীভাবে প্রয়োগ করতে হয় তাও দেখায়।

জিওফেন্স সনাক্তকরণ সহ Nav SDK
জিওফেন্স সনাক্তকরণ সহ Nav SDK

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

যখন একটি নির্দিষ্ট যানবাহন একটি সীমানা অতিক্রম করে তা বোঝা একাধিক ব্যবহারের ক্ষেত্রে গুরুত্বপূর্ণ যেমন:

  • গ্রাহকের সম্পৃক্ততা : ব্যবসা বিশেষ অফার, ইভেন্ট বা নতুন পণ্য সম্পর্কে শেষ ব্যবহারকারীদের পুশ বিজ্ঞপ্তি পাঠাতে জিওফেন্সিং ব্যবহার করতে পারে।
  • নিরাপত্তা এবং নিরাপত্তা : ব্যবসাগুলি সংবেদনশীল এলাকার আশেপাশে ভার্চুয়াল পরিধি তৈরি করতে জিওফেন্সিং ব্যবহার করতে পারে, যেমন ডেটা সেন্টার বা গুদাম, এবং কেউ যদি এলাকায় প্রবেশ করে বা চলে যায় তবে নিরাপত্তা কর্মীদের সতর্ক করতে পারে।
  • পরিবহন : ব্যবসাগুলি যানবাহনের অবস্থান ট্র্যাক করতে এবং রুট এবং সময়সূচী অপ্টিমাইজ করতে জিওফেন্সিং ব্যবহার করতে পারে।

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

ব্যাপ্তি

এই নথিটি জিওফেন্সিংয়ের ক্লায়েন্ট-সাইড বাস্তবায়নের উপর দৃষ্টি নিবদ্ধ করে। এর মানে হল যে ক্লায়েন্ট অ্যাপের অবশ্যই থাকতে হবে:

  1. বহুভুজ এটি লঙ্ঘনের বিরুদ্ধে পরীক্ষা করা প্রয়োজন;
  2. ব্যবহারকারীর রিয়েল-টাইম অবস্থান
  3. বর্তমান অবস্থানটি বহুভুজের ভিতরে বা বাইরে আছে কিনা তা পরীক্ষা করার জন্য যুক্তি।

এই গাইডটিতে Android এর উদাহরণ রয়েছে কিন্তু iOS-এ এটি সম্পন্ন করার সমতুল্য উপায় রয়েছে। অ্যান্ড্রয়েড লোকেশন সার্ভিসে বৃত্তাকার জিওফেন্সের জন্য একটি অন্তর্নির্মিত বাস্তবায়ন রয়েছে যা এখানে দেখা যেতে পারে। নীচের রেফারেন্স কোড এবং বিবরণ আরও জটিল বাস্তবায়নের জন্য একটি সূচনা বিন্দু।

নেভিগেশন SDK হল একটি নেটিভ অ্যান্ড্রয়েড/আইওএস লাইব্রেরি যা ড্রাইভার অ্যাপে যোগ করা হয়েছে। এটি এর জন্য দায়ী:

  • এটি চালানো অ্যাপ থেকে রাস্তার স্ন্যাপ করা অবস্থানগুলি প্রাপ্ত করা। এটি অ্যান্ড্রয়েডের FusedLocationProvider (FLP) থেকে আরও সুনির্দিষ্ট কারণ এটি Google এর রোড নেটওয়ার্ক ব্যবহার করে কাছের রাস্তার অংশে অবস্থানগুলি স্ন্যাপ করে যা ETAকে অনেক বেশি নির্ভুল করে তোলে এবং FLP থেকে অন্যান্য তথ্য।
  • টার্ন-বাই-টার্ন অভিজ্ঞতা যা ড্রাইভারদের রিয়েল-টাইম ট্র্যাফিক এবং অন্যান্য রুট সীমাবদ্ধতা বিবেচনা করে পয়েন্ট A থেকে পয়েন্ট B পর্যন্ত দক্ষতার সাথে যেতে দেয়।
  • ইভেন্ট শ্রোতা এবং নিবন্ধিত কলব্যাকের মাধ্যমে ইভেন্ট ফায়ারিং।

শ্রোতারা

নেভিগেশন SDK-এর অনেক শ্রোতা রয়েছে যা আপনি ব্যবহার করতে পারেন। কয়েকটি নাম বলতে:

  • RoadSnappedLocation প্রদানকারীর মাধ্যমে অবস্থান পরিবর্তন।
  • ReroutingListener- এর মাধ্যমে ইভেন্টগুলি (ব্যবহারকারী ইউ-টার্ন, বাম মোড়, ইত্যাদি মিস করে এবং প্রস্তাবিত রুট থেকে বিচ্যুত)।
  • ArrivalListener এর মাধ্যমে আগমনের ঘটনা (ব্যবহারকারী পরিকল্পিত গন্তব্যে পৌঁছান)।
  • অবশিষ্ট দূরত্ব এবং ETA ইভেন্টগুলি (চালক যখন গন্তব্যে পৌঁছাতে চলেছেন তখন বিজ্ঞপ্তি পান - মিটারের উপর ভিত্তি করে, ড্রাইভার যখন গন্তব্যে পৌঁছতে চলেছে তখন বিজ্ঞপ্তি পান - সময়ের উপর ভিত্তি করে) উভয়ই এর মাধ্যমে উপলব্ধ। RemainingTimeOrDistanceChangedListener

এই গাইডে শুধুমাত্র RoadSnappedLocation প্রদানকারী এবং এর LocationListener ব্যবহার করা হয়েছে।

ক্লায়েন্ট সাইড জিওফেন্সিং সমাধান

এখন আসুন একটি ক্লায়েন্ট সাইড জিওফেন্সিং ক্ষমতা তৈরির মাধ্যমে পদক্ষেপ নেওয়া যাক। নীচের উদাহরণে আমাদের ন্যাভিগেশন SDK টার্ন-বাই-টার্ন মোডে কাজ করে এবং আমাদের জিওফেন্সের প্রতিনিধিত্বকারী রুটে সংজ্ঞায়িত একটি বহুভুজ রয়েছে।

কার্যকরী চিত্র
কার্যকরী চিত্র

  1. Geofences BigQuery-এ সংরক্ষিত হয় এবং আপনার ব্যাকএন্ড দ্বারা টানা হয়।
  2. ব্যাকএন্ড পর্যায়ক্রমে জিওফেন্সগুলিকে ড্রাইভ অ্যাপগুলিতে পুশ করে।
  3. ড্রাইভার নেভিগেট করে এবং ড্রাইভার অ্যাপ নিয়মিতভাবে একটি ট্রিগারের জন্য জিওফেন্সগুলি পরীক্ষা করে।
  4. ড্রাইভার অ্যাপটি একটি ট্রিগার ইভেন্টের ব্যাকএন্ডকে অবহিত করে যাতে এটি কাজ করতে পারে।

যানবাহনটি রুটে চলার সাথে সাথে, অ্যাপটি নিয়মিত পরীক্ষা করে যে বহুভুজ লঙ্ঘন হয়েছে কিনা। অ্যাপটি যখন শনাক্ত করে যে এটি একটি জিওফেন্স অতিক্রম করেছে তখন UI-তে একটি বার্তা প্রদর্শিত হয় যা বলে: Geofence breached .

Android-Maps-Utils-এর জন্য নির্ভরতা কনফিগার করুন

এই সমাধানটি অ্যান্ড্রয়েড-ম্যাপস-ইউটিলস ব্যবহার করে, একটি ওপেন-সোর্স লাইব্রেরি যেখানে ইউটিলিটি রয়েছে যা Google ম্যাপ অ্যান্ড্রয়েড API ব্যবহার করে বিস্তৃত অ্যাপ্লিকেশনের জন্য দরকারী।

এই লাইব্রেরিটি সর্বজনীন এবং গিথুবে হোস্ট করা হয়েছে এবং এখানে অ্যাক্সেস করা যেতে পারে:

  • অ্যান্ড্রয়েড : https://github.com/googlemaps/android-maps-utils
  • iOS : https://github.com/googlemaps/google-maps-ios-utils

আপনার অ্যান্ড্রয়েড অ্যাপে (এই নথির সুযোগ) এই লাইব্রেরিটি অন্তর্ভুক্ত করতে, এটি অন্তর্ভুক্ত করতে আপনার build.gradle ফাইলটি সংশোধন করা উচিত। মনে রাখবেন এই build.gradle ফাইলটি আপনি যে মডিউল (অ্যাপ) তৈরি করছেন তার জন্য, প্রকল্প স্তরে নয়।

dependencies {
   ...
   // Utilities for Maps SDK for Android (requires Google Play Services)
   implementation 'com.google.maps.android:android-maps-utils:2.3.0'
}

তারপর, আপনি আপনার সর্বশেষ build.gradle ফাইলের সাথে Gradle সিঙ্ক করার পরে, আপনি আপনার Java ফাইলে com.google.maps.android.PolyUtil আমদানি করতে পারেন:

import com.google.android.gms.maps.model.PolygonOptions;
import com.google.maps.android.PolyUtil;

আপনার Geofences সংজ্ঞায়িত করুন

উল্লেখ্য যে এখানেও PolygonOptions আমদানি করা হচ্ছে। কারণ হল যে এটি বহুভুজ প্রতিনিধিত্ব করতে ব্যবহৃত হচ্ছে:

mPolygonOptions = new PolygonOptions()
       .add(new LatLng(29.4264525,-98.4948758))
       .add(new LatLng(29.4267029,-98.4948758))
       .add(new LatLng(29.4273742,-98.4945822))
       .add(new LatLng(29.4264562,-98.4943592))
       .fillColor(0x0000ff36)
       .strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
       .strokeColor(Color.BLUE)
       .strokeWidth(5);

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

PolygonOptions এ কী নির্দিষ্ট করা যেতে পারে সে সম্পর্কে আরও বিশদ বিবরণের জন্য অনুগ্রহ করে এখানে চেক করুন।

আপনার ফ্র্যাগমেন্ট বা ক্রিয়াকলাপ তৈরি করার সময় আপনার বহুভুজ (গুলি) সংজ্ঞায়িত করা উচিত। উদাহরণ স্বরূপ:

protected void onCreate(Bundle savedInstanceState) {
   ...
   mPolygonOptions = new PolygonOptions()
           .add(new LatLng(29.4264525,-98.4948758))
           .add(new LatLng(29.4267029,-98.4948758))
           .add(new LatLng(29.4273742,-98.4945822))
           .add(new LatLng(29.4264562,-98.4943592))
           .fillColor(0x0000ff36)
           .strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
           .strokeColor(Color.BLUE)
           .strokeWidth(5);

   ...// more code here
}

অবস্থান আপডেটের জন্য শুনুন

আপনার জিওফেন্সগুলি সংজ্ঞায়িত করার পরে আপনাকে RoadSnappedLocationProvider নামক নেভিগেশন SDK-এ পূর্বোক্ত ইভেন্টে সদস্যতা নিতে একটি অবস্থান আপডেট শ্রোতা তৈরি করতে হবে যা ডিভাইসের সর্বশেষ অবস্থান ফিরিয়ে দেবে।

mLocListener = new RoadSnappedLocationProvider.LocationListener() {
   @Override
   public void onLocationChanged(Location snapped) {
       LatLng snappedL = new LatLng(snapped.getLatitude(), snapped.getLongitude());
       if(PolyUtil.containsLocation(snappedL, mPolygonOptions.getPoints(), true) && !mGeofenceBreached){
           Log.d("Geofence", "Vehicle has breached the polygon");
       }
   }
   @Override
   public void onRawLocationUpdate(Location location) {
   }
};

Android-Maps-Utils-এর সাহায্যে আপনি PolyUtil.containsLocation ব্যবহার করে প্রাপ্ত অবস্থানটি পূর্বনির্ধারিত বহুভুজের মধ্যে আছে কিনা তা পরীক্ষা করতে পারেন। পূর্বনির্ধারিত বহুভুজের নীচের উদাহরণে, জিওফেন্সের প্রতিনিধিত্ব করে, ব্যবহার করা হয় তবে অনুশীলনে আপনার একাধিক বহুভুজ থাকতে পারে এবং একটি লুপের প্রয়োজন হবে।

একটি বিকল্প পদ্ধতি

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

এর মানে হল যে অ্যাপটি একটি ব্যাকএন্ডে অবস্থানের আপডেটগুলি রিপোর্ট করবে এবং এই ব্যাকএন্ডটি তারপর পরীক্ষা করবে যে গাড়িটি একটি নির্দিষ্ট বহুভুজ লঙ্ঘন করেছে কিনা, এইভাবে বৈধকরণের জন্য ক্লায়েন্ট অ্যাপের উপর নির্ভর করে না।

একটি সম্ভাব্য সমাধান নিম্নরূপ হবে:

[এক্সিকিউশন এনভায়রনমেন্ট] সার্ভার সাইড জিওফেন্সিং আর্কিটেকচার

একটি উদাহরণ আর্কিটেকচার যা জিওফেন্সিংয়ের সার্ভার সাইড পদ্ধতির প্রদর্শন করে।

সার্ভার-সাইড সমাধান
সার্ভার-সাইড সমাধান

  1. ড্রাইভার অ্যাপ, ড্রাইভার SDK ব্যবহার করে, ফ্লিট ইঞ্জিনে অবস্থান আপডেট পাঠায়। ন্যাভিগেশন SDK-এর মাধ্যমে লোকেশন আপডেট এবং অ্যাপ-মধ্যস্থ নেভিগেশন ঘটে।
  2. ফ্লিট ইঞ্জিন সেই আপডেটগুলিকে ক্লাউড লগিং বা পাব/সাব-এ আউটপুট করে।
  3. ব্যাকএন্ড সেই অবস্থান সংকেত সংগ্রহ করে।
  4. জিওফেনসগুলি ব্যাকএন্ড দ্বারা বিশ্লেষণের জন্য বিগ কোয়েরিতে সংরক্ষণ করা হয়।
  5. জিওফেন্স ট্রিগার করার পরে, ড্রাইভার অ্যাপে সতর্কতা পাঠানো হয়।

এই আর্কিটেকচারে, ড্রাইভার SDK এবং ফ্লিট ইঞ্জিন ব্যবহার করা হয়। ফ্লিট ইঞ্জিন PubSub আপডেট নির্গত করতে পারে এবং ক্লাউড লগিং-এ লগ এন্ট্রি তৈরি করতে পারে। উভয় ক্ষেত্রে, গাড়ির অবস্থান পুনরুদ্ধার করা যেতে পারে।

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

উপসংহার

জিওফেন্সিং একটি শক্তিশালী টুল যা বিভিন্ন উদ্দেশ্যে ব্যবহার করা যেতে পারে। ব্যবসাগুলি প্রাসঙ্গিক বিজ্ঞাপন এবং প্রচারের মাধ্যমে শেষ ব্যবহারকারীদের লক্ষ্য করতে, অবস্থান-ভিত্তিক পরিষেবা প্রদান করতে এবং নিরাপত্তা ও নিরাপত্তা উন্নত করতে জিওফেন্সিং ব্যবহার করতে পারে।

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

পরবর্তী অ্যাকশন

প্রস্তাবিত আরও পড়ার: