Android के लिए ड्राइवर SDK टूल का इस्तेमाल शुरू करना

सिस्टम में कम से कम यह कॉन्फ़िगरेशन होना चाहिए

मोबाइल डिवाइस पर Android 6.0 वर्शन होना ज़रूरी है (एपीआई लेवल 23) या इसके बाद के वर्शन.

बिल्ड और डिपेंडेंसी का कॉन्फ़िगरेशन

ड्राइवर SDK टूल के 4.99 और इसके बाद के वर्शन, Google Maven रिपॉज़िटरी में उपलब्ध हैं.

ग्रेडल

अपनी build.gradle फ़ाइल में ये चीज़ें जोड़ें:

repositories {
    ...
    google()
}

Maven

अपनी pom.xml फ़ाइल में ये चीज़ें जोड़ें:

<project>
  ...
  <repositories>
    <repository>
      <id>google-maven-repository</id>
      <url>https://maven.google.com</url>
    </repository>
  </repositories>
  ...
</project>

प्रोजेक्ट कॉन्फ़िगरेशन

ड्राइवर SDK टूल का इस्तेमाल करने के लिए, आपके ऐप्लिकेशन को minSdkVersion को टारगेट करना होगा 23 या उससे ज़्यादा. ज़्यादा जानकारी के लिए, यह देखें रिलीज़ नोट.

ड्राइवर SDK टूल से बने ऐप्लिकेशन को चलाने के लिए, Android डिवाइस में Google Play services इंस्टॉल किया गया.

अपना डेवलपमेंट प्रोजेक्ट सेट अप करें

अपना डेवलपमेंट प्रोजेक्ट सेट अप करने और एपीआई पासकोड पाने के लिए Google Cloud Console पर प्रोजेक्ट के लिए:

  1. नया Google Cloud Console बनाएं प्रोजेक्ट चुनें या इस्तेमाल करने के लिए कोई मौजूदा प्रोजेक्ट चुनें ड्राइवर SDK टूल से साइन इन किया है. इस तारीख तक कुछ मिनट इंतज़ार करें नया प्रोजेक्ट, Google Cloud Console पर दिखता है.

  2. डेमो ऐप्लिकेशन चलाने के लिए, आपके प्रोजेक्ट के पास Maps SDK का ऐक्सेस होना चाहिए Android के लिए. Google Cloud Console में जाकर, एपीआई और सेवाएं > लाइब्रेरी पर जाएं, फिर इसके लिए Maps SDK टूल खोजें और चालू करें Android.

  3. चुनकर प्रोजेक्ट के लिए एपीआई पासकोड पाएं एपीआई और सेवाएं > क्रेडेंशियल > क्रेडेंशियल बनाएं > API पासकोड. API कुंजी प्राप्त करने के बारे में ज़्यादा जानकारी के लिए, यहां देखें एपीआई पासकोड पाएं.

अपने ऐप्लिकेशन में ड्राइवर SDK टूल जोड़ना

ड्राइवर SDK टूल, Google Maven रिपॉज़िटरी में उपलब्ध है. कॉन्टेंट बनाने रिपॉज़िटरी में SDK टूल का Project Object Model (.pom) फ़ाइलें और Javadocs शामिल होते हैं. अपने ऐप्लिकेशन में ड्राइवर SDK टूल जोड़ने के लिए:

  1. अपने Gradle या Maven कॉन्फ़िगरेशन में ये डिपेंडेंसी जोड़ें, इसके चयनित वर्शन के लिए VERSION_NUMBER प्लेसहोल्डर को प्रतिस्थापित करना ड्राइवर SDK टूल.

    ग्रेडल

    अपने build.gradle में यह जोड़ें:

    dependencies {
      ...
      implementation 'com.google.android.libraries.mapsplatform.transportation:transportation-driver:[VERSION_NUMBER]'
    }
    

    Maven

    अपने pom.xml में यह जोड़ें:

    <dependencies>
      ...
      <dependency>
        <groupId>com.google.android.libraries.mapsplatform.transportation.driver</groupId>
        <artifactId>transportation-driver</artifactId>
        <version>[VERSION_NUMBER]</version>
      </dependency>
    </dependencies>
    
  2. ड्राइवर SDK, नेविगेशन SDK पर निर्भर करता है. यह डिपेंडेंसी इस तरह से कॉन्फ़िगर की गई है इस तरीके से अगर नेविगेशन SDK के किसी खास वर्शन की ज़रूरत पड़ती है, तो वह साफ़ तौर पर, नीचे बताए गए कॉन्फ़िगरेशन की फ़ाइल में बताया गया है, बताए गए कोड ब्लॉक को छोड़ने से, प्रोजेक्ट हमेशा डाउनलोड हो जाएगा मेजर रिलीज़ वर्शन में नेविगेशन SDK टूल का सबसे नया वर्शन. ध्यान दें कि ड्राइवर SDK टूल के नए वर्शन के व्यवहार और नेविगेशन SDK टूल को रिलीज़ करने से पहले, उसे सख्ती से टेस्ट किया जाता है.

    अपने डेवलपमेंट और रिलीज़ के डिपेंडेंसी कॉन्फ़िगरेशन को व्यवस्थित करें पर्यावरण को ध्यान में रखते हुए काम करती हैं.

    ग्रेडल

    अपने build.gradle में यह जोड़ें:

    dependencies {
      ...
      implementation 'com.google.android.libraries.navigation:navigation:5.0.0'
    }
    

    Maven

    अपने pom.xml में यह जोड़ें:

    <dependencies>
      ...
      <dependency>
        <groupId>com.google.android.libraries.navigation</groupId>
        <artifactId>navigation</artifactId>
        <version>5.0.0</version>
      </dependency>
    </dependencies>
    

