Android के लिए उपभोक्ता SDK का इस्तेमाल शुरू करना

आप एक बुनियादी उपभोक्ता ऐप्लिकेशन को बनाने और चलाने के लिए उपभोक्ता SDK का इस्तेमाल कर सकते हैं मांग पर राइड और डिलीवरी की सुविधा वाली बैकएंड सेवाओं के साथ उपलब्ध. आप बना सकते हैं यात्रा और ऑर्डर की प्रोग्रेस की जानकारी देने वाला ऐप्लिकेशन, जो किसी चालू यात्रा की जानकारी दिखा सकता है, यात्रा के अपडेट का जवाब दे सकते हैं और यात्रा की गड़बड़ियों को ठीक कर सकते हैं.

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

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

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

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

उपभोक्ता SDK टूल के 1.99.0 और इसके बाद के वर्शन, 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>

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

Android के लिए उपभोक्ता 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 टूल, Maven की निजी रिपॉज़िटरी में उपलब्ध है. कॉन्टेंट बनाने रिपॉज़िटरी में SDK टूल का Project Object Model (.pom) फ़ाइलें और Javadocs शामिल होते हैं. अपने ऐप्लिकेशन में उपभोक्ता SDK टूल जोड़ने के लिए:

  1. यहां बताए गए तरीके से, होस्ट Maven रिपॉज़िटरी को ऐक्सेस करने के लिए अपना एनवायरमेंट सेट अप करें पिछला सेक्शन देखें.

    अगर आपके संगठन में एक ही जगह से मैनेज किए जा रहे डिपेंडेंसी मैनेजमेंट कॉन्फ़िगरेशन का एलान किया गया है settings.gradle, इसे नीचे बताए गए तरीके से बंद करें.

    • settings.gradle से यह कोड ब्लॉक हटाएं:

      import org.gradle.api.initialization.resolve.RepositoriesMode
      dependencyResolutionManagement {
          repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
          repositories {
              google()
              mavenCentral()
          }
      }
      
  2. अपने Gradle या Maven कॉन्फ़िगरेशन में ये डिपेंडेंसी जोड़ें उपभोक्ता SDK टूल के मनचाहे वर्शन के लिए VERSION_NUMBER प्लेसहोल्डर.

    ग्रेडल

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

    dependencies {
      ...
      implementation 'com.google.android.libraries.mapsplatform.transportation:transportation-consumer:VERSION_NUMBER'
    }
    

    Maven

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

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

    ग्रेडल

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

    dependencies {
      ...
      implementation 'com.google.android.gms:play-services-maps:18.1.0'
    }
    

    Maven

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

    <dependencies>
      ...
      <dependency>
        <groupId>com.google.android.gms</groupId>
        <artifactId>play-services-maps</artifactId>
        <version>18.1.0</version>
      </dependency>
    </dependencies>
    

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

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

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

इस टास्क को आसान बनाने के लिए, Android के लिए सीक्रेट ग्रेडल प्लग इन.

प्लग इन इंस्टॉल करने और अपनी एपीआई कुंजी सेव करने के लिए:

  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. अगर Android Studio का इस्तेमाल किया जा रहा है, तो Gredle के साथ प्रोजेक्ट सिंक करते हैं.

  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.consumerapidemo">
    <uses-permission android:name="android.permission.ACCESS_FINE_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 टूल की पुष्टि करना

कंज़्यूमर SDK टूल, JSON वेब टोकन का इस्तेमाल करके पुष्टि करता है. JSON Web Token (JWT), JSON-बेस ऐक्सेस टोकन होता है, जो या इससे ज़्यादा दावे किए जाते हैं. उदाहरण के लिए, कोई सर्वर ऐसा टोकन जिसमें "एडमिन के तौर पर लॉग इन किया गया है" का दावा किया गया हो और यह बताना होगा कि किस तरह कस्टमाइज़ करते हैं. इसके बाद क्लाइंट उस टोकन का इस्तेमाल यह साबित करने के लिए कर सकता है कि इस पर एडमिन के तौर पर लॉग इन किया गया है.

