অ্যান্ড্রয়েডে একটি ট্রিপ অনুসরণ করুন

প্ল্যাটফর্ম নির্বাচন করুন: অ্যান্ড্রয়েড আইওএস জাভাস্ক্রিপ্ট

যখন আপনি কোনও ট্রিপ ফলো করেন, তখন আপনার কনজিউমার অ্যাপটি গ্রাহককে উপযুক্ত গাড়ির অবস্থান প্রদর্শন করে। এটি করার জন্য, আপনার অ্যাপটিকে ট্রিপ ফলো করা শুরু করতে হবে, ট্রিপের অগ্রগতি আপডেট করতে হবে এবং ট্রিপ সম্পূর্ণ হলে তা ফলো করা বন্ধ করতে হবে।

এই নথিতে সেই প্রক্রিয়াটি কীভাবে কাজ করে তা কভার করা হয়েছে।

শুরু করার আগে

নিশ্চিত করুন যে আপনি নিম্নলিখিত জিনিসগুলি সেট আপ করেছেন:

  • আপনার কনজিউমার অ্যাপের ব্যাকএন্ড পরিষেবাগুলি চালু আছে এবং যানবাহনের সাথে ভোক্তাদের মেলানোর জন্য আপনার পরিষেবাগুলি কার্যকর রয়েছে।

  • তুমি তোমার অ্যাপের জন্য একটি মানচিত্র সেট আপ করেছো

একটি ট্রিপ অনুসরণ করা শুরু করুন

যখন আপনার ব্যাকএন্ড সার্ভারটি কোনও গ্রাহককে একটি গাড়ির সাথে মেলায়, তখন ট্রিপটি অনুসরণ করতে JourneySharingSession ব্যবহার করুন।

নিচের নমুনা কোডটি দেখায় যে ভিউ লোড হওয়ার পরে কীভাবে ট্রিপ অনুসরণ করা শুরু করতে হয়।

জাভা

public class MainActivity extends AppCompatActivity
    implements ConsumerViewModel.JourneySharingListener  {

  // Class implementation

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Create a TripModel instance to listen for updates to the trip specified by this trip name.
    String tripName = ...;
    TripModelManager tripModelManager = consumerApi.getTripModelManager();
    TripModel tripModel = tripModelManager.getTripModel(tripName);

    // Create a JourneySharingSession instance based on the TripModel.
    JourneySharingSession session = JourneySharingSession.createInstance(tripModel);

    // Add the JourneySharingSession instance on the map for updating the UI.
    consumerController.showSession(session);

    // Register for trip update events.
    tripModel.registerTripCallback(new TripModelCallback() {
      @Override
      public void onTripETAToNextWaypointUpdated(
          TripInfo tripInfo, @Nullable Long timestampMillis) {
        // ...
      }

      @Override
      public void onTripActiveRouteRemainingDistanceUpdated(
          TripInfo tripInfo, @Nullable Integer distanceMeters) {
        // ...
      }

      // ...
    });
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();

    if (journeySharingSession != null) {
      journeySharingSession.stop();
    }
  }
}

কোটলিন

class SampleAppActivity : AppCompatActivity(), ConsumerViewModel.JourneySharingListener {

  // Class implementation

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    // Create a TripModel instance to listen for updates to the trip specified by this trip name.
    val tripName = "tripName"
    val tripModelManager = consumerApi.getTripModelManager()
    val tripModel = tripModelManager.getTripModel(tripName)

    // Create a JourneySharingSession instance based on the TripModel.
    val session = JourneySharingSession.createInstance(tripModel)

    // Add the JourneySharingSession instance on the map for updating the UI.
    consumerController.showSession(session)

    // Register for trip update events.
    tripModel.registerTripCallback(
      object : TripModelCallback() {
        override fun onTripETAToNextWaypointUpdated(
          tripInfo: TripInfo,
          timestampMillis: Long?,
        ) {
          // ...
        }

        override fun onTripActiveRouteRemainingDistanceUpdated(
          tripInfo: TripInfo,
          distanceMeters: Int?,
        ) {
          // ...
        }

      // ...
    })
  }

  override fun onDestroy() {
    super.onDestroy()

    journeySharingSession?.stop()
  }
}

ভ্রমণের অগ্রগতি আপডেট করুন