अपने ऐप्लिकेशन में एपीआई पासकोड जोड़ना

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

इस सेक्शन में, एपीआई पासकोड को सेव करने का तरीका बताया गया है, ताकि इसे ज़्यादा सुरक्षित रखा जा सके आपके ऐप्लिकेशन में मौजूद है. आपको अपने वर्शन में एपीआई पासकोड की जांच नहीं करनी चाहिए कंट्रोल सिस्टम पर काम करता है. इसे local.properties फ़ाइल में सेव किया जाना चाहिए, जो जो आपके प्रोजेक्ट की रूट डायरेक्ट्री में मौजूद होती है. इस बारे में ज़्यादा जानकारी पाने के लिए local.properties फ़ाइल, देखें Gradle प्रॉपर्टी फ़ाइलें.

इस टास्क को आसान बनाने के लिए, Android के लिए सीक्रेट ग्रेडल प्लग इन. Secrets Gradle प्लग इन इंस्टॉल करने और सुरक्षित तरीके से सेव करने के लिए यह प्रक्रिया अपनाएं आपकी एपीआई कुंजी.

  1. अपनी रूट-लेवल build.gradle फ़ाइल खोलें और नीचे दिए गए कोड को buildscript में dependencies एलिमेंट.

    ग्रूवी

    buildscript {
        dependencies {
            // ...
            classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.0"
        }
    }
    

    Kotlin

    buildscript {
        dependencies {
            // ...
            classpath("com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.0")
        }
    }
    
  2. अपनी ऐप्लिकेशन-लेवल की build.gradle फ़ाइल खोलें और यहां दिए गए कोड को plugins एलिमेंट.

    ग्रूवी

    id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
    

    Kotlin

    id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
    
  3. अपने प्रोजेक्ट को Gradle के साथ सिंक करें.

  4. local.properties को अपनी प्रोजेक्ट लेवल की डायरेक्ट्री में खोलें. इसके बाद, . YOUR_API_KEY को अपने एपीआई पासकोड से बदलना न भूलें.

    MAPS_API_KEY=YOUR_API_KEY
    
  5. अपनी AndroidManifest.xml फ़ाइल में, com.google.android.geo.API_KEY पर जाएं और android:value एट्रिब्यूट को इस तरह अपडेट करें:

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="${MAPS_API_KEY}" />
    

नीचे दिए गए उदाहरण में, सैंपल ऐप्लिकेशन के लिए एक पूरा मेनिफ़ेस्ट दिखाया गया है:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.driverapidemo" >
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/_AppTheme" >

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="${MAPS_API_KEY}" />

        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

अपने ऐप्लिकेशन में ज़रूरी एट्रिब्यूशन शामिल करना

अगर आप अपने ऐप्लिकेशन में ड्राइवर SDK टूल का इस्तेमाल करते हैं, तो आपको अपने ऐप्लिकेशन के कानूनी नोटिस में, एट्रिब्यूशन टेक्स्ट और ओपन सोर्स लाइसेंस का इस्तेमाल करें सेक्शन में जाएं. एट्रिब्यूशन को एक इंडिपेंडेंट मेन्यू आइटम के रूप में या इस तरह शामिल करना सबसे अच्छा विकल्प है इसके बारे में जानकारी मेन्यू आइटम का हिस्सा.

लाइसेंस की जानकारी, "third_party_लाइसेंस.txt" पर देखी जा सकती है फ़ाइल इन संग्रह से निकाली गई AAR फ़ाइल.