उपभोक्ता SDK टूल, ऐप्लिकेशन से मिले JSON वेब टोकन का इस्तेमाल करता है से संपर्क करने में मदद मिलती है. ज़्यादा जानकारी के लिए, फ़्लीट इंजन की पुष्टि और अनुमति देखें.

टोकन के टोकन में tripid:TRIP_ID दावा शामिल होना चाहिए authorization हेडर, जहां TRIP_ID यात्रा आईडी है. इससे उपभोक्ता को यात्रा की जानकारी के लिए SDK टूल का ऐक्सेस. इसमें वाहन की स्थिति, रास्ता, और ETA शामिल हैं.

JSON वेब टोकन कॉलबैक

उपभोक्ता SDK टूल, ऑथराइज़ेशन टोकन कॉलबैक रजिस्टर करता है को लागू करते हैं. SDK टूल, ऐप्लिकेशन को कॉल करता है नेटवर्क अनुरोधों के लिए टोकन पाने के लिए.

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

ऑथराइज़ेशन टोकन कॉलबैक से पता चलता है कि कौनसा सेवा टोकन ज़रूरी है TripService सेवा के लिए. यह ज़रूरी tripId की जानकारी भी देता है देखें.

नीचे दिए गए कोड के उदाहरण में, अनुमति लागू करने का तरीका बताया गया है टोकन कॉलबैक.

Java

class JsonAuthTokenFactory implements AuthTokenFactory {

  private static final String TOKEN_URL =
      "https://yourauthserver.example/token";

  private static class CachedToken {
    String tokenValue;
    long expiryTimeMs;
    String tripId;
  }

  private CachedToken token;

  /*
  * This method is called on a background thread. Blocking is OK. However, be
  * aware that no information can be obtained from Fleet Engine until this
  * method returns.
  */
  @Override
  public String getToken(AuthTokenContext context) {
    // If there is no existing token or token has expired, go get a new one.
    String tripId = context.getTripId();
    if (tripId == null) {
      throw new RuntimeException("Trip ID is missing from AuthTokenContext");
    }
    if (token == null || System.currentTimeMillis() > token.expiryTimeMs ||
        !tripId.equals(token.tripId)) {
      token = fetchNewToken(tripId);
    }
    return token.tokenValue;
  }

  private static CachedToken fetchNewToken(String tripId) {
    String url = TOKEN_URL + "/" + tripId;
    CachedToken token = new CachedToken();

    try (Reader r = new InputStreamReader(new URL(url).openStream())) {
      com.google.gson.JsonObject obj
          = com.google.gson.JsonParser.parseReader(r).getAsJsonObject();

      token.tokenValue = obj.get("ServiceToken").getAsString();
      token.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 5 minutes from that time.
      */
      token.expiryTimeMs -= 5 * 60 * 1000;
    } catch (IOException e) {
      /*
      * It's OK to throw exceptions here. The error listeners will receive the
      * error thrown here.
      */
      throw new RuntimeException("Could not get auth token", e);
    }
    token.tripId = tripId;

    return token;
  }
}

Kotlin

class JsonAuthTokenFactory : AuthTokenFactory() {

  private var token: CachedToken? = null

  /*
  * This method is called on a background thread. Blocking is OK. However, be
  * aware that no information can be obtained from Fleet Engine until this
  * method returns.
  */
  override fun getToken(context: AuthTokenContext): String {
    // If there is no existing token or token has expired, go get a new one.
    val tripId = 
      context.getTripId() ?: 
        throw RuntimeException("Trip ID is missing from AuthTokenContext")

    if (token == null || System.currentTimeMillis() > token.expiryTimeMs ||
        tripId != token.tripId) {
      token = fetchNewToken(tripId)
    }

    return token.tokenValue
  }

  class CachedToken(
    var tokenValue: String? = "", 
    var expiryTimeMs: Long = 0,
    var tripId: String? = "",
  )

