Android এর জন্য ড্রাইভার SDK দিয়ে শুরু করা

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

ড্রাইভার SDK ফ্লিট ইঞ্জিন পরিষেবা এবং আপনার কাস্টম পরিষেবাগুলিকে গাড়ির অবস্থান এবং অবস্থা সম্পর্কে সচেতন রাখে৷ উদাহরণস্বরূপ, যানবাহনটি ONLINE বা OFFLINE হতে পারে এবং ট্রিপ অগ্রসর হওয়ার সাথে সাথে গাড়ির অবস্থান পরিবর্তিত হয়৷

নূন্যতম সিস্টেমের জন্য আবশ্যক

মোবাইল ডিভাইসে অবশ্যই Android 6.0 (API লেভেল 23) বা তার পরে চলমান থাকতে হবে।

নির্মাণ এবং নির্ভরতা কনফিগারেশন

ড্রাইভার SDK সংস্করণ 4.99 এবং পরবর্তী Google Maven সংগ্রহস্থল থেকে উপলব্ধ।

গ্রেডল

আপনার build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

repositories {
    ...
    google()
}

মাভেন

আপনার pom.xml ফাইলে নিম্নলিখিত যোগ করুন:

<project>
  ...
  <repositories>
    <repository>
      <id>google-maven-repository</id>
      <url>https://maven.google.com</url>
    </repository>
  </repositories>
  ...
</project>

প্রকল্প কনফিগারেশন

ড্রাইভার SDK ব্যবহার করার জন্য, আপনার অ্যাপটি অবশ্যই minSdkVersion 23 বা উচ্চতর টার্গেট করবে৷

ড্রাইভার SDK দিয়ে তৈরি একটি অ্যাপ চালানোর জন্য, Android ডিভাইসে Google Play পরিষেবা ইনস্টল থাকতে হবে।

আপনার উন্নয়ন প্রকল্প সেট আপ করুন

আপনার উন্নয়ন প্রকল্প সেট আপ করতে এবং Google ক্লাউড কনসোলে প্রকল্পের জন্য একটি API কী পেতে:

  1. একটি নতুন Google ক্লাউড কনসোল প্রকল্প তৈরি করুন, বা ড্রাইভার SDK-এর সাথে ব্যবহারের জন্য একটি বিদ্যমান প্রকল্প নির্বাচন করুন৷ Google ক্লাউড কনসোলে নতুন প্রকল্প দৃশ্যমান না হওয়া পর্যন্ত কয়েক মিনিট অপেক্ষা করুন৷

  2. ডেমো অ্যাপ চালানোর জন্য, আপনার প্রোজেক্টের অবশ্যই Android এর জন্য Maps SDK-এ অ্যাক্সেস থাকতে হবে। Google ক্লাউড কনসোলে, APIs এবং পরিষেবাগুলি > লাইব্রেরি নির্বাচন করুন, তারপর Android এর জন্য Maps SDK অনুসন্ধান করুন এবং সক্ষম করুন৷

  3. API এবং পরিষেবাগুলি > শংসাপত্র > শংসাপত্র তৈরি করুন > API কী নির্বাচন করে প্রকল্পের জন্য একটি API কী পান। একটি API কী পাওয়ার বিষয়ে আরও তথ্যের জন্য, একটি API কী পান দেখুন।

আপনার অ্যাপে ড্রাইভার SDK যোগ করুন

