ऐसा विज्ञापन आईडी पाएं जिसे उपयोगकर्ता रीसेट कर सके Android Jetpack का हिस्सा.

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

आपके ऐप्लिकेशन को चलाने वाले सभी डिवाइसों पर, विज्ञापन ट्रैक करने के स्टैंडर्ड तरीके का इस्तेमाल करने के लिए, विज्ञापन आईडी लाइब्रेरी का इस्तेमाल किया जा सकता है. यह लाइब्रेरी, Android 4.0 (एपीआई लेवल 14) और इसके बाद के वर्शन वाले डिवाइसों पर उपलब्ध है. यह सिस्टम-लेवल के विज्ञापन देने वाली कंपनियों के साथ इंटरैक्ट करने के लिए एक इंटरफ़ेस तय करती है. इस इंटरफ़ेस की मदद से, आपका ऐप्लिकेशन विज्ञापन आईडी की वैल्यू लगातार पा सकता है.

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

इस गाइड में, Advertising ID library के क्लाइंट मॉड्यूल का इस्तेमाल करने का तरीका बताया गया है. इससे हर डिवाइस के उपयोगकर्ता के हिसाब से एक जैसा विज्ञापन आईडी मिलता है. इसके बाद, इस गाइड में लाइब्रेरी के आर्किटेक्चर के बारे में खास जानकारी दी गई है.

अपने क्लाइंट ऐप्लिकेशन को कॉन्फ़िगर करना

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

विज्ञापन आईडी को यूनिवर्सली यूनीक आइडेंटिफ़ायर (यूयूआईडी) फ़ॉर्मैट के तीसरे वर्शन या 128-बिट के बराबर फ़ॉर्मैट का इस्तेमाल करके दिखाया जाता है:

38400000-8cf0-11bd-b23e-10b96e40000d

विज्ञापन आईडी लाइब्रेरी, इस फ़ॉर्मैट का इस्तेमाल करके आईडी उपलब्ध कराने के लिए, ज़रूरत के हिसाब से रिटर्न वैल्यू को सामान्य करती है.

अपने ऐप्लिकेशन के लिए, उपयोगकर्ता के रीसेट करने लायक विज्ञापन आईडी को वापस पाने के लिए, यह तरीका अपनाएं:

  1. AdvertisingIdClient.isAdvertisingIdProviderAvailable() पर कॉल करके देखें कि विज्ञापन देने वाली कोई कंपनी उपलब्ध है या नहीं. अगर यह तरीका false दिखाता है, तो आपके ऐप्लिकेशन को विज्ञापन ट्रैकिंग से जुड़े इस्तेमाल के ज़रूरी मामलों को पूरा करने के लिए, किसी दूसरे तरीके का इस्तेमाल करना होगा.

  2. विज्ञापन आइडेंटिफ़ायर की जानकारी पाने के लिए, AdvertisingIdClient.getAdvertisingIdInfo() को कॉल करें. इसमें विज्ञापन आईडी भी शामिल है. विज्ञापन आईडी लाइब्रेरी, इस तरीके को वर्कर थ्रेड पर लागू करती है. साथ ही, कनेक्शन के लिए 10 सेकंड का टाइमआउट इस्तेमाल करती है.

नीचे दिए गए कोड स्निपेट में, विज्ञापन देने वाली कंपनी से विज्ञापन आईडी और अन्य जानकारी पाने का तरीका बताया गया है:

app/build.gradle

Groovy

dependencies {
    implementation 'androidx.ads:ads-identifier:1.0.0-alpha01'

    // Used for the calls to addCallback() in the snippets on this page.
    implementation 'com.google.guava:guava:28.0-android'
}

Kotlin

dependencies {
    implementation("androidx.ads:ads-identifier:1.0.0-alpha01")

    // Used for the calls to addCallback() in the snippets on this page.
    implementation("com.google.guava:guava:28.0-android")
}

MyAdIdClient

Kotlin

// Used for the call to addCallback() within this snippet.
import com.google.common.util.concurrent.Futures.addCallback