https://developers.google.com/android/guides/opensource देखें में, ओपन सोर्स नोटिस शामिल करने के बारे में बताया गया है.

डिपेंडेंसी

ड्राइवर SDK टूल, gRPC से फ़्लीट इंजन सर्वर से संपर्क कर सकें. अगर आपने पहले से ही gRPC को नीचे दी गई डिपेंडेंसी का एलान करना पड़ सकता है:

dependencies {
    implementation 'io.grpc:grpc-android:1.12.0'
    implementation 'io.grpc:grpc-okhttp:1.12.0'
}

इन डिपेंडेंसी के बिना, ड्राइवर SDK रनटाइम पर गड़बड़ियों का सामना करना जब फ़्लीट इंजन सर्वर से संपर्क करने की कोशिश की जाती है.

अगर ProGuard का इस्तेमाल करके, अपने बिल्ड ऑप्टिमाइज़ करें, तो आपको अपने ProGuard में ये लाइनें जोड़नी पड़ सकती हैं कॉन्फ़िगरेशन फ़ाइल:

-dontwarn com.google.**
-dontwarn io.grpc.**
-dontwarn okio.**

कम से कम 23 एपीआई लेवल काम करता है.

SDK टूल शुरू करें

प्रोवाइडर आईडी (आम तौर पर, Google Cloud प्रोजेक्ट आईडी) की ज़रूरत होती है DriverContext ऑब्जेक्ट शुरू करें. सेट अप करने के बारे में ज़्यादा जानने के लिए Google Cloud प्रोजेक्ट, देखें पुष्टि करना और अनुमति देना.

ड्राइवर SDK टूल इस्तेमाल करने से पहले, आपको शुरू करना होगा नेविगेशन SDK टूल. SDK टूल शुरू करने के लिए:

  1. NavigationApi से Navigator ऑब्जेक्ट पाएं.

    NavigationApi.getNavigator(
        this, // Activity
        new NavigationApi.NavigatorListener() {
          @Override
          public void onNavigatorReady(Navigator navigator) {
            // Keep a reference to the Navigator (used to configure and start nav)
            this.navigator = navigator;
          }
        }
    );
    
  2. ज़रूरी फ़ील्ड में अपने-आप जानकारी भरकर, DriverContext ऑब्जेक्ट बनाएं.

    DriverContext driverContext = DriverContext.builder(application)
        .setProviderId(providerId)
        .setVehicleId(vehicleId)
        .setAuthTokenFactory(authTokenFactory)
        .setNavigator(navigator)
        .setRoadSnappedLocationProvider(
            NavigationApi.getRoadSnappedLocationProvider(application))
        .build();
    
  3. *DriverApi शुरू करने के लिए, DriverContext ऑब्जेक्ट का इस्तेमाल करें.

    DeliveryDriverApi driverApi = DeliveryDriverApi.createInstance(driverContext);
    
  4. एपीआई ऑब्जेक्ट से DeliveryVehicleReporter पाएं. (DeliveryVehicleReporter NavigationVehicleReporter तक विस्तृत होता है.)

    DeliveryVehicleReporter vehicleReporter = driverApi.getDeliveryVehicleReporter();
    

AuthTokenFactory की मदद से पुष्टि की जा रही है

जब ड्राइवर SDK टूल, जगह की जानकारी के अपडेट जनरेट करता है, तो इसे ये अपडेट फ़्लीट इंजन सर्वर का इस्तेमाल कर रहे हैं. इन अनुरोधों की पुष्टि करने के लिए, ड्राइवर SDK टूल, कॉलर के दिए गए कॉल को कॉल करता है AuthTokenFactory का इंस्टेंस. जगह पर पुष्टि करने वाले टोकन जनरेट करने की ज़िम्मेदारी फ़ैक्ट्री की होती है समय अपडेट करें.

टोकन जनरेट करने का तरीका हर डेवलपर के हिसाब से अलग-अलग होता है. हालांकि, लागू करने के लिए शायद यह ज़रूरी हो:

  • किसी एचटीटीपीएस सर्वर से, पुष्टि करने वाला टोकन फ़ेच किया जा सकता है. यह टोकन, JSON फ़ॉर्मैट में हो सकता है
  • टोकन को पार्स और कैश मेमोरी में सेव करें
  • समयसीमा खत्म होने पर, टोकन को रीफ़्रेश करें

फ़्लीट इंजन सर्वर से मिलने वाले टोकन की जानकारी के लिए, देखें अनुमति पाने के लिए JSON वेब टोकन (JWT) बनाना.

