Android में यात्रा को फ़ॉलो करें

प्लैटफ़ॉर्म चुनें: Android iOS JavaScript

जब आप किसी यात्रा को फ़ॉलो करते हैं, तो आपका उपभोक्ता ऐप्लिकेशन उसके लिए सही वाहन चुन सकते हैं. ऐसा करने के लिए, आपके ऐप्लिकेशन को चालू करना होगा यात्रा को फ़ॉलो करना, यात्रा की जानकारी अपडेट करना, और यात्रा के दौरान उसे फ़ॉलो करना बंद करना पूरा करता है.

इस दस्तावेज़ में बताया गया है कि यह प्रोसेस कैसे काम करती है.

शुरू करने से पहले

पक्का करें कि आपने ये चीज़ें सेट अप की हों:

  • आपके उपभोक्ता ऐप्लिकेशन के लिए बैकएंड सेवाएं उपलब्ध हैं. साथ ही, आपकी सेवाएं भी उपलब्ध हैं ग्राहकों के मिलान के लिए, वाहनों की जानकारी देने वाली सेवा का इस्तेमाल किया जा रहा है.

  • आपने अपने ऐप्लिकेशन के लिए मैप सेट अप किया हो.

किसी यात्रा को फ़ॉलो करना शुरू करें

जब आपका बैकएंड सर्वर किसी उपभोक्ता को वाहन से मैच करता है, तो इसका इस्तेमाल करें यात्रा शेयर करने की सुविधा का इस्तेमाल करके, यात्रा फ़ॉलो करने के लिए 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()
  }
}

यात्रा की प्रोग्रेस अपडेट करना

यात्रा की जानकारी अपडेट करने के लिए, जैसे कि वाहन को कितनी दूरी की ज़रूरत है पहुंचने से पहले ही यात्रा कर सकते हैं और पहुंचने के अनुमानित समय की जानकारी देते हैं, तो आपका ऐप्लिकेशन लिसनर को रजिस्टर और कॉन्फ़िगर करें, जैसा कि नीचे दिए गए उदाहरणों में दिखाया गया है.

  1. 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?,
        ) {
          // ...
        }
    
      // ...
    })
    
  2. 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, उस क्लाउड प्रोजेक्ट का आईडी होना चाहिए जिसका मालिकाना हक ऐप्लिकेशन है.
401 UNAUTHENTICATED पुष्टि करने के लिए मान्य क्रेडेंशियल न होने पर, आपको गड़बड़ी का यह मैसेज मिलता है. उदाहरण के लिए, अगर JWT टोकन पर ट्रिप आईडी के बिना हस्ताक्षर किया गया है या JWT टोकन की समयसीमा खत्म हो गई है.
403 PERMISSION_DENIED गड़बड़ी का यह मैसेज तब मिलता है, जब क्लाइंट के पास ज़रूरी अनुमति नहीं है (उदाहरण के लिए, उपभोक्ता की भूमिका वाला कोई उपयोगकर्ता updatedTrip को कॉल करने की कोशिश करता है), अगर JWT टोकन अमान्य है या क्लाइंट प्रोजेक्ट के लिए API चालू नहीं है. ऐसा हो सकता है कि JWT टोकन मौजूद न हो या टोकन को किसी ऐसे ट्रिप आईडी से साइन किया गया हो जो अनुरोध की गई यात्रा के आईडी से मेल नहीं खाता.
429 RESOURCE_EXHAUSTED संसाधन कोटा शून्य है या ट्रैफ़िक की दर सीमा से ज़्यादा है.
503 हवा की क्वालिटी की जानकारी उपलब्ध नहीं है सेवा उपलब्ध नहीं है. आम तौर पर, सर्वर काम नहीं करता है.
504 DEADLINE_EXCEEDED अनुरोध की समयसीमा खत्म हो गई है. यह गड़बड़ी तब ही होती है, जब कॉलर वह समयसीमा जो उस तरीके से सेट की गई डिफ़ॉल्ट समयसीमा से कम हो. इसका मतलब है कि अनुरोध की गई समयसीमा, अनुरोध को प्रोसेस करने के लिए सर्वर के लिए काफ़ी नहीं है) और तय समयसीमा में अनुरोध पूरा नहीं हुआ.

उपभोक्ता SDK टूल से जुड़ी गड़बड़ियों को मैनेज करना

उपभोक्ता SDK टूल, कॉलबैक का इस्तेमाल करके उपभोक्ता ऐप्लिकेशन को यात्रा अपडेट करने से जुड़ी गड़बड़ियां भेजता है मैकेनिज़्म. कॉलबैक पैरामीटर, प्लैटफ़ॉर्म के हिसाब से रिटर्न टाइप होता है ( TripUpdateError Android पर और NSError डालें).