ড্রাইভার SDK Google Maven সংগ্রহস্থল থেকে উপলব্ধ। সংগ্রহস্থলে SDK এর প্রজেক্ট অবজেক্ট মডেল (.pom) ফাইল এবং Javadocs অন্তর্ভুক্ত রয়েছে। আপনার অ্যাপে ড্রাইভার SDK যোগ করতে:

  1. ড্রাইভার SDK-এর পছন্দসই সংস্করণের জন্য VERSION_NUMBER স্থানধারক প্রতিস্থাপন করে আপনার Gradle বা Maven কনফিগারেশনে নিম্নলিখিত নির্ভরতা যোগ করুন।

    গ্রেডল

    আপনার build.gradle এ নিম্নলিখিত যোগ করুন:

    dependencies {
      ...
      implementation 'com.google.android.libraries.mapsplatform.transportation:transportation-driver:VERSION_NUMBER'
    }
    

    মাভেন

    আপনার pom.xml এ নিম্নলিখিত যোগ করুন:

    <dependencies>
      ...
      <dependency>
        <groupId>com.google.android.libraries.mapsplatform.transportation</groupId>
        <artifactId>transportation-driver</artifactId>
        <version>VERSION_NUMBER</version>
      </dependency>
    </dependencies>
    
  2. ড্রাইভার SDK নেভিগেশন SDK-এর উপর নির্ভর করে, এই নির্ভরতাটি এমনভাবে কনফিগার করা হয়েছে যে যদি নেভিগেশন SDK-এর একটি নির্দিষ্ট সংস্করণের প্রয়োজন হয়, তাহলে এটিকে নিচের মতো বিল্ড কনফিগারেশন ফাইলে স্পষ্টভাবে সংজ্ঞায়িত করতে হবে, উল্লেখিত কোড ব্লক বাদ দিলে প্রকল্পটি সক্ষম হবে প্রধান রিলিজ সংস্করণের মধ্যে সর্বদা নেভিগেশন SDK-এর সর্বশেষ সংস্করণ ডাউনলোড করতে। নোট করুন যে ড্রাইভার SDK এবং নেভিগেশন SDK-এর সর্বশেষ সংস্করণগুলির সম্মিলিত আচরণগুলি তাদের প্রকাশের আগে কঠোর পরীক্ষার মধ্য দিয়ে গেছে৷

    আপনার বিকাশের নির্ভরতা কনফিগারেশনের ব্যবস্থা করুন এবং সেই অনুযায়ী পরিবেশ প্রকাশ করুন।

    গ্রেডল

    আপনার build.gradle এ নিম্নলিখিত যোগ করুন:

    dependencies {
      ...
      implementation 'com.google.android.libraries.navigation:navigation:5.0.0'
    }
    

    মাভেন

    আপনার pom.xml এ নিম্নলিখিত যোগ করুন:

    <dependencies>
      ...
      <dependency>
        <groupId>com.google.android.libraries.navigation</groupId>
        <artifactId>navigation</artifactId>
        <version>5.0.0</version>
      </dependency>
    </dependencies>
    

আপনার অ্যাপে API কী যোগ করুন

একবার আপনি আপনার অ্যাপে ড্রাইভার SDK যোগ করলে, আপনার অ্যাপে API কী যোগ করুন। আপনি যখন আপনার ডেভেলপমেন্ট প্রজেক্ট সেট আপ করবেন তখন আপনাকে অবশ্যই প্রজেক্ট API কী ব্যবহার করতে হবে।

এই বিভাগটি বর্ণনা করে যে কীভাবে আপনার API কী সংরক্ষণ করবেন যাতে এটি আপনার অ্যাপ দ্বারা আরও নিরাপদে উল্লেখ করা যায়। আপনার সংস্করণ নিয়ন্ত্রণ সিস্টেমে আপনার API কী চেক করা উচিত নয়। এটি local.properties ফাইলে সংরক্ষণ করা উচিত, যা আপনার প্রকল্পের রুট ডিরেক্টরিতে অবস্থিত। local.properties ফাইল সম্পর্কে আরও তথ্যের জন্য, Gradle বৈশিষ্ট্য ফাইলগুলি দেখুন।

এই কাজটি সুগম করতে, আপনি Android এর জন্য সিক্রেটস গ্রেডল প্লাগইন ব্যবহার করতে পারেন।

প্লাগইন ইনস্টল করতে এবং আপনার API কী সংরক্ষণ করতে:

  1. আপনার রুট-লেভেল build.gradle ফাইলটি খুলুন এবং buildscript অধীনে dependencies উপাদানে নিম্নলিখিত কোডটি যোগ করুন।

    গ্রোভি

    buildscript {
        dependencies {
            // ...
            classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.0"
        }
    }
    

    কোটলিন

    buildscript {
        dependencies {
            // ...
            classpath("com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.0")
        }
    }
    
  2. আপনার অ্যাপ-লেভেল build.gradle ফাইলটি খুলুন এবং plugins এলিমেন্টে নিম্নলিখিত কোড যোগ করুন।

    গ্রোভি

    id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
    

    কোটলিন

    id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
    
  3. আপনি যদি অ্যান্ড্রয়েড স্টুডিও ব্যবহার করেন, তাহলে গ্রেডলের সাথে আপনার প্রকল্প সিঙ্ক করুন

  4. আপনার প্রজেক্ট লেভেল ডিরেক্টরিতে local.properties খুলুন এবং তারপরে নিম্নলিখিত কোডটি যোগ করুন। আপনার API কী দিয়ে YOUR_API_KEY প্রতিস্থাপন করুন।

    MAPS_API_KEY=YOUR_API_KEY
    
  5. আপনার AndroidManifest.xml ফাইলে, com.google.android.geo.API_KEY এ যান এবং android:value বৈশিষ্ট্যটি নিম্নরূপ আপডেট করুন:

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="${MAPS_API_KEY}" />
    