यहां AuthTokenFactory को लागू करने के तरीके की जानकारी दी गई है:

class JsonAuthTokenFactory implements AuthTokenFactory {
  private String vehicleServiceToken;  // initially null
  private long expiryTimeMs = 0;
  private String vehicleId;

  // This method is called on a thread whose only responsibility is to send
  // location updates. Blocking is OK, but just know that no location updates
  // can occur until this method returns.
  @Override
  public String getToken(AuthTokenContext authTokenContext) {
    String vehicleId = requireNonNull(context.getVehicleId());

    if (System.currentTimeMillis() > expiryTimeMs || !vehicleId.equals(this.vehicleId)) {
      // The token has expired, go get a new one.
      fetchNewToken(vehicleId);
    }

    return vehicleServiceToken;
  }

  private void fetchNewToken(String vehicleId) {
    String url = "https://yourauthserver.example/token/" + vehicleId;

    try (Reader r = new InputStreamReader(new URL(url).openStream())) {
      com.google.gson.JsonObject obj
          = com.google.gson.JsonParser.parseReader(r).getAsJsonObject();
      vehicleServiceToken = obj.get("VehicleServiceToken").getAsString();
      expiryTimeMs = obj.get("TokenExpiryMs").getAsLong();

      // The expiry time could be an hour from now, but just to try and avoid
      // passing expired tokens, we subtract 10 minutes from that time.
      expiryTimeMs -= 10 * 60 * 1000;
      this.vehicleId = vehicleId;
    } catch (IOException e) {
      // It's OK to throw exceptions here. The StatusListener you passed to
      // create the DriverContext class will be notified and passed along the failed
      // update warning.
      throw new RuntimeException("Could not get auth token", e);
    }
  }
}

खास तौर पर, लागू करने की इस प्रक्रिया में, पहले से मौजूद Java एचटीटीपी क्लाइंट का इस्तेमाल करके डेवलपर के ऑथेंटिकेशन सर्वर से JSON फ़ॉर्मैट में टोकन. यह टोकन फिर से इस्तेमाल के लिए सेव किया गया. अगर पुराना टोकन 10 मिनट में उपलब्ध होता है, तो टोकन को फिर से फ़ेच किया जाता है को सुरक्षित रखने में मदद मिल सके.

लागू करने पर, डेटा अलग-अलग तरह से काम कर सकता है, जैसे कि बैकग्राउंड थ्रेड का इस्तेमाल करना टोकन रीफ़्रेश करने के लिए.

AuthTokenFactory के अपवादों को तब तक कुछ समय के लिए माना जाता है, जब तक ऐसा नहीं होता बार-बार. कई कोशिशों के बाद, ड्राइवर SDK टूल मान लेता है कि गड़बड़ी स्थायी है और अपडेट भेजने का प्रयास करना बंद कर देती है.

StatusListener से शिकायत की स्थिति और गड़बड़ी की जानकारी

ड्राइवर SDK टूल, बैकग्राउंड, कुछ मामलों में सूचनाएं पाने के लिए StatusListener का इस्तेमाल करें इवेंट हो सकते हैं, जैसे कि गड़बड़ियां, चेतावनियां या डीबग मैसेज. गड़बड़ियां हो सकती हैं कुछ समय के लिए होती है (जैसे कि BACKEND_CONNECTIVITY_ERROR), या उसकी वजह से जगह की जानकारी के अपडेट हमेशा के लिए बंद हो जाते हैं (जैसे, VEHICLE_NOT_FOUND, जो कॉन्फ़िगरेशन की गड़बड़ी दिखाता है).

आप नीचे दिए गए उदाहरण की तरह एक वैकल्पिक StatusListener लागू करते हैं:

class MyStatusListener implements StatusListener {
  /** Called when background status is updated, during actions such as location reporting. */
  @Override
  public void updateStatus(
      StatusLevel statusLevel, StatusCode statusCode, String statusMsg) {
    // Status handling stuff goes here.
    // StatusLevel may be DEBUG, INFO, WARNING, or ERROR.
    // StatusCode may be DEFAULT, UNKNOWN_ERROR, VEHICLE_NOT_FOUND,
    // BACKEND_CONNECTIVITY_ERROR, or PERMISSION_DENIED.
  }
}

एसएसएल/टीएलएस के बारे में जानकारी

