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

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

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

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

তুমি শুরু করার আগে

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

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

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

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

যখন আপনার ব্যাকএন্ড সার্ভার একটি যানবাহনের সাথে একজন ভোক্তার সাথে মিলে যায়, তখন যাত্রা ভাগাভাগি ব্যবহার করে ট্রিপ অনুসরণ শুরু করতে 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 আরপিসি বর্ণনা
400 INVALID_ARGUMENT ক্লায়েন্ট একটি অবৈধ ট্রিপ নাম উল্লেখ করেছে৷ ট্রিপের নাম অবশ্যই ফরম্যাট providers/{provider_id}/trips/{trip_id} অনুসরণ করবে। প্রদানকারী_আইডি অবশ্যই পরিষেবা প্রদানকারীর মালিকানাধীন ক্লাউড প্রকল্পের আইডি হতে হবে।
401 অননুমোদিত কোনো বৈধ প্রমাণীকরণ শংসাপত্র না থাকলে আপনি এই ত্রুটিটি পাবেন। উদাহরণস্বরূপ, যদি JWT টোকেন একটি ট্রিপ আইডি ছাড়া স্বাক্ষরিত হয় বা JWT টোকেনের মেয়াদ শেষ হয়ে গেছে।
403 PERMISSION_DENIED আপনি এই ত্রুটিটি পান যদি ক্লায়েন্টের যথেষ্ট অনুমতি না থাকে (উদাহরণস্বরূপ, ভোক্তা ভূমিকা সহ একজন ব্যবহারকারী আপডেটট্রিপ কল করার চেষ্টা করেন), যদি JWT টোকেন অবৈধ হয়, বা ক্লায়েন্ট প্রকল্পের জন্য API সক্ষম না হয়। JWT টোকেন অনুপস্থিত হতে পারে বা টোকেনটি এমন একটি ট্রিপ আইডি দিয়ে স্বাক্ষরিত যা অনুরোধ করা ট্রিপ আইডির সাথে মেলে না।
429 RESOURCE_EXHAUSTED রিসোর্স কোটা শূন্য বা ট্রাফিকের হার সীমা ছাড়িয়ে গেছে।
503 অনুপলব্ধ সেবা প্রদান করা যাচ্ছে না। সাধারণত সার্ভার ডাউন থাকে।
504 DEADLINE_EXCEEDED অনুরোধের সময়সীমা অতিক্রম করেছে৷ এই ত্রুটিটি তখনই ঘটে যখন কলকারী একটি নির্দিষ্ট সময়সীমা সেট করে যা পদ্ধতির ডিফল্ট সময়সীমার চেয়ে ছোট (অর্থাৎ অনুরোধ করা সময়সীমা সার্ভারের অনুরোধটি প্রক্রিয়া করার জন্য যথেষ্ট নয়) এবং অনুরোধটি সময়সীমার মধ্যে শেষ না হয়৷

ভোক্তা SDK ত্রুটিগুলি পরিচালনা করুন৷

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

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

কলব্যাকে পাস করা ত্রুটিগুলি সাধারণত 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 তাদের থেকে স্বয়ংক্রিয়ভাবে পুনরুদ্ধার করে।

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

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

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

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