ভ্রমণের অগ্রগতির বিবরণ আপডেট করার জন্য, যেমন গাড়িটি পৌঁছানোর আগে কত দূরত্ব অতিক্রম করতে হবে এবং পৌঁছানোর আনুমানিক সময়, আপনার অ্যাপটিকে নিম্নলিখিত উদাহরণগুলিতে দেখানো হিসাবে একজন শ্রোতা নিবন্ধন এবং কনফিগার করতে হবে।

  1. একটি TripModel অবজেক্টে একজন শ্রোতা নিবন্ধন করুন।

    জাভা

    // Create a TripModel instance for listening to updates to the trip specified by this trip name.
    String tripName = ...;
    TripModelManager tripModelManager = consumerApi.getTripModelManager();
    TripModel tripModel = tripModelManager.getTripModel(tripName);
    
    // Create a JourneySharingSession instance based on the TripModel.
    JourneySharingSession session = JourneySharingSession.createInstance(tripModel);
    
    // Add the JourneySharingSession instance on the map for updating the UI.
    consumerController.showSession(session);
    
    // Register for trip update events.
    tripModel.registerTripCallback(new TripModelCallback() {
    @Override
    public void onTripETAToNextWaypointUpdated(
            TripInfo tripInfo, @Nullable Long timestampMillis) {
          // ...
    }
    
    @Override
    public void onTripActiveRouteRemainingDistanceUpdated(
            TripInfo tripInfo, @Nullable Integer distanceMeters) {
          // ...
    }
    
    // ...
    });
    

    কোটলিন

    // Create a TripModel instance for listening to updates to the trip specified by this trip name.
    val tripName = "tripName"
    val tripModelManager = consumerApi.getTripModelManager()
    val tripModel = tripModelManager.getTripModel(tripName)
    
    // Create a JourneySharingSession instance based on the TripModel.
    val session = JourneySharingSession.createInstance(tripModel)
    
    // Add the JourneySharingSession instance on the map for updating the UI.
    consumerController.showSession(session)
    
    // Register for trip update events.
    tripModel.registerTripCallback(
      object : TripModelCallback() {
        override fun onTripETAToNextWaypointUpdated(
          tripInfo: TripInfo,
          timestampMillis: Long?,
        ) {
          // ...
        }
    
        override fun onTripActiveRouteRemainingDistanceUpdated(
          tripInfo: TripInfo,
          distanceMeters: Int?,
        ) {
          // ...
        }
    
      // ...
    })
    
  2. TripModelOptions ব্যবহার করে আপনার ভ্রমণের জন্য শ্রোতা কনফিগার করুন।

    জাভা

    // Set refresh interval to 2 seconds.
    TripModelOptions tripOptions =
          TripModelOptions.builder().setRefreshIntervalMillis(2000).build();
    tripModel.setTripModelOptions(tripOptions);
    

    কোটলিন

    // Set refresh interval to 2 seconds.
    val tripOptions = TripModelOptions.builder().setRefreshIntervalMillis(2000).build()
    tripModel.setTripModelOptions(tripOptions)
    

কোনও ট্রিপ অনুসরণ করা বন্ধ করুন

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

নিম্নলিখিত নমুনা কোডে দেখানো ট্রিপ অনুসরণ করা বন্ধ করতে JourneySharingSession ব্যবহার করুন।

জাভা

public class MainActivity extends AppCompatActivity
    implements ConsumerViewModel.JourneySharingListener  {

  // Class implementation

  @Override
  protected void onDestroy() {
    super.onDestroy();

    if (journeySharingSession != null) {
      journeySharingSession.stop();
    }
  }
}

কোটলিন

class SampleAppActivity : AppCompatActivity(), ConsumerViewModel.JourneySharingListener {

  // Class implementation

  override fun onDestroy() {
    super.onDestroy()

    journeySharingSession?.stop()
  }
}

ট্রিপ ত্রুটিগুলি পরিচালনা করুন

onTripRefreshError পদ্ধতিতে ট্রিপ মনিটরিংয়ের সময় ঘটে যাওয়া ত্রুটিগুলি দেখা যায়। ত্রুটি বার্তাগুলি Google ক্লাউড ত্রুটি মান অনুসরণ করে। বিস্তারিত ত্রুটি বার্তা সংজ্ঞা এবং সমস্ত ত্রুটি কোডের জন্য, Google ক্লাউড ত্রুটি ডকুমেন্টেশন দেখুন।