  private companion object {
    const val TOKEN_URL = "https://yourauthserver.example/token"

    fun fetchNewToken(tripId: String) {
      val url = "$TOKEN_URL/$tripId"
      val token = CachedToken()

      try {
        val reader = InputStreamReader(URL(url).openStream())

        reader.use {
          val obj = com.google.gson.JsonParser.parseReader(r).getAsJsonObject()

          token.tokenValue = obj.get("ServiceToken").getAsString()
          token.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 5 minutes from that time.
          */
          token.expiryTimeMs -= 5 * 60 * 1000
        }
      } catch (e: IOException) {
        /*
        * It's OK to throw exceptions here. The error listeners will receive the
        * error thrown here.
        */
        throw RuntimeException("Could not get auth token", e)
      }

      token.tripId = tripId

      return token
    }
  }
}

एपीआई शुरू करें

इन प्रक्रियाओं को अपनाने से पहले, यह मान लिया जाता है कि आपने उपभोक्ता SDK टूल की ज़रूरी शर्तें पूरी करनी होंगी.

ConsumerApi इंस्टेंस पाएं

उपभोक्ता SDK टूल का इस्तेमाल करने के लिए, आपके ऐप्लिकेशन को शुरू करना होगा ConsumerApi एसिंक्रोनस रूप से. एपीआई सिंगलटन है. शुरू करने के तरीके में AuthTokenFactory लगता है. फ़ैक्ट्री में नए ज़रूरत पड़ने पर उपयोगकर्ता के लिए JWT टोकन.

providerId, आपके Google Cloud प्रोजेक्ट का प्रोजेक्ट आईडी है. ज़्यादा जानकारी के लिए, Fleet Engine इस्तेमाल करने के लिए गाइड पर जाएं.

आपके ऐप्लिकेशन को यहां बताए गए तरीके से AuthTokenFactory को लागू करना चाहिए उपभोक्ता SDK टूल की पुष्टि.

Java

Task<ConsumerApi> consumerApiTask = ConsumerApi.initialize(
    this, "myProviderId", authTokenFactory);

consumerApiTask.addOnSuccessListener(
  consumerApi -> this.consumerApi = consumerApi);

Kotlin

val consumerApiTask =
  ConsumerApi.initialize(this, "myProviderId", authTokenFactory)

consumerApiTask?.addOnSuccessListener { consumerApi: ConsumerApi ->
  this@YourActivity.consumerApi = consumerApi
}

Maps SDK टूल और मैप रेंडरर

उपभोक्ता SDK v2.x.x, Android v18.1.0 और इसके बाद के वर्शन के लिए Maps SDK पर काम करता है. टेबल यहां Maps SDK टूल के वर्शन के हिसाब से, डिफ़ॉल्ट रेंडरर के बारे में खास जानकारी दी गई है. को लागू करता है. हमारा सुझाव है कि अगर आपको सबसे नए रेंडरर की ज़रूरत हो, तो तो लेगसी रेंडरर का इस्तेमाल करें. MapsInitializer.initialize().

Maps SDK का वर्शन नए रेंडरर के साथ काम करता है लेगसी रेंडरर के साथ काम करता है डिफ़ॉल्ट रेंडरर
V18.1.0 और इससे पहले के वर्शन हां हां लेगसी*
V18.2.0 हां हां सबसे नए

* नए मैप रेंडरर के रोल आउट के ज़रिए, नया रेंडरर डिफ़ॉल्ट होगा.

Maps SDK को डिपेंडेंसी के तौर पर जोड़ें

ग्रेडल

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

dependencies {
  //...
  implementation "com.google.android.gms:play-services-maps:VERSION_NUMBER"
}

Maven

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

 <dependencies>
   ...
   <dependency>
     <groupId>com.google.android.gms</groupId>
     <artifactId>play-services-maps</artifactId>
     <version>18.1.0</version>
   </dependency>
 </dependencies>

उपभोक्ता के लिए SDK टूल शुरू करने से पहले, Maps SDK टूल चालू करें

