যখন আপনি কোনো ট্রিপ অনুসরণ করেন, তখন আপনার গ্রাহক অ্যাপটি গ্রাহককে উপযুক্ত যানবাহনটির অবস্থান প্রদর্শন করে। এটি করার জন্য, আপনার অ্যাপটিকে একটি ট্রিপ অনুসরণ করা শুরু করতে, ট্রিপের অগ্রগতি আপডেট করতে এবং ট্রিপটি সম্পূর্ণ হলে তা অনুসরণ করা বন্ধ করতে হবে।
এই নথিতে সেই প্রক্রিয়াটি কীভাবে কাজ করে তা বর্ণনা করা হয়েছে।
শুরু করার আগে
নিশ্চিত করুন যে আপনি নিম্নলিখিত বিষয়গুলো প্রস্তুত করেছেন:
আপনার গ্রাহক অ্যাপের জন্য ব্যাকএন্ড পরিষেবাগুলো প্রস্তুত আছে এবং গ্রাহকদের সাথে যানবাহন মেলানোর পরিষেবাটি চালু রয়েছে।
আপনি আপনার অ্যাপের জন্য একটি মানচিত্র তৈরি করেছেন ।
একটি ভ্রমণ অনুসরণ করা শুরু করুন
যখন আপনার ব্যাকএন্ড সার্ভার কোনো গ্রাহককে একটি যানবাহনের সাথে সংযুক্ত করে, তখন ট্রিপটি অনুসরণ করা শুরু করতে 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()
}
}
ভ্রমণের অগ্রগতি আপডেট করুন
ট্রিপের অগ্রগতির বিবরণ, যেমন গন্তব্যে পৌঁছানোর আগে যানবাহনটির আর কতটা দূরত্ব অতিক্রম করতে হবে এবং পৌঁছানোর আনুমানিক সময়, আপডেট করার জন্য আপনার অ্যাপকে নিম্নলিখিত উদাহরণগুলিতে দেখানো অনুযায়ী একটি লিসেনার নিবন্ধন এবং কনফিগার করতে হবে।
একটি
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?, ) { // ... } // ... })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)
একটি ভ্রমণ অনুসরণ করা বন্ধ করুন
নিশ্চিত করুন যে আপনার অ্যাপটি কোনো ট্রিপের আর প্রয়োজন না থাকলে, যেমন ড্রাইভার ব্যাকএন্ডে ট্রিপটিকে 'সম্পূর্ণ' (COMPLETE) হিসেবে চিহ্নিত করলে, সেটিকে অনুসরণ করা বন্ধ করে দেয়। জার্নি শেয়ারিং বন্ধ করলে ফ্লিট ইঞ্জিনে অপ্রয়োজনীয় নেটওয়ার্ক রিকোয়েস্ট এড়ানো যায় এবং মেমোরি লিক প্রতিরোধ করা যায়।
নিম্নলিখিত নমুনা কোডে দেখানো অনুযায়ী ট্রিপটি অনুসরণ করা বন্ধ করতে 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 মেথডটি ট্রিপ মনিটরিং চলাকালীন ঘটা ত্রুটিগুলো প্রদর্শন করে। ত্রুটির বার্তাগুলো গুগল ক্লাউড এরর স্ট্যান্ডার্ড অনুসরণ করে। ত্রুটির বার্তার বিস্তারিত সংজ্ঞা এবং সমস্ত এরর কোডের জন্য, গুগল ক্লাউড এররস ডকুমেন্টেশন দেখুন।
ট্রিপ মনিটরিং চলাকালীন ঘটতে পারে এমন কিছু সাধারণ ত্রুটি নিচে দেওয়া হলো:
| HTTP | আরপিসি | বর্ণনা |
|---|---|---|
| ৪০০ | অবৈধ আর্গুমেন্ট | ক্লায়েন্ট একটি অবৈধ ট্রিপের নাম উল্লেখ করেছে। ট্রিপের নামটি অবশ্যই providers/{provider_id}/trips/{trip_id} ফরম্যাটের হতে হবে। provider_id অবশ্যই সার্ভিস প্রোভাইডারের মালিকানাধীন ক্লাউড প্রজেক্টের আইডি হতে হবে। |
| ৪০১ | অপ্রমাণিত | বৈধ প্রমাণীকরণ তথ্য না থাকলে আপনি এই ত্রুটিটি পাবেন। উদাহরণস্বরূপ, যদি JWT টোকেনটি ট্রিপ আইডি ছাড়া স্বাক্ষরিত হয় অথবা JWT টোকেনটির মেয়াদ শেষ হয়ে গিয়ে থাকে। |
| ৪০৩ | অনুমতি_প্রত্যাখ্যাত | ক্লায়েন্টের পর্যাপ্ত অনুমতি না থাকলে (উদাহরণস্বরূপ, কনজিউমার রোলের কোনো ব্যবহারকারী updateTrip কল করার চেষ্টা করলে), JWT টোকেনটি অবৈধ হলে, অথবা ক্লায়েন্ট প্রজেক্টের জন্য API সক্রিয় করা না থাকলে আপনি এই ত্রুটিটি পাবেন। JWT টোকেনটি অনুপস্থিত থাকতে পারে অথবা টোকেনটি এমন একটি ট্রিপ আইডি দিয়ে স্বাক্ষরিত হতে পারে যা অনুরোধ করা ট্রিপ আইডির সাথে মেলে না। |
| ৪২৯ | সম্পদ নিঃশেষিত | রিসোর্স কোটা শূন্য অথবা ট্র্যাফিকের হার সীমা অতিক্রম করেছে। |
| ৫০৩ | অনুপলব্ধ | পরিষেবা অনুপলব্ধ। সাধারণত সার্ভার ডাউন থাকে। |
| ৫০৪ | সময়সীমা অতিক্রম করেছে | অনুরোধের সময়সীমা অতিক্রম করেছে। এই ত্রুটিটি কেবল তখনই ঘটে যখন কলার মেথডটির ডিফল্ট সময়সীমার চেয়ে কম একটি সময়সীমা নির্ধারণ করে (অর্থাৎ, সার্ভারের অনুরোধটি প্রক্রিয়া করার জন্য নির্ধারিত সময়সীমা যথেষ্ট নয়) এবং অনুরোধটি সেই সময়সীমার মধ্যে সম্পন্ন হয় না। |
কনজিউমার এসডিকে ত্রুটিগুলি পরিচালনা করুন
কনজিউমার এসডিকে একটি কলব্যাক মেকানিজম ব্যবহার করে কনজিউমার অ্যাপে ট্রিপ আপডেটের ত্রুটি পাঠায়। কলব্যাক প্যারামিটারটি একটি প্ল্যাটফর্ম-নির্দিষ্ট রিটার্ন টাইপ (অ্যান্ড্রয়েডে TripUpdateError এবং iOS-এ NSError )।
স্ট্যাটাস কোডগুলি বের করুন
কলব্যাকে পাঠানো ত্রুটিগুলি সাধারণত gRPC ত্রুটি হয়ে থাকে, এবং আপনি একটি স্ট্যাটাস কোডের আকারে সেগুলি থেকে অতিরিক্ত তথ্যও বের করতে পারেন। স্ট্যাটাস কোডগুলির সম্পূর্ণ তালিকার জন্য, "স্ট্যাটাস কোড এবং gRPC-তে তাদের ব্যবহার" দেখুন।
জাভা
onTripUpdateError() থেকে ফেরত আসা TripUpdateError থেকে আপনি একটি gRPC স্ট্যাটাস কোড বের করতে পারেন, যা ত্রুটি সম্পর্কে বিস্তারিত তথ্য প্রদান করে।
// Called when there is a trip update error.
@Override
public void onTripUpdateError(TripInfo tripInfo, TripUpdateError error) {
Status.Code code = error.getStatusCode();
}
কোটলিন
onTripUpdateError() থেকে ফেরত আসা TripUpdateError থেকে আপনি একটি gRPC স্ট্যাটাস কোড বের করতে পারেন, যা ত্রুটি সম্পর্কে বিস্তারিত তথ্য প্রদান করে।
// Called when there is a trip update error.
override fun onTripUpdateError(tripInfo: TripInfo, error: TripUpdateError) {
val code = error.getStatusCode()
}
স্ট্যাটাস কোড ব্যাখ্যা করুন
স্ট্যাটাস কোড দুই ধরনের ত্রুটিকে অন্তর্ভুক্ত করে: সার্ভার ও নেটওয়ার্ক-সম্পর্কিত ত্রুটি এবং ক্লায়েন্ট-সাইড ত্রুটি।
সার্ভার এবং নেটওয়ার্ক ত্রুটি
নিম্নলিখিত স্ট্যাটাস কোডগুলো নেটওয়ার্ক বা সার্ভার ত্রুটির জন্য ব্যবহৃত হয় এবং এগুলো সমাধান করার জন্য আপনার কোনো পদক্ষেপ নেওয়ার প্রয়োজন নেই। কনজিউমার এসডিকে স্বয়ংক্রিয়ভাবে এগুলো থেকে পুনরুদ্ধার করে।
| স্ট্যাটাস কোড | বর্ণনা |
|---|---|
| গর্ভপাত করা হয়েছে | সার্ভারটি প্রতিক্রিয়া পাঠানো বন্ধ করে দিয়েছে। সাধারণত সার্ভারের সমস্যার কারণে এমনটা হয়ে থাকে। |
| বাতিল করা হয়েছে | সার্ভার বহির্গামী প্রতিক্রিয়াটি বন্ধ করে দিয়েছে। এটি সাধারণত ঘটে যখন অ্যাপটি ব্যাকগ্রাউন্ডে পাঠানো হলে, অথবা যখন অবস্থার পরিবর্তন হয় ভোক্তা অ্যাপ। |
| বাধাগ্রস্ত | |
| সময়সীমা অতিক্রম করেছে | সার্ভারটি সাড়া দিতে অনেক বেশি সময় নিয়েছে। |
| অনুপলব্ধ | সার্ভারটি অনুপলব্ধ ছিল। সাধারণত নেটওয়ার্ক সমস্যার কারণে এমনটা হয়ে থাকে। |
ক্লায়েন্টের ত্রুটি
নিম্নলিখিত স্ট্যাটাস কোডগুলি ক্লায়েন্ট ত্রুটির জন্য, এবং এগুলি সমাধান করার জন্য আপনাকে অবশ্যই ব্যবস্থা নিতে হবে। আপনি জার্নি শেয়ারিং বন্ধ না করা পর্যন্ত কনজিউমার এসডিকে ট্রিপটি রিফ্রেশ করার জন্য পুনরায় চেষ্টা করতে থাকে, কিন্তু আপনি ব্যবস্থা না নেওয়া পর্যন্ত এটি পুনরুদ্ধার হবে না।
| স্ট্যাটাস কোড | বর্ণনা |
|---|---|
| অবৈধ আর্গুমেন্ট | কনজিউমার অ্যাপটি একটি অবৈধ ট্রিপের নাম উল্লেখ করেছে; ট্রিপের নামটি অবশ্যই providers/{provider_id}/trips/{trip_id} ফরম্যাট অনুসরণ করবে। |
| পাওয়া যায়নি | ভ্রমণটি কখনোই তৈরি করা হয়নি। |
| অনুমতি_প্রত্যাখ্যাত | কনজিউমার অ্যাপটির পর্যাপ্ত অনুমতি নেই। এই ত্রুটিটি ঘটে যখন:
|
| সম্পদ নিঃশেষিত | রিসোর্স কোটা শূন্য, অথবা ট্র্যাফিক প্রবাহের হার গতিসীমা অতিক্রম করেছে। |
| অপ্রমাণিত | অবৈধ JWT টোকেনের কারণে অনুরোধটির প্রমাণীকরণ ব্যর্থ হয়েছে। এই ত্রুটিটি ঘটে যখন JWT টোকেনটি ট্রিপ আইডি ছাড়া স্বাক্ষরিত হয়, অথবা যখন JWT টোকেনটির মেয়াদ শেষ হয়ে যায়। |