ड्राइवर का SDK टूल, इंटरनल तौर पर Fleet Engine सर्वर के साथ सुरक्षित तरीके से बातचीत करने के लिए एसएसएल/TLS. पहले के वर्शन (एपीआई वर्शन 23 या पहले) से संपर्क करने के लिए SecurityProvider पैच की ज़रूरत पड़ सकती है सर्वर. Android में SSL के साथ काम करने के बारे में ज़्यादा जानकारी के लिए, यहां देखें सुरक्षा GMS कंपनी. इस लेख में, सुरक्षा देने वाली कंपनी को पैच करने के लिए कोड के सैंपल भी दिए गए हैं.

जगह की जानकारी के अपडेट चालू करें

*VehicleReporter इंस्टेंस मिलने के बाद, जगह की जानकारी के अपडेट चालू करना आसान:

DeliveryVehicleReporter reporter = ...;

reporter.enableLocationTracking();

अगर मुमकिन हो, तो जगह की जानकारी के अपडेट समय-समय पर भेजे जाते हैं. हर जगह अपडेट से यह भी पता चलता है कि वाहन ऑनलाइन है.

डिफ़ॉल्ट रूप से, रिपोर्टिंग का इंटरवल 10 सेकंड का होता है. आपके पास रिपोर्टिंग में बदलाव करने का विकल्प होता है reporter.setLocationReportingInterval(long, TimeUnit) के साथ इंटरवल. कॉन्टेंट बनाने कम से कम समर्थित अपडेट अंतराल 5 सेकंड है. ज़्यादा बार अपडेट होने पर शायद इससे अनुरोध धीमे हो सकते हैं और गड़बड़ियां हो सकती हैं.

जगह की जानकारी के अपडेट बंद करें

ड्राइवर की शिफ़्ट खत्म होने पर, कॉल करके जगह की जानकारी के अपडेट रोके जा सकते हैं DeliveryVehicleReporter.disableLocationTracking.

भरोसेमंद मॉडल के इस्तेमाल के उदाहरण

इस सेक्शन में, इस्तेमाल के सामान्य उदाहरणों को लागू करने के लिए, ड्राइवर SDK टूल इस्तेमाल करने का तरीका बताया गया है भरोसेमंद मॉडल का इस्तेमाल करते समय.

वाहन बनाएं

ड्राइवर SDK टूल से वाहन बनाया जा सकता है.

वाहन बनाने से पहले, पक्का करें कि डिलीवरी ड्राइवर एपीआई शुरू करना. वाहन का आईडी, वाहन और सेवा देने वाली कंपनी के आईडी के साथ बनाया जाना चाहिए ड्राइवर SDK टूल शुरू करने के दौरान. इसके बाद, वाहन को इस तरह से बनाएं नीचे दिए गए उदाहरण में:

DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryVehicleManager vehicleManager = api.getDeliveryVehicleManager();
try {
  DeliveryVehicle vehicle = vehicleManager.createVehicle().get();
  // Handle CreateVehicleRequest DeliveryVehicle response.
} catch (Exception e) {
  // Handle CreateVehicleRequest error.
}

शिपमेंट को पिक अप करने का टास्क बनाना

ड्राइवर SDK टूल की मदद से, शिपमेंट को पिक अप करने का टास्क बनाया जा सकता है.

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

static final String TASK_ID = "task-8241890"; // Avoid auto-incrementing IDs.

DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryTaskManager taskManager = api.getDeliveryTaskManager();
CreateDeliveryTaskRequest request = CreateDeliveryTaskRequest.builder(TASK_ID)
   .setPlannedWaypoint(Waypoint.builder().setLatLng(-6.195139, 106.820826).build())
   .setTaskDurationSeconds(2 * 60)
   .setParentId("my-tracking-id")
   .setTaskType(TaskType.DELIVERY_PICKUP)
   .build();

try {
   DeliveryTask task = taskManager.createTask(request).get();
   // Handle CreateTaskRequest DeliveryTask response.
} catch (Exception e)  {
   // Handle CreateTaskRequest error.
}

शिपमेंट डिलीवरी टास्क बनाएं

ड्राइवर SDK टूल से, शिपमेंट की डिलीवरी वाला टास्क बनाया जा सकता है.

टास्क बनाने से पहले, पक्का करें कि डिलीवरी ड्राइवर एपीआई शुरू करना. इसके बाद, शिपमेंट डिलीवरी टास्क बनाएं. इसका उदाहरण नीचे दिया गया है. टास्क आईडी के बारे में जानकारी के लिए देखें टास्क आईडी के उदाहरण.

static final String TASK_ID = "task-8241890"; // Avoid auto-incrementing IDs.

DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryTaskManager taskManager = api.getDeliveryTaskManager();
CreateDeliveryTaskRequest request = CreateDeliveryTaskRequest.builder(TASK_ID)
   .setPlannedWaypoint(Waypoint.builder().setLatLng(-6.195139, 106.820826).build())
   .setTaskDurationSeconds(2 * 60)
   .setParentId("my-tracking-id")
   .setTaskType(TaskType.DELIVERY_DELIVERY)
   .build();
