Android पर Topics API लागू करें

सेटअप

Topics API लागू करने के लिए, सबसे पहले आपको अपना डेवलपमेंट एनवायरमेंट सेट अप करना होगा. सेटअप करने के लिए नीचे दिए गए चरणों को पूरा करें:

  1. अप-टू-डेट रहने के लिए, Android प्राइवसी सैंडबॉक्स SDK टूल के नए वर्शन का इस्तेमाल करें निजता बनाए रखने वाले एपीआई के वर्शन का इस्तेमाल करें.

  2. अपने मेनिफ़ेस्ट में ये चीज़ें जोड़ें:

    • अनुमति: अपने ऐप्लिकेशन को Topics API को ऐक्सेस करने की अनुमति देने के लिए, ACCESS_ADSERVICES_TOPICS अनुमति शामिल करें:

      <uses-permission android:name="android.permission.ACCESS_ADSERVICES_TOPICS" />
      
    • विज्ञापन सेवाओं का कॉन्फ़िगरेशन: अपने मेनिफ़ेस्ट के <application> एलिमेंट में Ad Services की कॉन्फ़िगरेशन फ़ाइल का रेफ़रंस दें.

      <property android:name="android.adservices.AD_SERVICES_CONFIG"
      android:resource="@xml/ad_services_config" />
      

      मेनिफ़ेस्ट में रेफ़र किए गए Ad Services एक्सएमएल रिसॉर्स की जानकारी दें, जैसे कि res/xml/ad_services_config.xml. इनमें से किसी एक का इस्तेमाल करके, allowAllToAccess एट्रिब्यूट का इस्तेमाल करें ऐक्सेस देने के लिए, सभी SDK टूल या allowSdksToAccess एट्रिब्यूट का ऐक्सेस दें अलग-अलग SDK टूल इस्तेमाल कर सकते हैं. Ad Services की अनुमतियों और SDK टूल के ऐक्सेस कंट्रोल के बारे में ज़्यादा जानें.

      <ad-services-config>
          <topics allowAllToAccess="true"/>
      </ad-services-config>
      
  3. अपने SDK टूल में Topics API को कॉल करने के लिए, Privacy Sandbox के साथ अपनी विज्ञापन टेक्नोलॉजी को रजिस्टर करें. डिवाइस पर ऐप्लिकेशन की जांच करने के लिए, Topics के रजिस्ट्रेशन की जांच को इन कमांड से बंद किया जा सकता है:

    adb shell setprop debug.adservices.disable_topics_enrollment_check true
    
  4. Topics API का ऐक्सेस चालू करें. Topics API, डिफ़ॉल्ट रूप से बंद रहता है. आपको ADB कमांड का इस्तेमाल करके, इसे चालू करना होगा:

    adb shell device_config put adservices ppapi_app_signature_allow_list \"\*\"
    adb shell setprop debug.adservices.disable_topics_enrollment_check true
  5. डिवाइस पर विषयों को वापस पाने का तरीका जानने के लिए, सैंपल ऐप्लिकेशन के हमारे Java या Kotlin वर्शन को फ़ोर्क करके लागू करें.

विषयों के सेट का अनुरोध करें

Topics API की मुख्य सुविधा, TopicsManager ऑब्जेक्ट के अंदर मौजूद getTopics() तरीके में होती है. इस उदाहरण में इसकी जानकारी दी गई है:

Kotlin Java
fun getTopics(
        getTopicsRequest: GetTopicsRequest,
        executor: Executor,
        callback: OutcomeReceiver<GetTopicsResponse, Exception>
    ) { }
public void getTopics (@NonNull GetTopicsRequest getTopicsRequest,
    @NonNull Executor executor,
    @NonNull OutcomeReceiver<GetTopicsResponse, Exception> callback)

इस तरीके का इस्तेमाल करने के लिए, TopicsManager ऑब्जेक्ट और विषयों का डेटा पाने के लिए ज़रूरी पैरामीटर को शुरू करें. GetTopicsRequest, Topics API का डेटा पाने के लिए ज़रूरी जानकारी भेजता है. इसमें एक फ़्लैग भी शामिल होता है, जिससे यह पता चलता है कि कॉलर, ऑब्ज़र्वर के तौर पर काम करेगा या नहीं. ऑब्ज़र्वर के रूप में काम नहीं करने पर, getTopics कॉल पिछले Epoch का विषय दिखाता है, लेकिन ऐसा नहीं होगा के लिए विषयों के डेटा पर असर डाल सकते हैं. कॉन्टेंट बनाने OutcomeReceiver कॉलबैक नतीजे को एसिंक्रोनस तरीके से हैंडल करता है. उदाहरण के लिए:

Kotlin Java
private fun topicGetter() {
    val mContext = baseContext
    val mTopicsManager = mContext.getSystemService(TopicsManager::class.java)
    val mExecutor: Executor = Executors.newCachedThreadPool()
    val shouldRecordObservation = false
    val mTopicsRequestBuilder: GetTopicsRequest.Builder = GetTopicsRequest.Builder()
    mTopicsRequestBuilder.setAdsSdkName(baseContext.packageName)
    mTopicsRequestBuilder.setShouldRecordObservation(shouldRecordObservation)
    mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor,
        mCallback as OutcomeReceiver<GetTopicsResponse, Exception>)
}
private var mCallback: OutcomeReceiver<GetTopicsResponse, java.lang.Exception> =
object : OutcomeReceiver<GetTopicsResponse, java.lang.Exception> {
    override fun onResult(result: GetTopicsResponse) {
        // handle successful result
        val topicsResult = result.topics
        for (i in topicsResult.indices) {
            Log.i("Topic", topicsResult[i].getTopicId().toString())
        }
        if (topicsResult.size == 0) {
            Log.i("Topic", "Returned Empty")
        }
    }
    override fun onError(error: java.lang.Exception) {
        // handle error
        Log.i("Topic", "Error, did not return successfully")
    }
}
public void TopicGetter() {
    @NonNull Context mContext = getBaseContext();
    TopicsManager mTopicsManager = mContext.getSystemService(TopicsManager.class);
    Executor mExecutor = Executors.newCachedThreadPool();
    boolean shouldRecordObservation = false;
    GetTopicsRequest.Builder mTopicsRequestBuilder = new GetTopicsRequest.Builder();
    mTopicsRequestBuilder.setAdsSdkName(getBaseContext().getPackageName());
    mTopicsRequestBuilder.setShouldRecordObservation(shouldRecordObservation);
    mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor, mCallback);
}
OutcomeReceiver mCallback = new OutcomeReceiver<GetTopicsResponse, Exception>() {
    @Override
    public void onResult(@NonNull GetTopicsResponse result) {
        //Handle Successful Result
        List<Topic> topicsResult = result.getTopics();
        for (int i = 0; i < topicsResult.size(); i++) {
            Log.i("Topic", topicsResult.get(i).getTopicId().toString());
        }
        if (topicsResult.size() == 0) {
            Log.i("Topic", "Returned Empty");
        }
    }
    @Override
    public void onError(@NonNull Exception error) {
        // Handle error
        Log.i("Topic", "Experienced an error, and did not return successfully");
    }
};

आपका सेटअप तैयार होने के बाद, पाने के लिए कॉल किया जा सकता है GetTopicsResponse getTopics() तरीके से मिले नतीजे के तौर पर:

Kotlin Java
mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor,
        mCallback as OutcomeReceiver<GetTopicsResponse, java.lang.Exception>)
mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor, mCallback);

इस इनवोकेशन से, Topics ऑब्जेक्ट की सूची मिलेगी. इसमें आईडी वैल्यू शामिल होती हैं. ये वैल्यू, उपयोगकर्ता के लिए काम के ऑब्जेक्ट या किसी गड़बड़ी से जुड़े ओपन सोर्स टैक्सोनॉमी के विषयों से जुड़ी होती हैं. विषय इस उदाहरण से मिलते-जुलते होंगे:

/Internet & Telecom/Text & Instant Messaging

दिखाए जा सकने वाले संभावित विषयों की सूची के लिए, टैक्सोनॉमी देखें. यह टैक्सोनॉमी ओपन सोर्स है. इस पेज पर सबसे ऊपर मौजूद, सुझाव/राय/शिकायत देने के बटन का इस्तेमाल करके, सुझाए गए बदलाव दर्ज किए जा सकते हैं.

टेस्ट करना

Topics API, ऐप्लिकेशन के इस्तेमाल के आधार पर काम के और नए विषयों की जानकारी देता है. इस शुरुआत में वर्शन, एपीआई के व्यवहार की झलक देता है. साथ ही, हम नए विषयों के बारे में बात करते हैं.