ট্রিপ পর্যবেক্ষণের সময় ঘটতে পারে এমন কিছু সাধারণ ত্রুটি এখানে দেওয়া হল:

HTTP সম্পর্কে আরপিসি বিবরণ
৪০০ INVALID_যুক্তি ক্লায়েন্ট একটি অবৈধ ট্রিপের নাম উল্লেখ করেছেন। ট্রিপের নাম অবশ্যই providers/{provider_id}/trips/{trip_id} ফর্ম্যাট অনুসরণ করতে হবে। provider_id অবশ্যই পরিষেবা প্রদানকারীর মালিকানাধীন ক্লাউড প্রোজেক্টের আইডি হতে হবে।
৪০১ অননুমোদিত যদি কোনও বৈধ প্রমাণীকরণ শংসাপত্র না থাকে তবে আপনি এই ত্রুটিটি পাবেন। উদাহরণস্বরূপ, যদি JWT টোকেনটি ট্রিপ আইডি ছাড়াই স্বাক্ষরিত হয় বা JWT টোকেনের মেয়াদ শেষ হয়ে যায়।
৪০৩ অনুমতি বাতিল করা হয়েছে ক্লায়েন্টের যদি পর্যাপ্ত অনুমতি না থাকে (উদাহরণস্বরূপ, গ্রাহক ভূমিকা সহ কোনও ব্যবহারকারী আপডেটট্রিপ কল করার চেষ্টা করেন), যদি JWT টোকেনটি অবৈধ হয়, অথবা ক্লায়েন্ট প্রকল্পের জন্য API সক্রিয় না থাকে, তাহলে আপনি এই ত্রুটিটি পাবেন। JWT টোকেনটি অনুপস্থিত থাকতে পারে অথবা টোকেনটি এমন একটি ট্রিপ আইডি দিয়ে স্বাক্ষরিত থাকে যা অনুরোধ করা ট্রিপ আইডির সাথে মেলে না।
৪২৯ রিসোর্স_ক্লান্ত রিসোর্স কোটা শূন্যে আছে অথবা ট্র্যাফিকের হার সীমা ছাড়িয়ে গেছে।
৫০৩ অনুপলব্ধ পরিষেবা অনুপলব্ধ। সাধারণত সার্ভার ডাউন থাকে।
৫০৪ শেষ তারিখ অতিক্রম করেছে অনুরোধের সময়সীমা অতিক্রম করেছে। এই ত্রুটিটি কেবল তখনই ঘটে যখন কলার পদ্ধতির ডিফল্ট সময়সীমার চেয়ে কম সময়সীমা নির্ধারণ করে (অর্থাৎ, অনুরোধ করা সময়সীমা সার্ভারের অনুরোধটি প্রক্রিয়া করার জন্য যথেষ্ট নয়) এবং অনুরোধটি সময়সীমার মধ্যে শেষ না হয়।

গ্রাহক SDK ত্রুটিগুলি পরিচালনা করুন

কনজিউমার SDK একটি কলব্যাক মেকানিজম ব্যবহার করে কনজিউমার অ্যাপে ট্রিপ আপডেট ত্রুটি পাঠায়। কলব্যাক প্যারামিটারটি একটি প্ল্যাটফর্ম-নির্দিষ্ট রিটার্ন টাইপ (অ্যান্ড্রয়েডে TripUpdateError এবং iOS-এ NSError )।

স্ট্যাটাস কোডগুলি বের করুন

কলব্যাকে পাঠানো ত্রুটিগুলি সাধারণত gRPC ত্রুটি হয় এবং আপনি স্ট্যাটাস কোড আকারে এগুলি থেকে অতিরিক্ত তথ্যও বের করতে পারেন। স্ট্যাটাস কোডের সম্পূর্ণ তালিকার জন্য, স্ট্যাটাস কোড এবং gRPC তে তাদের ব্যবহার দেখুন।

জাভা

আপনি একটি gRPC স্ট্যাটাস কোড বের করতে পারেন যা onTripUpdateError() থেকে ফিরে আসা TripUpdateError থেকে ত্রুটি সম্পর্কে বিশদ প্রদান করে।