अपनी Application या स्टार्ट-अप Activity क्लास में, कॉल करें MapsInitializer.initialize() और शुरू करने से पहले रेंडरर के अनुरोध के नतीजे का इंतज़ार करें उपभोक्ता SDK टूल.

java

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  initViews();

  MapsInitializer.initialize(getApplicationContext(), Renderer.LATEST,
      new OnMapsSdkInitializedCallback() {
        @Override
        public void onMapsSdkInitialized(Renderer renderer) {
          switch (renderer) {
            case LATEST:
              Log.i("maps_renderer", "LATEST renderer");
              break;
            case LEGACY:
              Log.i("maps_renderer", "LEGACY renderer");
              break;
          }

          initializeConsumerSdk();
        }
      });
}

Kotlin

fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.main)
  initViews()

  MapsInitializer.initialize(
    getApplicationContext(), Renderer.LATEST,
    object : OnMapsSdkInitializedCallback() {
      fun onMapsSdkInitialized(renderer: Renderer?) {
        when (renderer) {
          LATEST -> Log.i("maps_renderer", "LATEST renderer")
          LEGACY -> Log.i("maps_renderer", "LEGACY renderer")
        }
        initializeConsumerSdk()
      }
    })
  }

यूज़र इंटरफ़ेस बनाना

ConsumerMapFragment या आपके लिए यूज़र इंटरफ़ेस बनाने के लिए ConsumerMapView का इस्तेमाल करें. ConsumerMapFragment की मदद से इसका इस्तेमाल करके मैप को Fragment है, जबकि ConsumerMapView आपको View. राइड शेयरिंग ConsumerMapView और, दोनों में एक जैसी सुविधाएं हैं ConsumerMapFragment, ताकि आप इसके आधार पर चुन सकें चाहे View हो या Fragment आपके ऐप्लिकेशन के लिए बेहतर है.

API 19 (KitKat) और वेक्टर ड्रॉएबल के लिए सहायता जोड़ें

अगर आपके ऐप्लिकेशन डिज़ाइन को एपीआई 19 (KitKat) वाले डिवाइसों और वेक्टर ड्रॉएबल के साथ काम करने की ज़रूरत है, अपनी गतिविधि में यह कोड जोड़ें. इन कोड की अवधि AppCompatActivity का इस्तेमाल करने के लिए उपभोक्ता SDK में ड्रॉएबल वेक्टर.

Java

// ...
import android.support.v7.app.AppCompatActivity;

// ...

public class ConsumerTestActivity extends AppCompatActivity {
  // ...
}

Kotlin

// ...
import android.support.v7.app.AppCompatActivity

// ...

class ConsumerTestActivity : AppCompatActivity() {
  // ...
}

मैप का हिस्सा या व्यू जोड़ें

आपने Android के किसी फ़्रैगमेंट में, यात्रा की जानकारी शेयर करने के लिए मैप बनाया है या दृश्य, जिसे आप अपने ऐप्लिकेशन लेआउट की XML फ़ाइल ( /res/layout). इसके बाद, फ़्रैगमेंट (या व्यू) सफ़र का ऐक्सेस देता है मैप शेयर करना, जिसे आपका ऐप्लिकेशन ऐक्सेस कर सके और उसमें बदलाव कर सके. यह मैप आपको ConsumerController को हैंडल करता है. इससे आपका ऐप्लिकेशन यह कंट्रोल कर सकता है और शेयर करने के अनुभव को ज़रूरत के मुताबिक कैसे बनाया जा सकता है.

सफ़र की जानकारी का मैप और कंट्रोलर शेयर करने की सुविधा

आप यात्रा साझाकरण मैप को या तो खंड के रूप में परिभाषित करते हैं (इसका उपयोग करके ConsumerMapFragment) या व्यू के तौर पर (ConsumerMapView का इस्तेमाल करके), जैसा कि का उदाहरण देखें. इसके बाद, आपके onCreate() तरीके से कॉल आएगा getConsumerGoogleMapAsync(callback), जिससे ConsumerGoogleMap दिखता है कॉलबैक में एसिंक्रोनस तरीके से होता है. इसके बाद, डिसप्ले के लिए ConsumerGoogleMap का इस्तेमाल करें शेयर करने की सुविधा देता है. इसे आपके ऐप्लिकेशन के मुताबिक अपडेट किया जा सकता है.