बेहतर अनुभव पाने के लिए, हमारा सुझाव है कि आप कई ऐप्लिकेशन वाले टेस्टिंग एनवायरमेंट का इस्तेमाल करें. इसमें getTopics() को कॉल करके, यह देखा जा सकता है कि विषयों को कैसे चुना जाता है. GitHub पर मौजूद SDK टूल के रनटाइम और निजता बनाए रखने वाले एपीआई के रिपॉज़िटरी में, अलग-अलग Android Studio प्रोजेक्ट का एक सेट शामिल है. इससे आपको शुरुआत करने में मदद मिलेगी. इसमें ऐसे सैंपल भी शामिल हैं जिनमें Topics API को शुरू करने और उसे कॉल करने का तरीका बताया गया है.

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

adb shell device_config put adservices topics_epoch_job_period_ms 300000

topics_epoch_job_period_ms वैल्यू की पुष्टि get से की जा सकती है:

adb shell device_config get adservices topics_epoch_job_period_ms

Epoch कंप्यूटेशन को मैन्युअल तरीके से ट्रिगर करने के लिए, नीचे दिया गया कमांड चलाएं:

adb shell cmd jobscheduler run -f com.google.android.adservices.api 2

सैंपल ऐप्लिकेशन का इस्तेमाल करने के अलावा, एक ऐसा कोलैब भी है जिसमें इसका इस्तेमाल करके, विषयों के हिसाब से ऐप्लिकेशन की जानकारी के अलग-अलग कॉम्बिनेशन की जांच की जा सकती है क्लासिफ़ायर का इस्तेमाल करें. getTopics को कॉल करने पर, आपके ऐप्लिकेशन को किस तरह के नतीजे मिल सकते हैं, यह देखने के लिए इस colab का इस्तेमाल करें.

एन्क्रिप्ट (सुरक्षित) करने के तरीके की जानकारी

एन्क्रिप्ट (सुरक्षित) करने की सुविधा के लॉन्च होने के बाद, GetTopics() पर किए जाने वाले कॉल के लिए, अब EncryptedTopic ऑब्जेक्ट की सूची की मदद से रिस्पॉन्स दिया जाता है. इन नतीजों को डिक्रिप्ट करने पर नतीजे के तौर पर एक ऑब्जेक्ट मिलेगा, जो पिछले Topic ऑब्जेक्ट से मिलते-जुलते JSON फ़ॉर्मैट में होगा.

Topics API, HPKE (हाइब्रिड पब्लिक की) को एक ही बार में लागू करने की सुविधा देता है एन्क्रिप्ट (सुरक्षित) करने का तरीका). हम चाहते हैं कि रजिस्टर किया गया कॉलर, 32-बिट वाली सार्वजनिक कुंजी रजिस्टर करने के दौरान, सार्वजनिक तौर पर एन्क्रिप्ट (सुरक्षित) करने का यूआरएल एंडपॉइंट दिया गया. ये कुंजियां, ऐसा होना चाहिए कि Base64 कोड में बदला गया हो.

EncryptedTopic ऑब्जेक्ट के तीन फ़ील्ड हैं. वापस किए गए विषयों की सूची सार्वजनिक कुंजी के लिए संबंधित निजी कुंजी का उपयोग करके प्राप्त किया जाता है.

डेवलपमेंट के मकसद से, Topics API को एन्क्रिप्ट (सुरक्षित) करने की सुविधा की जांच करने के लिए, रजिस्ट्रेशन की जांच करें. इससे एपीआई को आपके रिस्पॉन्स को एन्क्रिप्ट (सुरक्षित) करने के लिए, जांच के लिए उपलब्ध सार्वजनिक पासकोड का इस्तेमाल करना पड़ेगा. एन्क्रिप्ट (सुरक्षित) किए गए विषयों को डिक्रिप्ट करने के लिए, संबंधित निजी कुंजी होती है.

सीमाएं

Topics API के लिए, जिन सुविधाओं पर काम चल रहा है उनकी सूची के लिए, रिलीज़ नोट देखें.

गड़बड़ियों और समस्याओं की शिकायत करना

आपके सुझाव, शिकायत या राय, Android पर प्राइवसी सैंडबॉक्स का अहम हिस्सा हैं. हमें बताएं या Android पर प्राइवसी सैंडबॉक्स को बेहतर बनाने के लिए आइडिया पाएं.

आगे क्या करना होगा

जानें कि उपयोगकर्ता और डेवलपर, Topics API को कैसे मैनेज और पसंद के मुताबिक बना सकते हैं. यह उपयोगकर्ता की प्राथमिकताओं और ज़रूरतों के हिसाब से किया जाता है.
जानें कि Topics, Android पर कैसे काम करता है. साथ ही, एपीआई फ़्लो के मुख्य चरणों के बारे में जानें.

इन्हें भी देखें

Android पर Topics API को बेहतर तरीके से समझने के लिए, हमारे संसाधन देखें.