try {
   DeliveryTask task = taskManager.createTask(request).get();
   // Handle CreateTaskRequest DeliveryTask response.
} catch (Exception e)  {
   // Handle CreateTaskRequest error.
}

शेड्यूल की गई उपलब्धता

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

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

static final String TASK_ID = "task-8241890"; // Avoid auto-incrementing IDs.

DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryTaskManager taskManager = api.getDeliveryTaskManager();
CreateDeliveryTaskRequest request = CreateDeliveryTaskRequest.builder(TASK_ID)
   .setTaskDurationSeconds(2 * 60) // Duration or location (or both) must be provided for a BREAK task.
   .setTaskType(TaskType.UNAVAILABLE)
   .build();
try {
   DeliveryTask task = taskManager.createTask(request).get();
   // Handle CreateTaskRequest DeliveryTask response.
} catch (Exception e)  {
   // Handle CreateTaskRequest error.
}

शेड्यूल किए गए स्टॉप

ड्राइवर SDK टूल से, शेड्यूल किया गया स्टॉप टास्क बनाया जा सकता है. शेड्यूल किया गया स्टॉप टास्क में ट्रैकिंग आईडी शामिल न हो.

टास्क बनाने से पहले, पक्का करें कि डिलीवरी ड्राइवर एपीआई शुरू करना. इसके बाद, शेड्यूल किया गया स्टॉप टास्क बनाएं, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है. टास्क आईडी के बारे में जानकारी के लिए देखें टास्क आईडी के उदाहरण.

    static final String TASK_ID = "task-8241890"; //  Avoid auto-incrementing IDs.

    DeliveryDriverApi api = DeliveryDriverApi.getInstance();
    DeliveryTaskManager taskManager = api.getDeliveryTaskManager();
    CreateDeliveryTaskRequest request = CreateDeliveryTaskRequest.builder(TASK_ID)
       .setPlannedWaypoint(Waypoint.builder().setLatLng(-6.195139, 106.820826).build())
       .setTaskDurationSeconds(2 * 60)
       .setTaskType(TaskType.DELIVERY_SCHEDULED_STOP)
       .build();
    try {
       DeliveryTask task = taskManager.createTask(request).get();
       // Handle CreateTaskRequest DeliveryTask response.
    } catch (Exception e)  {
       // Handle CreateTaskRequest error.
    }

टास्क का क्रम अपडेट करें

किसी वाहन को असाइन किए गए टास्क के क्रम को अपडेट किया जा सकता है. इसके लिए, ड्राइवर SDK टूल.

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

टास्क के क्रम को किसी भी समय अपडेट किया जा सकता है.

किसी वाहन के लिए, टास्क का क्रम अपडेट करने से पहले, पक्का करें कि गाड़ी और फ़्लीट इंजन में टास्क पहले ही बनाए जा चुके हैं. इसके बाद, टास्क का क्रम अपडेट करें देखें, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है.

    DeliveryDriverApi api = DeliveryDriverApi.getInstance();
    DeliveryVehicleReporter reporter = api.getDeliveryVehicleReporter();
    try {
       List<VehicleStop> stops = reporter.setVehicleStops(
         ImmutableList.of(
             VehicleStop.builder()
                 .setVehicleStopState(VehicleStopState.ARRIVED)
                 .setWaypoint(Waypoint.builder().setLatLng(37.1749, 122.412).build())
                 .setTasks(ImmutableList.of(task1)) // Previously created DeliveryTask in Fleet Engine.
                 .build(),
             VehicleStop.builder()
                 .setVehicleStopState(VehicleStopState.NEW) // The current vehicle stop.
                 .setWaypoint(Waypoint.builder().setLatLng(37.7749, 122.4194).build())
                 .setTasks(ImmutableList.of(task2)) // Previously created DeliveryTask in Fleet Engine.
                 .build(),
             VehicleStop.builder()
                 .setVehicleStopState(VehicleStopState.NEW)
                 .setWaypoint(Waypoint.builder().setLatLng(37.3382, 121.8863).build())
                 .setTasks(ImmutableList.of(task3, task4)) // Previously created DeliveryTasks in Fleet Engine.
                 .build())).get();
       // Successfully updated vehicle stops in Fleet Engine. Returns the successfully set VehicleStops.
    } catch (Exception e)  {
       // Failed to update vehicle stops in Fleet Engine. Setting VehicleStops must be attempted again after resolving
       // errors.
    }