private fun determineAdvertisingInfo() {
    if (AdvertisingIdClient.isAdvertisingIdProviderAvailable()) {
        val advertisingIdInfoListenableFuture =
                AdvertisingIdClient.getAdvertisingIdInfo(applicationContext)

        addCallback(advertisingIdInfoListenableFuture,
                object : FutureCallback<AdvertisingIdInfo> {
            override fun onSuccess(adInfo: AdvertisingIdInfo?) {
                val id: String = adInfo?.id
                val providerPackageName: String = adInfo?.providerPackageName
                val isLimitTrackingEnabled: Boolean =
                                adInfo?.isLimitTrackingEnabled
            }

            // Any exceptions thrown by getAdvertisingIdInfo()
            // cause this method to be called.
            override fun onFailure(t: Throwable) {
                Log.e("MY_APP_TAG",
                        "Failed to connect to Advertising ID provider.")
                // Try to connect to the Advertising ID provider again or fall
                // back to an ad solution that doesn't require using the
                // Advertising ID library.
            }
        }, Executors.newSingleThreadExecutor())
    } else {
        // The Advertising ID client library is unavailable. Use a different
        // library to perform any required ad use cases.
    }
}

Java

// Used for the call to addCallback() within this snippet.
import com.google.common.util.concurrent.Futures;

private void determineAdvertisingInfo() {
    if (AdvertisingIdClient.isAdvertisingIdProviderAvailable()) {
        ListenableFuture<AdvertisingIdInfo> advertisingIdInfoListenableFuture =
                AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext());
        Futures.addCallback(advertisingIdInfoListenableFuture,
                new FutureCallback<AdvertisingIdInfo>() {
                    @Override
                    public void onSuccess(AdvertisingIdInfo adInfo) {
                        String id = adInfo.getId();
                        String providerPackageName =
                                adInfo.getProviderPackageName();
                        boolean isLimitTrackingEnabled =
                                adInfo.isLimitTrackingEnabled();

                    // Any exceptions thrown by getAdvertisingIdInfo()
                    // cause this method to be called.
                    @Override
                    public void onFailure(Throwable throwable) {
                        Log.e("MY_APP_TAG",
                                "Failed to connect to Advertising ID provider.");
                        // Try to connect to the Advertising ID provider again
                        // or fall back to an ad solution that doesn't require
                        // using the Advertising ID library.
                    }
                });
    } else {
        // The Advertising ID client library is unavailable. Use a different
        // library to perform any required ad use cases.
    }
}

विज्ञापन आईडी लाइब्रेरी का आर्किटेक्चर

विज्ञापन आईडी लाइब्रेरी का आर्किटेक्चर.
पहली इमेज. विज्ञापन आईडी लाइब्रेरी का आर्किटेक्चर

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

  • क्लाइंट मॉड्यूल, जो ऐप्लिकेशन में शामिल एक पतली लेयर होती है.
  • प्रोवाइडर मॉड्यूल, जिसे डिवाइस बनाने वाली कंपनी उपलब्ध कराती है. इस मॉड्यूल को लागू करने वाले लोगों को सेटिंग का यूज़र इंटरफ़ेस (यूआई) तय करना होगा, ताकि उपयोगकर्ताओं को विज्ञापन आईडी रीसेट करने और विज्ञापन ट्रैकिंग की प्राथमिकताओं को टॉगल करने की सुविधा मिल सके.

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

लाइब्रेरी, एक से ज़्यादा प्रोवाइडर को कैसे हैंडल करती है

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

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

विज्ञापन आईडी उपलब्ध कराने वाली लाइब्रेरी, विज्ञापन आईडी उपलब्ध कराने वाली कंपनियों को रैंक करने के लिए, इस क्रम का इस्तेमाल करती है:

  1. ऐसी कंपनियां जिन्होंने androidx.ads.identifier.provider.HIGH_PRIORITY की अनुमति का अनुरोध किया है.
  2. ऐसे प्रोवाइडर जिन्हें डिवाइस पर सबसे लंबे समय से इंस्टॉल किया गया है.
  3. वर्णमाला के क्रम में सबसे पहले दिखने वाली कंपनियां.