ConsumerMapFragment

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

<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.google.android.libraries.mapsplatform.transportation.consumer.view.ConsumerMapFragment"
    android:id="@+id/consumer_map_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

getConsumerGoogleMapAsync() पर कॉल, onCreate() से होना चाहिए तरीका.

Java

public class SampleAppActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {

    // Find the ConsumerMapFragment.
    ConsumerMapFragment consumerMapFragment =
        (ConsumerMapFragment) fragmentManager.findFragmentById(R.id.consumer_map_fragment);

    // Initiate the callback that returns the map.
    if (consumerMapFragment != null) {
      consumerMapFragment.getConsumerGoogleMapAsync(
          new ConsumerMapReadyCallback() {
            // The map returned in the callback is used to access the ConsumerController.
            @Override
            public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerGoogleMap) {
              ConsumerController consumerController = consumerGoogleMap.getConsumerController();
            }
          });
    }
  }

}

Kotlin

class SampleAppActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    // Find the ConsumerMapFragment.
    val consumerMapFragment =
      fragmentManager.findFragmentById(R.id.consumer_map_fragment) as ConsumerMapFragment

    consumerMapFragment.getConsumerGoogleMapAsync(
      object : ConsumerMapReadyCallback() {
        override fun onConsumerMapReady(consumerGoogleMap: ConsumerGoogleMap) {
          val consumerController = consumerGoogleMap.getConsumerController()!!
        }
      }
    )
  }
}
ConsumerMapView

व्यू का इस्तेमाल फ़्रैगमेंट या किसी गतिविधि में किया जा सकता है, जैसा कि एक्सएमएल फ़ाइल में.

<com.google.android.libraries.mapsplatform.transportation.consumer.view.ConsumerMapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/consumer_map_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

getConsumerGoogleMapAsync() पर किया जाने वाला कॉल, onCreate() से होना चाहिए. तय सीमा में कॉलबैक पैरामीटर के अलावा, इसके लिए इसमें शामिल गतिविधि या फ़्रैगमेंट और GoogleMapOptions (जो शून्य हो सकता है) में कॉन्फ़िगरेशन शामिल है MapView एट्रिब्यूट के लिए दी गई वैल्यू सबमिट करें. ऐक्टिविटी या फ़्रैगमेंट बेस क्लास या तो होना चाहिए FragmentActivity या सहायता Fragment (कम से कम), क्योंकि वे उसके लाइफ़साइकल को ऐक्सेस कर पाएगा.

Java

public class SampleAppActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    ConsumerMapView mapView = findViewById(R.id.consumer_map_view);

    if (mapView != null) {
      mapView.getConsumerGoogleMapAsync(
          new ConsumerMapReadyCallback() {
            // The map returned in the callback is used to access the ConsumerController.
            @Override
            public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerGoogleMap) {
              ConsumerController consumerController = consumerGoogleMap.getConsumerController();
            }
          }, this, null);
    }
  }

}

Kotlin

class SampleAppActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    val mapView = findViewById(R.id.consumer_map_view) as ConsumerMapView

    mapView.getConsumerGoogleMapAsync(
      object : ConsumerMapReadyCallback() {
        // The map returned in the callback is used to access the ConsumerController.
        override fun onConsumerMapReady(consumerGoogleMap: ConsumerGoogleMap) {
          val consumerController = consumerGoogleMap.getConsumerController()!!
        }
      },
      /* fragmentActivity= */ this,
      /* googleMapOptions= */ null,
    )
  }
}

फ़्रैगमेंट में मौजूद MapView, ऊपर दिए गए उदाहरण के जैसा ही है, जैसे कि MapView के लिए एक गतिविधि, जिसमें फ़्रैगमेंट उस लेआउट को बढ़ा देता है जिसमें फ़्रैगमेंट onCreateView() तरीके में MapView.

Java