स्टेटस कोड एक्सट्रैक्ट करना

कॉलबैक को पास की जाने वाली गड़बड़ियां आम तौर पर gRPC गड़बड़ियां होती हैं. इसके अलावा, उनसे अतिरिक्त जानकारी हासिल कर सकते हैं. स्टेटस कोड की पूरी सूची, देखें स्टेटस कोड और gRPC में उनका इस्तेमाल.

Java

gRPC स्टेटस कोड एक्सट्रैक्ट किया जा सकता है, जो गड़बड़ी के बारे में जानकारी देता है onTripUpdateError() से लौटाए गए TripUpdateError से.

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

Kotlin

gRPC स्टेटस कोड एक्सट्रैक्ट किया जा सकता है, जो गड़बड़ी के बारे में जानकारी देता है onTripUpdateError() से लौटाए गए TripUpdateError से.

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

स्थिति कोड को समझना

स्टेटस कोड में दो तरह की गड़बड़ियां शामिल होती हैं: सर्वर और नेटवर्क से जुड़ी गड़बड़ियां और क्लाइंट-साइड गड़बड़ियां.

सर्वर और नेटवर्क की गड़बड़ियां

नीचे दिए गए स्टेटस कोड, नेटवर्क या सर्वर की गड़बड़ियों के लिए हैं और आपको उन्हें हल करने के लिए कोई कार्रवाई करने की ज़रूरत नहीं है. उपभोक्ता SDK टूल अपने-आप ठीक से काम कर रहा है.

स्थिति कोडब्यौरा
ABORTED सर्वर ने जवाब भेजना बंद कर दिया. आम तौर पर, ऐसा सर्वर की समस्या की वजह से होता है.
रद्द कर दी गई सर्वर ने आउटगोइंग जवाब बंद कर दिया. यह सामान्य रूप से होता है तब होता है जब
ऐप्लिकेशन को बैकग्राउंड में भेजा जाता है या जब बैकग्राउंड में कोई बदलाव होता है,
उपभोक्ता ऐप्लिकेशन.
INTERRUPTED
DEADLINE_EXCEEDED सर्वर ने जवाब देने में बहुत ज़्यादा समय लिया.
हवा की क्वालिटी की जानकारी उपलब्ध नहीं है सर्वर उपलब्ध नहीं है. आम तौर पर, ऐसा नेटवर्क की वजह से होता है समस्या.

क्लाइंट से जुड़ी गड़बड़ियां

यहां दिए गए स्टेटस कोड क्लाइंट की गड़बड़ियों के लिए हैं. इसलिए, आपको इन चीज़ों के लिए कार्रवाई करनी होगी उनका समाधान करें. उपभोक्ता SDK टूल तब तक यात्रा को रीफ़्रेश करने की कोशिश करता रहता है, जब तक शेयर करना बंद कर दें, लेकिन यह तब तक वापस नहीं आएगा, जब तक आप कार्रवाई नहीं करते.

स्थिति कोडब्यौरा
INVALID_ARGUMENT उपभोक्ता ऐप्लिकेशन ने यात्रा का गलत नाम दिया है; यात्रा का नाम यह होना चाहिए providers/{provider_id}/trips/{trip_id} फ़ॉर्मैट को फ़ॉलो करें.
NOT_FOUND यात्रा की जानकारी कभी नहीं बनाई गई.
PERMISSION_DENIED Consumer ऐप्लिकेशन के पास ज़रूरी अनुमतियां नहीं हैं. यह गड़बड़ी तब होती है, जब:
  • उपभोक्ता ऐप्लिकेशन को अनुमतियां नहीं दी गई हैं
  • Google Cloud में प्रोजेक्ट के लिए उपभोक्ता SDK टूल चालू नहीं है कंसोल.
  • JWT टोकन मौजूद नहीं है या अमान्य है.
  • JWT टोकन को किसी ऐसे यात्रा आईडी से साइन किया गया है जो यात्रा का अनुरोध किया है.
RESOURCE_EXHAUSTED संसाधन कोटा शून्य है या ट्रैफ़िक फ़्लो की दर गति सीमा.
पुष्टि नहीं की गई अमान्य JWT टोकन के कारण अनुरोध प्रमाणीकरण विफल रहा. यह गड़बड़ी तब होती है, जब JWT टोकन किसी ट्रिप आईडी के बिना साइन किया जाता है या जब JWT टोकन खत्म हो जाता है.