// Called when there is a trip update error.
@Override
public void onTripUpdateError(TripInfo tripInfo, TripUpdateError error) {
  Status.Code code = error.getStatusCode();
}

কোটলিন

আপনি একটি gRPC স্ট্যাটাস কোড বের করতে পারেন যা onTripUpdateError() থেকে ফিরে আসা TripUpdateError থেকে ত্রুটি সম্পর্কে বিশদ প্রদান করে।

// Called when there is a trip update error.
override fun onTripUpdateError(tripInfo: TripInfo, error: TripUpdateError) {
  val code = error.getStatusCode()
}

স্ট্যাটাস কোডগুলি ব্যাখ্যা করুন

স্ট্যাটাস কোড দুটি ধরণের ত্রুটিকে অন্তর্ভুক্ত করে: সার্ভার এবং নেটওয়ার্ক-সম্পর্কিত ত্রুটি, এবং ক্লায়েন্ট-সাইড ত্রুটি।

সার্ভার এবং নেটওয়ার্ক ত্রুটি

নিম্নলিখিত স্ট্যাটাস কোডগুলি নেটওয়ার্ক বা সার্ভার ত্রুটির জন্য, এবং এগুলি সমাধানের জন্য আপনাকে কোনও পদক্ষেপ নেওয়ার প্রয়োজন নেই। কনজিউমার SDK স্বয়ংক্রিয়ভাবে সেগুলি থেকে পুনরুদ্ধার করে।

স্ট্যাটাস কোড বিবরণ
গর্ভপাত সার্ভারটি প্রতিক্রিয়া পাঠানো বন্ধ করে দিয়েছে। এটি সাধারণত সার্ভারের সমস্যার কারণে হয়।
বাতিল করা হয়েছে সার্ভার বহির্গামী প্রতিক্রিয়া বন্ধ করে দিয়েছে। এটি সাধারণত তখন ঘটে যখন
অ্যাপটি ব্যাকগ্রাউন্ডে পাঠানো হয়, অথবা যখন অবস্থা পরিবর্তন হয়
ভোক্তা অ্যাপ।
বাধাগ্রস্ত
শেষ তারিখ অতিক্রম করেছে সার্ভারটি সাড়া দিতে অনেক বেশি সময় নিয়েছে।
অনুপলব্ধ সার্ভারটি অনুপলব্ধ ছিল। এটি সাধারণত নেটওয়ার্ক সমস্যার কারণে হয়।

ক্লায়েন্ট ত্রুটি

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

স্ট্যাটাস কোড বিবরণ
INVALID_যুক্তি কনজিউমার অ্যাপটি একটি অবৈধ ট্রিপের নাম উল্লেখ করেছে; ট্রিপের নাম অবশ্যই providers/{provider_id}/trips/{trip_id} ফর্ম্যাট অনুসরণ করতে হবে।
খুঁজে পাওয়া যায়নি ট্রিপটি কখনও তৈরি হয়নি।
অনুমতি বাতিল করা হয়েছে কনজিউমার অ্যাপটির পর্যাপ্ত অনুমতি নেই। এই ত্রুটিটি তখন ঘটে যখন:
  • কনজিউমার অ্যাপের অনুমতি নেই
  • গুগল ক্লাউড কনসোলে প্রোজেক্টের জন্য কনজিউমার SDK সক্রিয় করা নেই।
  • JWT টোকেনটি হয় অনুপস্থিত অথবা অবৈধ।
  • JWT টোকেনটি এমন একটি ট্রিপ আইডি দিয়ে স্বাক্ষরিত যা অনুরোধ করা ট্রিপের সাথে মেলে না।
রিসোর্স_ক্লান্ত সম্পদের কোটা শূন্য, অথবা যানবাহন প্রবাহের হার গতিসীমা অতিক্রম করেছে।
অননুমোদিত একটি অবৈধ JWT টোকেনের কারণে অনুরোধটি প্রমাণীকরণ ব্যর্থ হয়েছে। এই ত্রুটিটি ঘটে যখন JWT টোকেনটি ট্রিপ আইডি ছাড়াই স্বাক্ষরিত হয়, অথবা যখন JWT টোকেনের মেয়াদ শেষ হয়ে যায়।