public class MapViewInFragment extends Fragment {

  @Override
  public View onCreateView(
      @NonNull LayoutInflater layoutInflater,
      @Nullable ViewGroup viewGroup,
      @Nullable Bundle bundle) {
    return layoutInflater.inflate(R.layout.consumer_map_view, viewGroup, false);
  }

}

Kotlin

class MapViewInFragment : Fragment() {
  override fun onCreateView(
    layoutInflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?,
  ): View {
    return layoutInflater.inflate(R.layout.consumer_map_view, viewGroup, false)
  }
}

यात्रा पर फ़ोकस करने के लिए, कैमरे के ज़ूम को अडजस्ट किया जा रहा है

Maps SDK टूल में पहले से मौजूद डिफ़ॉल्ट 'मेरी जगह' बटन, कैमरे को डिवाइस की जगह के बीच में रखता है.

अगर यात्रा शेयर करने का कोई सेशन चालू हो, तो कैमरे को बीच में रखें फ़ोकस करने के लिए कहें.

पहले से मौजूद Android ऐप्लिकेशन के लिए उपभोक्ता SDK टूल: AutoCamera

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

AutoCamera

कैमरे के काम करने के तरीके को पसंद के मुताबिक बनाएं

अगर आपको कैमरे के व्यवहार पर ज़्यादा कंट्रोल चाहिए, तो उसे बंद या चालू करें ऑटो कैमरा इस्तेमाल करता है, जो ConsumerController.setAutoCameraEnabled() का इस्तेमाल करता है.

ConsumerController.getCameraUpdate(), सुझाए गए कैमरे की बाउंड्री को उस समय दिखाता है. इसके बाद, इस CameraUpdate को तर्क के तौर पर दिया जा सकता है GoogleMap.moveCamera() या GoogleMap.animateCamera().

राइडशेयरिंग और मैप ऐक्सेस करें

अपने ऐप्लिकेशन में राइडशेयरिंग और मैप इंटरैक्शन की सुविधा देने के लिए, आपके पास ऐक्सेस होना ज़रूरी है ConsumerGoogleMap और ConsumerController. ConsumerMapFragment और ConsumerMapView, दोनों एसिंक्रोनस रूप से रिटर्न करते हैं ConsumerMapReadyCallback में ConsumerGoogleMap. ConsumerGoogleMap का शुल्क देकर, प्रॉडक्ट को लौटाया जा सकता है getConsumerController() से ConsumerController. आपने लोगों तक पहुंचाया मुफ़्त में ConsumerGoogleMap को ऐक्सेस कर सकता है और ConsumerController के बारे में ज़्यादा जानें.

Java

private ConsumerGoogleMap consumerGoogleMap;
private ConsumerController consumerController;
private ConsumerMapView consumerMapView;

consumerMapView.getConsumerGoogleMapAsync(
    new ConsumerMapReadyCallback() {
      @Override
      public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerMap) {
        consumerGoogleMap = consumerMap;
        consumerController = consumerMap.getConsumerController();
      }
    },
    this, null);

Kotlin

var consumerGoogleMap: ConsumerGoogleMap
var consumerController: ConsumerController
val consumerMapView = findViewById(R.id.consumer_map_view) as ConsumerMapView

consumerMapView.getConsumerGoogleMapAsync(
  object : ConsumerMapReadyCallback() {
    override fun onConsumerMapReady(consumerMap: ConsumerGoogleMap) {
      consumerGoogleMap = consumerMap
      consumerController = consumerMap.getConsumerController()
    },
    /* fragmentActivity= */ this,
    /* googleMapOptions= */ null,
  }
)

ConsumerGoogleMap

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

ConsumerController

ConsumerController से आपको राइड शेयरिंग की सुविधा का ऐक्सेस मिलता है, जैसे कि जैसे, यात्रा की निगरानी करना, यात्रा की स्थिति को कंट्रोल करना, और जगहों की जानकारी सेट करना.

यात्रा शेयर करने की सुविधा सेट अप करना

