जब कोई उपयोगकर्ता किसी यात्रा को फ़ॉलो करता है, तो आपके ऐप्लिकेशन में उसे उस यात्रा के लिए तय किए गए वाहन की जगह दिखती है. इसके लिए, आपके ऐप्लिकेशन को यात्रा को फ़ॉलो करना होगा, यात्रा की प्रोग्रेस अपडेट करनी होगी, और यात्रा पूरी होने पर उसे फ़ॉलो करना बंद करना होगा.
इस दस्तावेज़ में, इस प्रोसेस के काम करने के तरीके के बारे में बताया गया है.
शुरू करने से पहले
पक्का करें कि आपने ये चीज़ें सेट अप कर ली हों:
आपके ऐप्लिकेशन के लिए, बैकएंड की सेवाएं चालू हों और उपयोगकर्ताओं को वाहनों से मैच करने वाली आपकी सेवाएं काम कर रही हों.
आपने अपने ऐप्लिकेशन के लिए कोई मैप सेट अप किया हो.
यात्रा को फ़ॉलो करना
जब आपका बैकएंड सर्वर, किसी उपयोगकर्ता को किसी वाहन से मैच करता है, तो यात्रा को फ़ॉलो करने के लिए JourneySharingSession का इस्तेमाल करें.
यहां दिए गए सैंपल कोड में, व्यू लोड होने के बाद यात्रा को फ़ॉलो करने का तरीका बताया गया है.
Java
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();
}
}
}
Kotlin
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ऑब्जेक्ट पर कोई लिसनर रजिस्टर करें.Java
// 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) { // ... } // ... });Kotlin
// 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का इस्तेमाल करके, अपनी यात्रा के लिए लिसनर कॉन्फ़िगर करें.Java
// Set refresh interval to 2 seconds. TripModelOptions tripOptions = TripModelOptions.builder().setRefreshIntervalMillis(2000).build(); tripModel.setTripModelOptions(tripOptions);Kotlin
// Set refresh interval to 2 seconds. val tripOptions = TripModelOptions.builder().setRefreshIntervalMillis(2000).build() tripModel.setTripModelOptions(tripOptions)
यात्रा को फ़ॉलो करना बंद करना
पक्का करें कि आपका ऐप्लिकेशन, यात्रा को फ़ॉलो करना बंद कर दे. जैसे, जब ड्राइवर, बैकएंड पर यात्रा को COMPLETE के तौर पर मार्क कर देता है, तो यात्रा को फ़ॉलो करने की ज़रूरत नहीं होती. यात्रा की जानकारी शेयर करने की सुविधा बंद करने से, Fleet Engine को बेवजह के नेटवर्क अनुरोध नहीं भेजे जाते. साथ ही, मेमोरी लीक होने से भी बचा जा सकता है.
यात्रा को फ़ॉलो करना बंद करने के लिए, JourneySharingSession का इस्तेमाल करें. इसके लिए, यहां दिया गया सैंपल कोड देखें.
Java
public class MainActivity extends AppCompatActivity
implements ConsumerViewModel.JourneySharingListener {
// Class implementation
@Override
protected void onDestroy() {
super.onDestroy();
if (journeySharingSession != null) {
journeySharingSession.stop();
}
}
}
Kotlin
class SampleAppActivity : AppCompatActivity(), ConsumerViewModel.JourneySharingListener {
// Class implementation
override fun onDestroy() {
super.onDestroy()
journeySharingSession?.stop()
}
}
यात्रा से जुड़ी गड़बड़ियों को ठीक करना
onTripRefreshError तरीके से, यात्रा की निगरानी के दौरान होने वाली गड़बड़ियों के बारे में पता चलता है. गड़बड़ी के मैसेज, Google Cloud की गड़बड़ी के स्टैंडर्ड के मुताबिक होते हैं. गड़बड़ी के मैसेज की परिभाषाओं और सभी गड़बड़ी कोड के बारे में जानने के लिए, Google Cloud की गड़बड़ियों से जुड़ा दस्तावेज़ देखें.
यात्रा की निगरानी के दौरान होने वाली कुछ सामान्य गड़बड़ियां यहां दी गई हैं:
| HTTP | RPC | ब्यौरा |
|---|---|---|
| 400 | INVALID_ARGUMENT | क्लाइंट ने यात्रा का अमान्य नाम डाला है. यात्रा का नाम,
फ़ॉर्मैट providers/{provider_id}/trips/{trip_id} में होना चाहिए.
provider_id, सेवा देने वाली कंपनी के मालिकाना हक वाले Cloud प्रोजेक्ट का आईडी होना चाहिए. |
| 401 | UNAUTHENTICATED | अगर प्रमाणीकरण के मान्य क्रेडेंशियल नहीं हैं, तो आपको यह गड़बड़ी दिखती है. उदाहरण के लिए, अगर JWT टोकन पर यात्रा के आईडी के बिना हस्ताक्षर किया गया है या JWT टोकन की समयसीमा खत्म हो गई है. |
| 403 | PERMISSION_DENIED | अगर क्लाइंट के पास ज़रूरी अनुमति नहीं है, तो आपको यह गड़बड़ी दिखती है . उदाहरण के लिए, अगर उपयोगकर्ता की भूमिका 'उपयोगकर्ता' है और वह updateTrip को कॉल करने की कोशिश करता है. इसके अलावा, अगर JWT टोकन अमान्य है या क्लाइंट प्रोजेक्ट के लिए एपीआई चालू नहीं है, तब भी यह गड़बड़ी दिखती है. ऐसा हो सकता है कि JWT टोकन मौजूद न हो या टोकन पर उस यात्रा के आईडी से हस्ताक्षर किया गया हो जो अनुरोध किए गए यात्रा के आईडी से मेल नहीं खाता. |
| 429 | RESOURCE_EXHAUSTED | संसाधन का कोटा खत्म हो गया है या ट्रैफ़िक की दर, सीमा से ज़्यादा है. |
| 503 | UNAVAILABLE | सेवा उपलब्ध नहीं है. आम तौर पर, सर्वर काम नहीं कर रहा होता है. |
| 504 | DEADLINE_EXCEEDED | अनुरोध का समय खत्म हो गया. यह गड़बड़ी सिर्फ़ तब होती है, जब कॉलर कोई ऐसी समयसीमा सेट करता है जो मेथड की डिफ़ॉल्ट समयसीमा से कम होती है. इसका मतलब है कि अनुरोध की गई समयसीमा, सर्वर को अनुरोध प्रोसेस करने के लिए काफ़ी नहीं है. साथ ही, अनुरोध समयसीमा के अंदर पूरा नहीं हुआ. |
Consumer SDK टूल की गड़बड़ियों को ठीक करना
Consumer SDK टूल, कॉलबैक मैकेनिज़्म का इस्तेमाल करके, यात्रा की जानकारी अपडेट करने से जुड़ी गड़बड़ियों को उपयोगकर्ता के ऐप्लिकेशन पर भेजता है. कॉलबैक पैरामीटर, प्लैटफ़ॉर्म के हिसाब से अलग-अलग तरह के होते हैं (
TripUpdateError
जैसे, Android पर और
NSError
iOS पर).
स्टेटस कोड निकालना
कॉलबैक को पास की गई गड़बड़ियां आम तौर पर, gRPC गड़बड़ियां होती हैं. साथ ही, इनसे स्टेटस कोड के तौर पर अतिरिक्त जानकारी भी निकाली जा सकती है. स्टेटस कोड की पूरी सूची देखने के लिए, gRPC में स्टेटस कोड और उनका इस्तेमाल देखें.
Java
`onTripUpdateError()` से मिले `TripUpdateError` से, gRPC स्टेटस कोड निकाला जा सकता है. इससे गड़बड़ी के बारे में जानकारी मिलती है
.
// Called when there is a trip update error.
@Override
public void onTripUpdateError(TripInfo tripInfo, TripUpdateError error) {
Status.Code code = error.getStatusCode();
}
Kotlin
`onTripUpdateError()` से मिले `TripUpdateError` से, gRPC स्टेटस कोड निकाला जा सकता है. इससे गड़बड़ी के बारे में जानकारी मिलती है
.
// Called when there is a trip update error.
override fun onTripUpdateError(tripInfo: TripInfo, error: TripUpdateError) {
val code = error.getStatusCode()
}
स्टेटस कोड को समझना
स्टेटस कोड में दो तरह की गड़बड़ियां शामिल होती हैं: सर्वर और नेटवर्क से जुड़ी गड़बड़ियां, और क्लाइंट-साइड गड़बड़ियां.
सर्वर और नेटवर्क की गड़बड़ियां
यहां दिए गए स्टेटस कोड, नेटवर्क या सर्वर की गड़बड़ियों के लिए हैं. इन्हें ठीक करने के लिए, आपको कोई कार्रवाई करने की ज़रूरत नहीं है. Consumer SDK टूल, इनसे अपने-आप ठीक हो जाता है.
| स्टेटस कोड | ब्यौरा |
|---|---|
| ABORTED | सर्वर ने जवाब भेजना बंद कर दिया. आम तौर पर, ऐसा सर्वर में कोई समस्या होने की वजह से होता है. |
| CANCELLED | सर्वर ने आउटगोइंग जवाब को खत्म कर दिया. आम तौर पर, ऐसा तब होता है, जब
ऐप्लिकेशन को बैकग्राउंड में भेजा जाता है या जब
उपयोगकर्ता के ऐप्लिकेशन में कोई बदलाव होता है. |
| INTERRUPTED | |
| DEADLINE_EXCEEDED | सर्वर को जवाब देने में बहुत ज़्यादा समय लगा. |
| UNAVAILABLE | सर्वर उपलब्ध नहीं था. आम तौर पर, ऐसा नेटवर्क में कोई समस्या होने की वजह से होता है. |
क्लाइंट गड़बड़ियां
यहां दिए गए स्टेटस कोड, क्लाइंट गड़बड़ियों के लिए हैं. इन्हें ठीक करने के लिए, आपको कार्रवाई करनी होगी. Consumer SDK टूल, यात्रा की जानकारी को रीफ़्रेश करने की कोशिश तब तक करता रहता है, जब तक कि यात्रा की जानकारी शेयर करने की सुविधा बंद नहीं की जाती. हालांकि, जब तक कोई कार्रवाई नहीं की जाती, तब तक यह ठीक नहीं होगा.
| स्टेटस कोड | ब्यौरा |
|---|---|
| INVALID_ARGUMENT | उपभोक्ता ऐप्लिकेशन ने यात्रा का अमान्य नाम डाला है. यात्रा का नाम,
providers/{provider_id}/trips/{trip_id} फ़ॉर्मैट में होना चाहिए.
|
| NOT_FOUND | यात्रा कभी बनाई ही नहीं गई. |
| PERMISSION_DENIED | उपयोगकर्ता के ऐप्लिकेशन के पास ज़रूरी अनुमतियां नहीं हैं. यह गड़बड़ी तब होती है, जब:
|
| RESOURCE_EXHAUSTED | संसाधन का कोटा खत्म हो गया है या ट्रैफ़िक की दर, स्पीड लिमिट से ज़्यादा है. |
| UNAUTHENTICATED | अमान्य JWT टोकन की वजह से, अनुरोध की पुष्टि नहीं हो सकी. यह गड़बड़ी तब होती है, जब JWT टोकन पर यात्रा के आईडी के बिना हस्ताक्षर किया गया हो या जब JWT टोकन की समयसीमा खत्म हो गई हो. |