নিম্নলিখিত উদাহরণটি একটি নমুনা অ্যাপ্লিকেশনের জন্য একটি সম্পূর্ণ ম্যানিফেস্ট দেখায়:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.driverapidemo">
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/_AppTheme">

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="${MAPS_API_KEY}" />

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

আপনার অ্যাপে প্রয়োজনীয় গুণাবলী অন্তর্ভুক্ত করুন

আপনি যদি আপনার অ্যাপে ড্রাইভার SDK ব্যবহার করেন, তাহলে আপনার অ্যাপের আইনি বিজ্ঞপ্তি বিভাগের অংশ হিসেবে অ্যাট্রিবিউশন টেক্সট এবং ওপেন সোর্স লাইসেন্স অন্তর্ভুক্ত করতে হবে। একটি স্বাধীন মেনু আইটেম হিসাবে বা একটি সম্পর্কে মেনু আইটেমের অংশ হিসাবে বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করা ভাল৷

আনআর্কাইভ করা AAR ফাইলের "third_party_licenses.txt" ফাইলে লাইসেন্সের তথ্য পাওয়া যাবে।

ওপেন সোর্স বিজ্ঞপ্তিগুলি কীভাবে অন্তর্ভুক্ত করবেন তার জন্য https://developers.google.com/android/guides/opensource দেখুন।

নির্ভরতা

আপনি যদি আপনার বিল্ডগুলি অপ্টিমাইজ করতে ProGuard ব্যবহার করেন তবে আপনাকে আপনার ProGuard কনফিগারেশন ফাইলে নিম্নলিখিত লাইনগুলি যুক্ত করতে হতে পারে:

-dontwarn com.google.**
-dontwarn okio.**

সমর্থিত ন্যূনতম API স্তর হল 23৷

SDK শুরু করা হচ্ছে

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

ড্রাইভার SDK ব্যবহার করার আগে, আপনাকে প্রথমে নেভিগেশন SDK শুরু করতে হবে। SDK শুরু করতে:

  1. NavigationApi থেকে একটি Navigator অবজেক্ট পান।

    জাভা

    NavigationApi.getNavigator(
        this, // Activity
        new NavigationApi.NavigatorListener() {
          @Override
          public void onNavigatorReady(Navigator navigator) {
            // Keep a reference to the Navigator (used to configure and start nav)
            this.navigator = navigator;
          }
        }
    );
    

    কোটলিন

    NavigationApi.getNavigator(
      this, // Activity
      object : NavigatorListener() {
        override fun onNavigatorReady(navigator: Navigator) {
          // Keep a reference to the Navigator (used to configure and start nav)
          this@myActivity.navigator = navigator
        }
      },
    )
    
  2. একটি DriverContext অবজেক্ট তৈরি করুন, প্রয়োজনীয় ক্ষেত্রগুলি পূরণ করুন।

    জাভা

    DriverContext driverContext = DriverContext.builder(application)
        .setProviderId(providerId)
        .setVehicleId(vehicleId)
        .setAuthTokenFactory(authTokenFactory)
        .setNavigator(navigator)
        .setRoadSnappedLocationProvider(
            NavigationApi.getRoadSnappedLocationProvider(application))
        .build();
    

    কোটলিন

    val driverContext =
      DriverContext.builder(application)
        .setProviderId(providerId)
        .setVehicleId(vehicleId)
        .setAuthTokenFactory(authTokenFactory)
        .setNavigator(navigator)
        .setRoadSnappedLocationProvider(NavigationApi.getRoadSnappedLocationProvider(application))
        .build()
    
  3. *DriverApi শুরু করতে DriverContext অবজেক্ট ব্যবহার করুন।

    জাভা

    RidesharingDriverApi ridesharingDriverApi = RidesharingDriverApi.createInstance(driverContext);
    

    কোটলিন

    val ridesharingDriverApi = RidesharingDriverApi.createInstance(driverContext)
    
  4. API অবজেক্ট থেকে RidesharingVehicleReporter পান। ( *VehicleReporter NavigationVehicleReporter প্রসারিত করে।)

    জাভা

    RidesharingVehicleReporter vehicleReporter = ridesharingDriverApi.getRidesharingVehicleReporter();
    

    কোটলিন

    val vehicleReporter = ridesharingDriverApi.getRidesharingVehicleReporter()
    