एक अपवाद हो सकता है, जो अपडेट को रोक सकता हो ड्राइवर SDK टूल की अंदरूनी स्थिति में बदलाव कर सकता है. अगर ऐसा होता है, तो समस्या को हल करें और जब तक कॉल पूरा नहीं हो जाता, तब तक setVehicleStops पर फिर से कॉल करें.

संभावित समस्याओं में ये शामिल हो सकते हैं:

  • बताए गए व्हीकलस्टॉप मान्य पैटर्न का पालन नहीं करते. सिर्फ़ पहला व्हीकल स्टॉप का इस्तेमाल, इनमें से किसी भी व्हीकलस्टॉपस्टेट्स में किया जा सकता है: नया, ENROUTE या ARRIVED. मौजूदा स्टॉप के बाद ऐक्टिविटी वाले व्हीकल स्टॉप, नए व्हीकलस्टॉप स्टेट में होने चाहिए.

  • टास्क या तो मौजूद नहीं हैं या वे किसी दूसरे वाहन से जुड़े हैं.

  • गाड़ी मौजूद नहीं है.

वाहन अगले स्टॉप के रास्ते में है

जब कोई वाहन किसी स्टॉप से जाता है और वह वहां से जाता है, तो फ़्लीट इंजन को इसकी सूचना दी जानी चाहिए नेविगेशन शुरू करता है. ड्राइवर SDK टूल से, फ़्लीट इंजन को सूचना दी जा सकती है.

फ़्लीट इंजन को किसी स्टॉप से जाने के बारे में सूचना देने से पहले, पक्का करें कि वाहन के स्टॉप बना दिए गए हैं और उन्हें सेट कर दिया गया है. इसके बाद, फ़्लीट इंजन को वाहन का प्रस्थान समय, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है.

    DeliveryDriverApi api = DeliveryDriverApi.getInstance();
    DeliveryVehicleReporter reporter = api.getDeliveryVehicleReporter();
    reporter.enableLocationTracking(); // Location tracking must be enabled.

    // Create Vehicle, VehicleStops, and DeliveryTasks.
    // Set VehicleStops on Vehicle.

    navigator.setDestination(vehicleStop.getWaypoint());
    try {
       List<VehicleStop> updatedStops = reporter.enrouteToNextStop().get();
       // Successfully updated vehicle stops in Fleet Engine. Returns the set VehicleStops, with the first
       // VehicleStop updated to ENROUTE state.
    } catch (Exception e)  {
       // Failed to update vehicle stops in Fleet Engine. Updating VehicleStops must be attempted again
       // after resolving errors.
    }

एक अपवाद ऐसा हो सकता है जिसकी वजह से, ड्राइवर के SDK टूल को अपडेट न किया जा सके अंदरूनी स्थिति. अगर ऐसा होता है, तो समस्या हल करें और फिर कॉल करें जब तक बदलाव नहीं हो जाता, तब तक फिर से enrouteToNextStop करें.

संभावित समस्याओं में ये शामिल हो सकते हैं:

  • ड्राइवर SDK टूल में, बचा हुआ कोई VehicleStops सेट नहीं है.

वाहन किसी स्टॉप पर पहुंच गया है

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

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

DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryVehicleReporter reporter = api.getDeliveryVehicleReporter();
reporter.enableLocationTracking(); // Location tracking must be enabled.

// Create Vehicle, VehicleStops, and DeliveryTasks.
// Set VehicleStops on Vehicle.
// Mark ENROUTE to VehicleStop and start guidance using Navigator.

try {
   List<VehicleStop> updatedStopsArrived = reporter.arrivedAtStop().get();
   // Successfully updated vehicle stops in Fleet Engine. Returns the set VehicleStops, with the first
   // VehicleStop updated to ARRIVED state.
   navigator.clearDestinations();
} catch (Exception e)  {
   // Failed to update vehicle stops in Fleet Engine. Updating VehicleStops must be attempted again
   // after resolving errors.
}

एक अपवाद हो सकता है, जो ड्राइवर SDK टूल के इंटरनल सिस्टम को अपडेट करने से रोक सकता हो state. अगर ऐसा होता है, तो समस्या को हल करें और arrivedAtStop पर दोबारा कॉल करें तब तक नहीं बना सकते, जब तक वह सफल न हो जाए.

संभावित समस्याओं में ये शामिल हो सकते हैं:

  • ड्राइवर SDK टूल में, बचा हुआ कोई VehicleStops सेट नहीं है.

वाहन, स्टॉप तक पूरा जाता है

