यात्रा को फ़ॉलो करने पर, आपका उपभोक्ता ऐप्लिकेशन, उपभोक्ता को सही वाहन की जगह की जानकारी दिखाता है. इसके लिए, आपके ऐप्लिकेशन को यात्रा को फ़ॉलो करना होगा, यात्रा की प्रोग्रेस को अपडेट करना होगा, और यात्रा पूरी होने पर उसे फ़ॉलो करना बंद करना होगा.
इस दस्तावेज़ में बताया गया है कि यह प्रोसेस कैसे काम करती है.
शुरू करने से पहले
पक्का करें कि आपने ये चीज़ें सेट अप की हों:
आपके उपभोक्ता ऐप्लिकेशन के लिए बैकएंड सेवाएं उपलब्ध हैं. साथ ही, उपभोक्ताओं को वाहनों से मैच करने वाली आपकी सेवाएं काम कर रही हैं.
आपने अपने ऐप्लिकेशन के लिए मैप सेट अप किया हो.
किसी यात्रा को फ़ॉलो करना
जब आपका बैकएंड सर्वर, किसी उपभोक्ता को वाहन से मैच कर लेता है, तब यात्रा को फ़ॉलो करना शुरू करने के लिए 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)
किसी यात्रा को फ़ॉलो करना बंद करना
पक्का करें कि जब किसी यात्रा की ज़रूरत न हो, तो आपका ऐप्लिकेशन उसे ट्रैक करना बंद कर दे. जैसे, जब ड्राइवर बैकएंड में यात्रा को 'पूरा हो गया' के तौर पर मार्क कर देता है. यात्रा की जानकारी शेयर करने की सुविधा बंद करने से, 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 | प्रमाणीकरण नहीं किया गया | अगर प्रमाणीकरण के मान्य क्रेडेंशियल मौजूद नहीं हैं, तो आपको यह गड़बड़ी दिखेगी. उदाहरण के लिए, अगर JWT टोकन पर ट्रिप आईडी के बिना हस्ताक्षर किया गया है या JWT टोकन की समयसीमा खत्म हो गई है. |
403 | PERMISSION_DENIED | अगर क्लाइंट के पास ज़रूरी अनुमति नहीं है, तो आपको यह गड़बड़ी दिखेगी. उदाहरण के लिए, अगर उपभोक्ता की भूमिका वाला कोई उपयोगकर्ता updateTrip को कॉल करने की कोशिश करता है. इसके अलावा, अगर JWT टोकन अमान्य है या क्लाइंट प्रोजेक्ट के लिए एपीआई चालू नहीं है, तब भी आपको यह गड़बड़ी दिखेगी. ऐसा हो सकता है कि JWT टोकन मौजूद न हो या टोकन पर उस यात्रा के आईडी से हस्ताक्षर किया गया हो जो अनुरोध किए गए यात्रा के आईडी से मेल नहीं खाता. |
429 | RESOURCE_EXHAUSTED | संसाधन का कोटा शून्य है या ट्रैफ़िक की दर तय सीमा से ज़्यादा है. |
503 | हवा की क्वालिटी की जानकारी उपलब्ध नहीं है | सेवा उपलब्ध नहीं है. आम तौर पर, सर्वर काम नहीं कर रहा होता है. |
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, इन गड़बड़ियों से अपने-आप ठीक हो जाता है.
स्थिति कोड | ब्यौरा |
---|---|
रद्द किया गया | सर्वर ने जवाब भेजना बंद कर दिया है. आम तौर पर, यह समस्या सर्वर की वजह से होती है. |
रद्द कर दी गई | सर्वर ने आउटगोइंग जवाब को बंद कर दिया. आम तौर पर, ऐसा तब होता है, जब ऐप्लिकेशन को बैकग्राउंड में भेजा जाता है या जब उपभोक्ता ऐप्लिकेशन की स्थिति में बदलाव होता है. |
INTERRUPTED | |
DEADLINE_EXCEEDED | सर्वर को जवाब देने में बहुत ज़्यादा समय लगा. |
हवा की क्वालिटी की जानकारी उपलब्ध नहीं है | सर्वर उपलब्ध नहीं था. आम तौर पर, ऐसा नेटवर्क की समस्या की वजह से होता है. |
क्लाइंट से जुड़ी गड़बड़ियां
यहां दिए गए स्टेटस कोड, क्लाइंट की गड़बड़ियों के लिए हैं. आपको इन्हें ठीक करने के लिए कार्रवाई करनी होगी. उपयोगकर्ता के डिवाइस पर मौजूद Consumer SDK, यात्रा की जानकारी को तब तक रीफ़्रेश करने की कोशिश करता रहेगा, जब तक यात्रा की जानकारी शेयर करने की सुविधा बंद नहीं कर दी जाती. हालांकि, जब तक कोई कार्रवाई नहीं की जाती, तब तक यह सुविधा वापस नहीं आएगी.
स्थिति कोड | ब्यौरा |
---|---|
INVALID_ARGUMENT | उपयोगकर्ता ऐप्लिकेशन ने यात्रा का अमान्य नाम दिया है; यात्रा का नाम providers/{provider_id}/trips/{trip_id} फ़ॉर्मैट में होना चाहिए.
|
NOT_FOUND | यात्रा कभी बनाई ही नहीं गई. |
PERMISSION_DENIED | उपयोगकर्ता के ऐप्लिकेशन के पास ज़रूरी अनुमतियां नहीं हैं. यह गड़बड़ी तब होती है, जब:
|
RESOURCE_EXHAUSTED | संसाधन का कोटा शून्य है या ट्रैफ़िक फ़्लो की दर, स्पीड लिमिट से ज़्यादा है. |
प्रमाणीकरण नहीं किया गया | अमान्य JWT टोकन की वजह से, अनुरोध की पुष्टि नहीं हो सकी. यह गड़बड़ी तब होती है, जब JWT टोकन पर ट्रिप आईडी के बिना हस्ताक्षर किया जाता है या जब JWT टोकन की समयसीमा खत्म हो जाती है. |