AuthTokenFactory দিয়ে প্রমাণীকরণ করা হচ্ছে

যখন ড্রাইভার SDK অবস্থান আপডেট তৈরি করে, তখন এটিকে অবশ্যই এই আপডেটগুলি ফ্লিট ইঞ্জিন সার্ভারে পাঠাতে হবে। এই অনুরোধগুলিকে প্রমাণীকরণ করার জন্য, ড্রাইভার SDK AuthTokenFactory এর কলারের-প্রদত্ত উদাহরণে কল করবে। অবস্থান আপডেটের সময়ে প্রমাণীকরণ টোকেন তৈরি করার জন্য কারখানাটি দায়ী।

ঠিক কীভাবে টোকেন তৈরি হয় তা প্রতিটি বিকাশকারীর পরিস্থিতির জন্য নির্দিষ্ট হবে। যাইহোক, বাস্তবায়নের জন্য সম্ভবত প্রয়োজন হবে:

  • একটি প্রমাণীকরণ টোকেন আনুন, সম্ভবত JSON ফর্ম্যাটে, একটি HTTPS সার্ভার থেকে
  • টোকেন পার্স করুন এবং ক্যাশে করুন
  • মেয়াদ শেষ হয়ে গেলে টোকেন রিফ্রেশ করুন

ফ্লিট ইঞ্জিন সার্ভার দ্বারা প্রত্যাশিত টোকেনগুলির বিশদ বিবরণের জন্য, অনুমোদনের জন্য একটি JSON ওয়েব টোকেন (JWT) তৈরি করা দেখুন।

এখানে একটি AuthTokenFactory এর একটি কঙ্কাল বাস্তবায়ন রয়েছে:

জাভা

class JsonAuthTokenFactory implements AuthTokenFactory {
  private String token;  // initially null
  private long expiryTimeMs = 0;

  // This method is called on a thread whose only responsibility is to send
  // location updates. Blocking is OK, but just know that no location updates
  // can occur until this method returns.
  @Override
  public String getToken(AuthTokenContext authTokenContext) {
    if (System.currentTimeMillis() > expiryTimeMs) {
      // The token has expired, go get a new one.
      fetchNewToken(authTokenContext.getVehicleId());
    }
    return token;
  }

  private void fetchNewToken(String vehicleId) {
    String url =
        new Uri.Builder()
            .scheme("https")
            .authority("yourauthserver.example")
            .appendPath("token")
            .appendQueryParameter("vehicleId", vehicleId)
            .build()
            .toString();

    try (Reader r = new InputStreamReader(new URL(url).openStream())) {
      com.google.gson.JsonObject obj
          = com.google.gson.JsonParser.parseReader(r).getAsJsonObject();
      token = obj.get("Token").getAsString();
      expiryTimeMs = obj.get("TokenExpiryMs").getAsLong();

      // The expiry time could be an hour from now, but just to try and avoid
      // passing expired tokens, we subtract 10 minutes from that time.
      expiryTimeMs -= 10 * 60 * 1000;
    } catch (IOException e) {
      // It's OK to throw exceptions here. The StatusListener you passed to
      // create the DriverContext class will be notified and passed along the failed
      // update warning.
      throw new RuntimeException("Could not get auth token", e);
    }
  }
}

কোটলিন

class JsonAuthTokenFactory : AuthTokenFactory() {

  private var token: String = ""
  private var expiryTimeMs: Long = 0