जब कोई वाहन रुक जाता है, तो आपको फ़्लीट इंजन को इसकी सूचना देनी होगी. यह सूचना इससे स्टॉप से जुड़े सभी टास्क 'बंद है' पर सेट हो जाते हैं. आप ड्राइवर SDK टूल से, फ़्लीट इंजन को सूचना दें.

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

    DeliveryDriverApi api = DeliveryDriverApi.getInstance();
    DeliveryVehicleReporter reporter = api.getDeliveryVehicleReporter();
    reporter.enableLocationTracking(); // Location tracking must be enabled.

    // After completing the tasks at the VehicleStop, remove it from the
    // the current list of VehicleStops.

    try {
       List<VehicleStop> updatedStopsCompleted = reporter.completedStop().get();
       // Successfully updated vehicle stops in Fleet Engine. All tasks on the completed stop are set to CLOSED.
       // Returns the set VehicleStops, with the completed VehicleStop removed from the remaining list.
    } catch (Exception e)  {
       // Failed to update vehicle stops in Fleet Engine. Updating VehicleStops must be attempted again
       // after resolving errors.
    }

एक अपवाद हो सकता है, जो ड्राइवर SDK टूल के इंटरनल सिस्टम को अपडेट करने से रोक सकता हो state. अगर ऐसा होता है, तो समस्या को हल करें और completedStop पर दोबारा कॉल करें तब तक नहीं बना सकते, जब तक वह सफल न हो जाए.

संभावित समस्याओं में ये शामिल हो सकते हैं:

  • ड्राइवर SDK टूल में, बचा हुआ कोई VehicleStops सेट नहीं है.

टास्क को बंद करना

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

अगर किसी टास्क के लिए अभी तक कोई वाहन असाइन नहीं किया गया है और उसे बंद करना ज़रूरी है, तो टास्क के लिए टास्क को बंद स्थिति में ले जाया जाएगा. हालांकि, बंद हो चुके किसी टास्क को फिर से नहीं खोला जा सकता.

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

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

इसके अलावा, वाहन के टास्क का क्रम अपडेट करें वह टास्क जिसे असाइन किया गया है. इसके बाद, उस टास्क को स्टॉप.

टास्क के नतीजे और नतीजे की जगह सेट करें

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

जो टास्क 'बंद है' स्थिति में हैं उनके नतीजे, इनमें से किसी पर सेट हो सकते हैं हो गया या नहीं हो सका. फ़्लीट इंजन सिर्फ़ डिलीवरी टास्क के लिए शुल्क लेता है हो गया.

टास्क के नतीजे को मार्क करते समय, फ़्लीट इंजन अपने-आप टास्क के नतीजे की जगह, जहां वाहन आखिरी बार इस्तेमाल किया गया था. इन्हें बदला जा सकता है यह व्यवहार.

यहां दिए गए उदाहरण में, टास्क का नतीजा सेट करने के लिए, ड्राइवर SDK टूल इस्तेमाल करने का तरीका बताया गया है और टाइमस्टैंप है. ड्राइवर SDK टूल का इस्तेमाल करके, टास्क के नतीजे की जगह सेट नहीं की जा सकती.

    static final String TASK_ID = "task-8241890";

    DeliveryDriverApi api = DeliveryDriverApi.getInstance();
    DeliveryTaskManager taskManager = api.getDeliveryTaskManager();

    // Updating an existing DeliveryTask which is already CLOSED. Manually
    // setting TaskOutcomeLocation with Driver SDK is not supported at this time.
    UpdateDeliveryTaskRequest req = UpdateDeliveryTaskRequest.builder(TASK_ID)
        .setTaskOutcome(TaskOutcome.SUCCEEDED)
        .setTaskOutcomeTimestamp(now()) // Timestamp in milliseconds.
        .build();

    try {
       DeliveryTask updatedTask = taskManager.updateTask(req);
       // Handle UpdateTaskRequest DeliveryTask response.
    } catch (Exception e)  {
       // Handle UpdateTaskRequest error.
    }

वाहन खोजें

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

    DeliveryDriverApi api = DeliveryDriverApi.getInstance();
    DeliveryVehicleManager vehicleManager = api.getDeliveryVehicleManager();
    try {
       DeliveryVehicle vehicle = vehicleManager.getVehicle().get();
       // Handle GetVehicleRequest DeliveryVehicle response.
    } catch (Exception e)  {
       // Handle GetVehicleRequest error.
    }

DeliveryVehicleManager सिर्फ़ DeliveryVehicle देख सकता है डिलीवरी ड्राइवर एपीआई शुरू करने के दौरान दिए गए वाहन आईडी के लिए.