बैकएंड का ग्राहक से वाहन में मिलान होने के बाद, JourneySharingSession का इस्तेमाल करें का इस्तेमाल करें. गतिविधि शेयर करने की सुविधा, वाहन की जगह और रास्ता. अपने ऐप्लिकेशन में SDK टूल लागू करने के बाद, यात्राओं की निगरानी करने, अपडेट को सुनने, और गड़बड़ियों को ठीक करने की सुविधा. नीचे दी गई प्रक्रियाओं में यह माना जाता है कि बैकएंड सेवाएं मौजूद हैं और आपके सेवा देने वाली कंपनी, वाहनों से मिलते-जुलते ग्राहकों के लिए काम कर रही है.

  1. TripModel ऑब्जेक्ट के बारे में जानकारी पाने के लिए, लिसनर को रजिस्टर करें यात्रा का अनुमानित समय, जैसे कि ETA (आने का अनुमानित समय) और दूरी यह ज़रूरी है कि वाहन को पहुंचने से पहले ही यात्रा करनी पड़े.

    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)
    

यात्रा की जानकारी शेयर करने की सुविधा बंद करना

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

यहां दिया गया सैंपल कोड, यात्रा की जानकारी शेयर करने की सुविधा को बंद करने का तरीका बताता है.

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 तरीका, यात्रा की निगरानी के दौरान होने वाली गड़बड़ियों को दिखाता है. उपभोक्ता SDK टूल के लिए मैपिंग गड़बड़ियां, उन ही एचटीटीपी/RPC दिशा-निर्देशों का पालन करती हैं जो Google Cloud Platform. यात्रा की निगरानी करते समय दिखने वाली सामान्य गड़बड़ियों में ये शामिल हैं:

HTTP RPC ब्यौरा
400 INVALID_ARGUMENT क्लाइंट ने यात्रा का गलत नाम दिया है. कॉन्टेंट बनाने यात्रा का नाम इस प्रारूप में होना चाहिए providers/{provider_id}/trips/{trip_id}. provider_id Cloud प्रोजेक्ट, जिसका मालिकाना हक सेवा देने वाली कंपनी के पास है.
401 पुष्टि नहीं की गई अनुरोध की पुष्टि नहीं की जा सकी, क्योंकि अमान्य JWT टोकन. यह गड़बड़ी होगी अगर JWT टोकन को बिना यात्रा के साइन किया गया है id या JWT टोकन की समय-सीमा खत्म हो गई है.
403 PERMISSION_DENIED क्लाइंट के पास ज़रूरी जानकारी नहीं है अनुमति. यह गड़बड़ी तब होती है जब JWT टोकन अमान्य है, क्लाइंट के पास यह नहीं है अनुमति है या इसके लिए एपीआई चालू नहीं है क्लाइंट प्रोजेक्ट पर जाएं. JWT टोकन मौजूद नहीं है या टोकन को यात्रा के साथ साइन किया गया है वह आईडी जिसका अनुरोध किए गए यात्रा आईडी से मेल नहीं खाता.
429 RESOURCE_EXHAUSTED संसाधन कोटा शून्य या दर पर है ट्रैफ़िक की सीमा पार हो गई है.
503 हवा की क्वालिटी की जानकारी उपलब्ध नहीं है सेवा उपलब्ध नहीं है. आम तौर पर, सर्वर की कमी आई है.
504 DEADLINE_EXCEEDED अनुरोध की समयसीमा खत्म हो गई है. इससे ऐसा सिर्फ़ तब होता है, जब कॉल करने वाला व्यक्ति समयसीमा तय करता है जो इस तरीके की डिफ़ॉल्ट वैल्यू से कम हो आखिरी तारीख (यानी कि अनुरोध की गई समयसीमा खत्म नहीं हुई है) की प्रक्रिया को पूरा करने के लिए, अनुरोध) और अनुरोध पूरा नहीं हुआ पूरा नहीं कर सकेंगे.

ज़्यादा जानकारी के लिए, यह देखें उपभोक्ता SDK टूल की गड़बड़ी को ठीक करना.