  // This method is called on a thread whose only responsibility is to send
  // location updates. Blocking is OK, but just know that no location updates
  // can occur until this method returns.
  override fun getToken(context: AuthTokenContext): String {
    if (System.currentTimeMillis() > expiryTimeMs) {
      // The token has expired, go get a new one.
      fetchNewToken(authTokenContext.getVehicleId())
    }
     return token
  }

  fun fetchNewToken(vehicleId: String) {
    val url =
      Uri.Builder()
        .scheme("https")
        .authority("yourauthserver.example")
        .appendPath("token")
        .appendQueryParameter("vehicleId", vehicleId)
        .build()
        .toString()

    try {
      val reader = InputStreamReader(URL(url).openStream())

      reader.use {
        val obj = com.google.gson.JsonParser.parseReader(r).getAsJsonObject()

        token = obj.get("ServiceToken").getAsString()
        expiryTimeMs = obj.get("TokenExpiryMs").getAsLong()

        // The expiry time could be an hour from now, but just to try and avoid
        // passing expired tokens, we subtract 10 minutes from that time.
        expiryTimeMs -= 10 * 60 * 1000
      }
    } catch (e: IOException) {
      // It's OK to throw exceptions here. The StatusListener you passed to
      // create the DriverContext class will be notified and passed along the failed
      // update warning.
      throw RuntimeException("Could not get auth token", e)
    }
  }
}

এই বিশেষ বাস্তবায়নটি বিকাশকারীর প্রমাণীকরণ সার্ভার থেকে JSON ফর্ম্যাটে একটি টোকেন আনতে অন্তর্নির্মিত Java HTTP ক্লায়েন্ট ব্যবহার করে। টোকেন পুনঃব্যবহারের জন্য সংরক্ষণ করা হয়। পুরানো টোকেনটি মেয়াদ শেষ হওয়ার 10 মিনিটের মধ্যে থাকলে টোকেনটি পুনরায় আনা হয়।

আপনার বাস্তবায়ন ভিন্নভাবে কাজ করতে পারে, যেমন টোকেন রিফ্রেশ করতে একটি ব্যাকগ্রাউন্ড থ্রেড ব্যবহার করা।

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

StatusListener এর সাথে স্ট্যাটাস এবং এরর রিপোর্টিং

যেহেতু ড্রাইভার SDK ব্যাকগ্রাউন্ডে ক্রিয়া সম্পাদন করে, তাই কিছু ঘটনা ঘটলে যেমন ত্রুটি, সতর্কতা বা ডিবাগ বার্তাগুলি ঘটে তখন বিজ্ঞপ্তিগুলিকে ট্রিগার করতে StatusListener ব্যবহার করুন৷ ত্রুটিগুলি ক্ষণস্থায়ী প্রকৃতির হতে পারে (যেমন BACKEND_CONNECTIVITY_ERROR ), অথবা তারা অবস্থান আপডেটগুলি স্থায়ীভাবে বন্ধ করে দিতে পারে (যেমন VEHICLE_NOT_FOUND , একটি কনফিগারেশন ত্রুটি নির্দেশ করে)৷

আপনি নিম্নলিখিত মত একটি ঐচ্ছিক StatusListener বাস্তবায়ন প্রদান করেন:

জাভা

class MyStatusListener implements StatusListener {
  /** Called when background status is updated, during actions such as location reporting. */
  @Override
  public void updateStatus(
      StatusLevel statusLevel, StatusCode statusCode, String statusMsg) {
    // Status handling stuff goes here.
    // StatusLevel may be DEBUG, INFO, WARNING, or ERROR.
    // StatusCode may be DEFAULT, UNKNOWN_ERROR, VEHICLE_NOT_FOUND,
    // BACKEND_CONNECTIVITY_ERROR, or PERMISSION_DENIED.
  }
}

কোটলিন

class MyStatusListener : StatusListener() {
  /** Called when background status is updated, during actions such as location reporting. */
  override fun updateStatus(statusLevel: StatusLevel, statusCode: StatusCode, statusMsg: String) {
    // Status handling stuff goes here.
    // StatusLevel may be DEBUG, INFO, WARNING, or ERROR.
    // StatusCode may be DEFAULT, UNKNOWN_ERROR, VEHICLE_NOT_FOUND,
    // BACKEND_CONNECTIVITY_ERROR, or PERMISSION_DENIED.
  }
}

SSL/TLS-এ নোট

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

অবস্থান আপডেট সক্ষম করা হচ্ছে

একবার আপনার একটি *VehicleReporter দৃষ্টান্ত থাকলে, অবস্থান আপডেট সক্ষম করা সোজা:

জাভা

RidesharingVehicleReporter reporter = ...;

reporter.enableLocationTracking();

কোটলিন

val reporter = ...

reporter.enableLocationTracking()

গাড়ির অবস্থা যখন ONLINE থাকে তখন নিয়মিত বিরতিতে অবস্থানের আপডেট পাঠানো হয়। মনে রাখবেন যে reporter.enableLocationTracking() কল করা স্বয়ংক্রিয়ভাবে গাড়ির অবস্থাকে ONLINE এ সেট করে না। আপনাকে অবশ্যই গাড়ির অবস্থা স্পষ্টভাবে সেট করতে হবে।

ডিফল্টরূপে, রিপোর্টিং ব্যবধান 10 সেকেন্ড। রিপোর্টিং ব্যবধান reporter.setLocationReportingInterval(long, TimeUnit) দিয়ে পরিবর্তন করা যেতে পারে। ন্যূনতম সমর্থিত আপডেট ব্যবধান হল 5 সেকেন্ড। আরও ঘন ঘন আপডেটের ফলে ধীর অনুরোধ এবং ত্রুটি হতে পারে।

অবস্থান আপডেট অক্ষম করা হচ্ছে

ড্রাইভারের স্থানান্তর শেষ হলে, অবস্থান আপডেট বন্ধ করা যেতে পারে এবং DeliveryVehicleReporter.disableLocationTracking বা RidesharingVehicleReporter.disableLocationTracking কল করে গাড়িটিকে অফলাইনে চিহ্নিত করা যেতে পারে।

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

গাড়ির অবস্থা সেট করা হচ্ছে

অবস্থান আপডেট সক্ষম করা হলে, গাড়ির অবস্থা ONLINE সেট করা হলে গাড়িটিকে SearchVehicles প্রশ্নের জন্য উপলব্ধ করা হবে; একইভাবে, একটি যানবাহনকে OFFLINE হিসেবে চিহ্নিত করলে গাড়িটিকে অনুপলব্ধ হিসেবে চিহ্নিত করা হবে।

আপনার কাছে সার্ভারের পাশে গাড়ির অবস্থা সেট করার বিকল্প আছে ( একটি যানবাহন আপডেট করুন দেখুন), অথবা সরাসরি ড্রাইভার SDK-তে:

জাভা

RidesharingVehicleReporter reporter = ...;

reporter.enableLocationTracking();
reporter.setVehicleState(VehicleState.ONLINE);

কোটলিন

val reporter = ...

reporter.enableLocationTracking()
reporter.setVehicleState(VehicleState.ONLINE)

অবস্থান আপডেট সক্ষম করা হলে, পরবর্তী অবস্থান আপডেটে setVehicleState এ একটি কল প্রচারিত হবে।

অবস্থান ট্র্যাকিং সক্ষম না থাকলে একটি যানবাহনকে ONLINE হিসাবে চিহ্নিত করলে একটি IllegalStateException ব্যতিক্রম হবে৷ অবস্থান ট্র্যাকিং এখনও সক্ষম বা স্পষ্টভাবে নিষ্ক্রিয় না হলে একটি যানবাহন OFFLINE হিসাবে চিহ্নিত করা যেতে পারে৷ এর ফলে তাৎক্ষণিক আপডেট পাওয়া যাবে। RidesharingVehicleReporter.disableLocationTracking() এ একটি কল গাড়ির অবস্থা OFFLINE সেট করবে৷

নোট করুন যে setVehicleState অবিলম্বে ফিরে আসে, এবং আপডেটগুলি অবস্থান আপডেট থ্রেডে সম্পন্ন হয়। অবস্থানের আপডেটের ত্রুটি পরিচালনার অনুরূপ, গাড়ির অবস্থা আপডেট করার ত্রুটিগুলি DriverContext এ ঐচ্ছিকভাবে প্রদত্ত StatusListener সেট ব্যবহার করে প্রচার করা হয়।