Protected Audience API की डेवलपर गाइड

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


सुझाव या राय देना

Android पर Protected Audience API (पहले इसे FLEDGE के नाम से जाना जाता था) में Custom Audience API और विज्ञापन चुनने का एपीआई. विज्ञापन टेक्नोलॉजी से जुड़े प्लैटफ़ॉर्म और विज्ञापन देने वाले लोग या कंपनियां पिछले ऐप्लिकेशन सहभागिता के आधार पर कस्टमाइज़ किए गए विज्ञापन दिखाने के लिए इन API का उपयोग कर सकता है इस विकल्प से, सभी ऐप्लिकेशन में आइडेंटिफ़ायर को शेयर करने की सीमा तय की जाती है और उपयोगकर्ता के ऐप्लिकेशन को शेयर करने की सीमा तय की जाती है तीसरे पक्षों के साथ इंटरैक्शन की जानकारी.

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

Ad Select API एक ऐसा फ़्रेमवर्क उपलब्ध कराता है जिसकी मदद से कई डेवलपर कस्टम ऑडियंस के लिए स्थानीय तौर पर नीलामी चलाता है. इसे हासिल करने के लिए, सिस्टम कस्टम ऑडियंस से जुड़े प्रासंगिक विज्ञापनों पर विचार करता है और उन विज्ञापनों को प्रोसेस करना जिन्हें विज्ञापन टेक्नोलॉजी प्लैटफ़ॉर्म, डिवाइस पर वापस भेजता है.

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

इस गाइड में यह बताया गया है कि Android पर Protected Audience API की मदद से, कैसे काम किया जा सकता है ये काम करें:

  1. कस्टम ऑडियंस मैनेज करना
  2. डिवाइस पर विज्ञापन चुनने का विकल्प सेट अप करना और चलाना
  3. विज्ञापन इंप्रेशन की रिपोर्ट करना

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

शुरू करने से पहले, इन शर्तों को पूरा करें:

  1. Android पर प्राइवसी सैंडबॉक्स के लिए, अपना डेवलपमेंट एनवायरमेंट सेट अप करें.
  2. ऐसे डिवाइस पर सिस्टम इमेज इंस्टॉल करें जिस पर यह सुविधा काम करती है या किसी ऐसे डिवाइस पर सिस्टम इमेज इंस्टॉल करें एम्युलेटर, जिसमें Android पर प्राइवसी सैंडबॉक्स के साथ काम करने की सुविधा शामिल है.
  3. टर्मिनल में, Protected Audience API का ऐक्सेस चालू करें (बंद है डिफ़ॉल्ट रूप से) को डिफ़ॉल्ट रूप से कॉन्फ़िगर किया जा सकता है.

      adb shell device_config put adservices ppapi_app_allow_list \"*\"
    
  4. अपने ऐप्लिकेशन में ACCESS_ADSERVICES_CUSTOM_AUDIENCE की अनुमति शामिल करें मेनिफ़ेस्ट:

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

      <property android:name="android.adservices.AD_SERVICES_CONFIG"
                android:resource="@xml/ad_services_config" />
    
  6. अपने मेनिफ़ेस्ट में बताए गए विज्ञापन सेवाओं से जुड़े एक्सएमएल संसाधन के बारे में बताएं, जैसे res/xml/ad_services_config.xml. विज्ञापन की सेवाओं की अनुमतियों के बारे में ज़्यादा जानें और SDK टूल ऐक्सेस कंट्रोल के बारे में जानें.

      <ad-services-config>
        <custom-audiences allowAllToAccess="true" />
      </ad-services-config>
    
  7. डिफ़ॉल्ट रूप से, Ad Select API, सीमाएं लागू करता है नीलामी या इंप्रेशन रिपोर्टिंग के लिए, मेमोरी की ज़्यादा से ज़्यादा सीमा स्क्रिप्ट असाइन कर सकती है. मेमोरी सीमित करने की सुविधा के लिए, वेबव्यू वर्शन ज़रूरी है 105.0.5195.58 या इससे ज़्यादा. यह प्लैटफ़ॉर्म, वर्शन की जांच लागू करता है और अगर ऐसा होता है, तो selectAds और reportImpression एपीआई काम नहीं करेंगे संतुष्ट नहीं है. इसे सेट अप करने के दो विकल्प हैं:

    • पहला विकल्प: इस जांच को बंद करने के लिए, यहां दिया गया adb कमांड चलाएं:

      adb device_config put fledge_js_isolate_enforce_max_heap_size false
      
    • दूसरा विकल्प: Google Play Store से वेबव्यू बीटा इंस्टॉल करें. यह ज़रूरी है ऊपर बताए गए वर्शन के बराबर या उससे ज़्यादा होनी चाहिए.

कस्टम ऑडियंस में शामिल हों

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

  1. CustomAudienceManager ऑब्जेक्ट को शुरू करें.
  2. जैसे मुख्य पैरामीटर तय करके, CustomAudience ऑब्जेक्ट बनाएं खरीदार का पैकेज और प्रासंगिक नाम. इसके बाद, CustomAudience वाला JoinCustomAudienceRequest ऑब्जेक्ट ऑब्जेक्ट है.
  3. एसिंक्रोनस joinCustomAudience() को इसके साथ कॉल करें: JoinCustomAudienceRequest ऑब्जेक्ट और काम का Executor और OutcomeReceiver ऑब्जेक्ट.

Kotlin

val customAudienceManager: CustomAudienceManager =
    context.getSystemService(CustomAudienceManager::class.java)

// Initialize a custom audience.
val audience = CustomAudience.Builder()
    .setBuyer(buyer)
    .setName(name)
    ...
    .build()

// Initialize a custom audience request.
val joinCustomAudienceRequest: JoinCustomAudienceRequest =
    JoinCustomAudienceRequest.Builder().setCustomAudience(audience).build()

// Request to join a custom audience.
customAudienceManager.joinCustomAudience(joinCustomAudienceRequest,
    executor,
    outcomeReceiver)

Java

CustomAudienceManager customAudienceManager =
    context.getSystemService(CustomAudienceManager.class);

// Initialize a custom audience.
CustomAudience audience = new CustomAudience.Builder()
    .setBuyer(buyer)
    .setName(name)
    ...
    .build();

// Initialize a custom audience request.
JoinCustomAudienceRequest joinCustomAudienceRequest =
    new JoinCustomAudienceRequest.Builder().setCustomAudience(audience).build();

// Request to join a custom audience.
customAudienceManager.joinCustomAudience(joinCustomAudienceRequest,
    executor,
    outcomeReceiver);

यहां दिए गए पैरामीटर का कॉम्बिनेशन, हर एक की पहचान करता है डिवाइस पर CustomAudience ऑब्जेक्ट:

  • owner: मालिक के ऐप्लिकेशन का पैकेज नाम. यह स्पष्ट रूप से कॉलर ऐप्लिकेशन के पैकेज का नाम.
  • buyer: खरीदार की विज्ञापन नेटवर्क कंपनी का आइडेंटिफ़ायर, जो इस कस्टम विज्ञापन नेटवर्क कंपनी के लिए विज्ञापन मैनेज करता है ऑडियंस.
  • name: कस्टम ऑडियंस के लिए आर्बिट्रेरी नाम या आइडेंटिफ़ायर.

इसके अलग-अलग इंस्टेंस के साथ, joinCustomAudience() को बार-बार कॉल किया जा रहा है CustomAudience, इसके साथ मौजूद CustomAudience को अपडेट करता है owner, buyer और name पैरामीटर से मेल खाते हैं. निजता की सुरक्षा के लिए, एपीआई के नतीजे, "क्रिएशन" में अंतर नहीं करते और "अपडेट करो."

इसके अलावा, CustomAudience को इन ज़रूरी शर्तों के साथ बनाया जाना चाहिए पैरामीटर:

  • हर दिन अपडेट होने वाला यूआरएल: ऐसा एचटीटीपीएस यूआरएल जिसके लिए बैकग्राउंड में हर रोज़ क्वेरी की जाती है कस्टम ऑडियंस के उपयोगकर्ता के बिडिंग सिग्नल, भरोसेमंद बिडिंग का डेटा, और विज्ञापनों के लिए यूआरएल और मेटाडेटा रेंडर करने में मदद मिलती है.
  • बिडिंग लॉजिक यूआरएल: ऐसा एचटीटीपीएस यूआरएल जिस पर विज्ञापन को चुनने के दौरान, खरीदार का JavaScript बिडिंग लॉजिक. ज़रूरी फ़ंक्शन सिग्नेचर देखें इस JavaScript में.
  • विज्ञापन रेंडर करने के आईडी: यह एक आर्बिट्रेरी आईडी होता है, जिसे खरीदार की ओर से सेट की गई विज्ञापन टेक्नोलॉजी से कनेक्ट किया जाता है. यह है B&A के लिए पेलोड जनरेट करने के लिए ऑप्टिमाइज़ेशन.

CustomAudience ऑब्जेक्ट के लिए वैकल्पिक पैरामीटर में ये शामिल हो सकते हैं:

  • ऐक्टिवेशन का समय: कस्टम ऑडियंस, सिर्फ़ विज्ञापन चुनने में हिस्सा ले सकती है और इसके ऐक्टिवेशन समय के बाद, हर दिन के अपडेट मिलते हैं. इससे दर्शकों की दिलचस्पी बढ़ाने में मदद मिल सकती है किसी ऐप्लिकेशन के सक्रिय उपयोगकर्ता नहीं हैं, उदाहरण के लिए.
  • खत्म होने का समय: आगे का समय, जिसके बाद कस्टम ऑडियंस होता है डिवाइस से हटाया गया.
  • उपयोगकर्ता के बिडिंग सिग्नल: JSON स्ट्रिंग, जिसमें उपयोगकर्ता के सिग्नल होते हैं, जैसे कि उपयोगकर्ता की पसंदीदा स्थान-भाषा, जिसे खरीदार के बिडिंग लॉजिक JavaScript का इस्तेमाल करता है का इस्तेमाल करके विज्ञापन चुनने की प्रोसेस के दौरान बिड जनरेट की जा सकती हैं. इस फ़ॉर्मैट से, विज्ञापन टेक्नोलॉजी को प्लैटफ़ॉर्म, सभी प्लैटफ़ॉर्म पर कोड का दोबारा इस्तेमाल करते हैं और JavaScript में आसानी से इस्तेमाल किए जा सकते हैं फ़ंक्शन.
  • भरोसेमंद बिडिंग डेटा: एक एचटीटीपीएस यूआरएल और विज्ञापन चुनने की प्रोसेस, जो किसी भरोसेमंद कुंजी/वैल्यू से बोली लगाने के सिग्नल फ़ेच करती है सेवा.
  • विज्ञापन: ऐसे विज्ञापनों से संबंधित AdData ऑब्जेक्ट की सूची जो विज्ञापन चुनने में हिस्सा लेते हैं. हर AdData ऑब्जेक्ट में ये शामिल हैं:
    • रेंडर यूआरएल: यह ऐसा एचटीटीपीएस यूआरएल होता है जिस पर फ़ाइनल विज्ञापन को रेंडर करने के लिए क्वेरी की जाती है.
    • मेटाडेटा: JSON ऑब्जेक्ट को स्ट्रिंग के तौर पर क्रम में लगाया जाता है. इसमें, विज्ञापन चुनने की प्रोसेस के दौरान, खरीदार के लिए बिडिंग लगाने के तरीके के हिसाब से उसका इस्तेमाल किया जाना चाहिए.
    • विज्ञापन फ़िल्टर: एक क्लास, जिसमें ऐप्लिकेशन के लिए सभी ज़रूरी जानकारी होती है विज्ञापन चुनने के दौरान विज्ञापन फ़िल्टर करने की सुविधा और फ़्रीक्वेंसी कैपिंग इंस्टॉल की जा सकती है.

यहां CustomAudience ऑब्जेक्ट इंस्टैंशिएट का उदाहरण दिया गया है:

Kotlin

// Minimal initialization of a CustomAudience object
val customAudience: CustomAudience = CustomAudience.Builder()
    .setBuyer(AdTechIdentifier.fromString("my.buyer.domain.name"))
    .setName("example-custom-audience-name")
    .setDailyUpdateUrl(Uri.parse("https://DAILY_UPDATE_URL"))
    .setBiddingLogicUrl(Uri.parse("https://BIDDING_LOGIC_URL"))
    .build()

Java

// Minimal initialization of a CustomAudience object
CustomAudience customAudience = CustomAudience.Builder()
    .setBuyer(AdTechIdentifier.fromString("my.buyer.domain.name"))
    .setName("example-custom-audience-name")
    .setDailyUpdateUrl(Uri.parse("https://DAILY_UPDATE_URL"))
    .setBiddingLogicUrl(Uri.parse("https://BIDDING_LOGIC_URL"))
    .build();

Join कस्टम ऑडियंस() के नतीजों को मैनेज करना

एसिंक्रोनस joinCustomAudience() तरीका, OutcomeReceiver का इस्तेमाल करता है ऑब्जेक्ट का इस्तेमाल करके, एपीआई कॉल के नतीजे के बारे में बताएं.

  • onResult() कॉलबैक से पता चलता है कि कस्टम ऑडियंस चालू हो गई है बनाया या अपडेट किया गया.
  • onError() कॉलबैक, दो संभावित शर्तों को दिखाता है.
    • अगर JoinCustomAudienceRequest को अमान्य से शुरू किया गया है है, तो AdServicesException वजह के तौर पर IllegalArgumentException.
    • अन्य सभी त्रुटियों को AdServicesException वजह के तौर पर IllegalStateException.

यहां joinCustomAudience() के नतीजे को मैनेज करने का एक उदाहरण दिया गया है:

Kotlin

var callback: OutcomeReceiver<Void, AdServicesException> =
    object : OutcomeReceiver<Void, AdServicesException> {
    override fun onResult(result: Void) {
        Log.i("CustomAudience", "Completed joinCustomAudience")
    }

    override fun onError(error: AdServicesException) {
        // Handle error
        Log.e("CustomAudience", "Error executing joinCustomAudience", error)
    }
};

Java

OutcomeReceiver callback = new OutcomeReceiver<Void, AdServicesException>() {
    @Override
    public void onResult(@NonNull Void result) {
        Log.i("CustomAudience", "Completed joinCustomAudience");
    }

    @Override
    public void onError(@NonNull AdServicesException error) {
        // Handle error
        Log.e("CustomAudience", "Error executing joinCustomAudience", error);
    }
};

कस्टम ऑडियंस छोड़ें

अगर उपयोगकर्ता अब किसी खास कस्टम विज्ञापन यूनिट के लिए, कारोबार की शर्तें पूरी नहीं करता कस्टम सेगमेंट को हटाने के लिए, ऐप्लिकेशन या SDK टूल leaveCustomAudience() पर कॉल कर सकता है डिवाइस से ऑडियंस. CustomAudience को उसकी यूनीक वैल्यू के आधार पर हटाने के लिए पैरामीटर जोड़ने के बाद, ये काम करें:

  1. CustomAudienceManager ऑब्जेक्ट को शुरू करें.
  2. LeaveCustomAudienceRequest को कस्टम ऑडियंस के साथ शुरू करें buyer और name. इन इनपुट फ़ील्ड के बारे में ज़्यादा जानने के लिए, पढ़ें "कस्टम ऑडियंस में शामिल हों."
  3. एसिंक्रोनस leaveCustomAudience() तरीके को इस तरीके से कॉल करें: LeaveCustomAudienceRequest ऑब्जेक्ट और काम का Executor और OutcomeReceiver ऑब्जेक्ट.

Kotlin

val customAudienceManager: CustomAudienceManager =
    context.getSystemService(CustomAudienceManager::class.java)

// Initialize a LeaveCustomAudienceRequest
val leaveCustomAudienceRequest: LeaveCustomAudienceRequest =
    LeaveCustomAudienceRequest.Builder()
        .setBuyer(buyer)
        .setName(name)
        .build()

// Request to leave a custom audience
customAudienceManager.leaveCustomAudience(
    leaveCustomAudienceRequest,
    executor,
    outcomeReceiver)

Java

CustomAudienceManager customAudienceManager =
    context.getSystemService(CustomAudienceManager.class);

// Initialize a LeaveCustomAudienceRequest
LeaveCustomAudienceRequest leaveCustomAudienceRequest =
    new LeaveCustomAudienceRequest.Builder()
        .setBuyer(buyer)
        .setName(name)
        .build();

// Request to leave a custom audience
customAudienceManager.leaveCustomAudience(
    leaveCustomAudienceRequest,
    executor,
    outcomeReceiver);

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

विज्ञापन चुनना शुरू करें

Protected Audience API का इस्तेमाल करके विज्ञापन चुनने के लिए, selectAds() तरीके को कॉल करें:

  1. AdSelectionManager ऑब्जेक्ट शुरू करें.
  2. कोई AdSelectionConfig ऑब्जेक्ट बनाएं.
  3. एसिंक्रोनस selectAds() तरीके को इस तरीके से कॉल करें: AdSelectionConfig ऑब्जेक्ट और काम का Executor और OutcomeReceiver ऑब्जेक्ट.

Kotlin

val adSelectionManager: AdSelectionManager =
  context.getSystemService(AdSelectionManager::class.java)

// Initialize AdSelectionConfig
val adSelectionConfig: AdSelectionConfig =
  AdSelectionConfig.Builder().setSeller(seller)
    .setDecisionLogicUrl(decisionLogicUrl)
    .setCustomAudienceBuyers(customAudienceBuyers)
    .setAdSelectionSignals(adSelectionSignals)
    .setSellerSignals(sellerSignals)
    .setPerBuyerSignals(perBuyerSignals)
    .setBuyerContextualAds(
      Collections.singletonMap(
        contextualAds.getBuyer(), contextualAds
      )
    ).build()

// Run ad selection with AdSelectionConfig
adSelectionManager.selectAds(
  adSelectionConfig, executor, outcomeReceiver
)

Java

AdSelectionManager adSelectionManager =
    context.getSystemService(AdSelectionManager.class);

// Initialize AdSelectionConfig
AdSelectionConfig adSelectionConfig =
  new AdSelectionConfig.Builder()
    .setSeller(seller)
    .setDecisionLogicUrl(decisionLogicUrl)
    .setCustomAudienceBuyers(customAudienceBuyers)
    .setAdSelectionSignals(adSelectionSignals)
    .setSellerSignals(sellerSignals)
    .setPerBuyerSignals(perBuyerSignals)
    .setBuyerContextualAds(
      Collections.singletonMap(contextualAds.getBuyer(), contextualAds)
    )
    .build();

// Run ad selection with AdSelectionConfig
adSelectionManager.selectAds(adSelectionConfig, executor, outcomeReceiver);

selectAds() तरीके के लिए, AdSelectionConfig इनपुट डालना ज़रूरी है. यहां आपको नीचे दिए गए ज़रूरी पैरामीटर तय करने होंगे:

  • सेलर: विज्ञापन को चुनने की प्रोसेस शुरू करने वाले सेलर के विज्ञापन नेटवर्क का आइडेंटिफ़ायर.
  • डिसिज़न लॉजिक यूआरएल: ऐसा एचटीटीपीएस यूआरएल जिस पर सेलर के विज्ञापन नेटवर्क की प्रॉपर्टी पाने के लिए क्वेरी की जाती है JavaScript लॉजिक.
    • एचटीटीपीएस यूआरएल: यह अनुरोध, सेलर के विज्ञापन नेटवर्क का JavaScript लॉजिक जानने के लिए किया जाता है. ज़रूरी फ़ंक्शन सिग्नेचर देखें.
    • पहले से बने यूआरआई: जो FLEDGE के विज्ञापन चुनने के फ़ॉर्मैट के मुताबिक होते हैं. काम न करने या गलत तरीके से इस्तेमाल करने पर, IllegalArgumentException को ट्रिगर किया जाता है पहले से बनाए गए uri को पास कर दिया जाता है.
  • कस्टम ऑडियंस खरीदार: खरीदार के विज्ञापन नेटवर्क के लिए आइडेंटिफ़ायर की पूरी सूची जिन्हें सेलर, विज्ञापन चुनने की प्रोसेस में हिस्सा ले सकता है. ये खरीदार आइडेंटिफ़ायर इनमें से CustomAudience.getBuyer() से जुड़े हैं भी शामिल हो सकते हैं.

कस्टमाइज़ किए गए ज़्यादा विज्ञापनों के लिए, ये पैरामीटर वैकल्पिक रूप से तय किए जा सकते हैं चुनें:

  • विज्ञापन चुनने के सिग्नल: एक JSON ऑब्जेक्ट, जो स्ट्रिंग के तौर पर क्रम में होता है. इसमें यह शामिल होता है खरीदार के बिडिंग लॉजिक से इस्तेमाल किए जाने वाले सिग्नल JavaScript से फ़ेच किए गए CustomAudience.getBiddingLogicUrl().
  • सेलर के सिग्नल: एक JSON ऑब्जेक्ट, जो स्ट्रिंग के तौर पर क्रम में होता है. इसमें सिग्नल होते हैं इसका इस्तेमाल, विक्रेता के फ़ेच किए गए JavaScript डिसिज़न लॉजिक से किया गया AdSelectionConfig.getDecisionLogicUrl().
  • खरीदार के हर सिग्नल के हिसाब से: JSON ऑब्जेक्ट का मैप, जिसे स्ट्रिंग के तौर पर क्रम से लगाया जाता है, जिसमें ऐसे सिग्नल शामिल हों जिनका इस्तेमाल कुछ खरीदार कर सकते हैं बिडिंग लॉजिक JavaScript CustomAudience.getBiddingLogicUrl() से फ़ेच किया गया, जिसकी पहचान हिस्सा लेने वाली कस्टम ऑडियंस के खरीदार फ़ील्ड.
  • संदर्भ के हिसाब से विज्ञापन: विज्ञापन के उम्मीदवारों का ऐसा कलेक्शन, जिसे सीधे तौर पर इकट्ठा किया जाता है सुरक्षित ऑडियंस के बाहर होने वाली नीलामी के दौरान खरीदारों से नीलामी.

विज्ञापन चुनने के बाद, नतीजे, बिड, और सिग्नल अंदरूनी तौर पर बने रहते हैं . OutcomeReceiver.onResult() कॉलबैक AdSelectionOutcome, जिसमें यह शामिल है:

  • AdData.getRenderUrl() से मिला, जीतने वाले विज्ञापन के लिए रेंडर यूआरएल.
  • डिवाइस उपयोगकर्ता के लिए खास विज्ञापन चुनने का आईडी. इस आईडी का इस्तेमाल रिपोर्टिंग के लिए किया जाता है विज्ञापन इंप्रेशन.

अगर इन वजहों से विज्ञापन को चुनने की प्रोसेस पूरी नहीं हो पा रही है अमान्य तर्क, टाइम आउट या संसाधन का बहुत ज़्यादा इस्तेमाल न हो, तो OutcomeReceiver.onError() कॉलबैक से AdServicesException मिलता है ये सेटिंग लागू होती हैं:

  • यदि विज्ञापन का चयन अमान्य तर्क के साथ किया जाता है, तो AdServicesException, IllegalArgumentException को वजह.
  • अन्य सभी त्रुटियों को AdServicesException वजह के तौर पर IllegalStateException.

कॉन्टेंट के हिसाब से विज्ञापन

Protected Audience, सुरक्षित नीलामी में काम के विज्ञापन शामिल कर सकता है. कॉन्टेक्स्चुअल विज्ञापनों को AdTech सर्वर पर चुना जाना चाहिए. इसके बाद, उन्हें डिवाइस, Protected Audience API से बाहर है. इसके बाद, काम के विज्ञापन शामिल किए जा सकते हैं नीलामी में AdSelectionConfig का इस्तेमाल करके, जहां वे फ़ंक्शन करते हैं यह डिवाइस पर दिखने वाले विज्ञापनों की तरह ही होता है. इसमें नेगेटिव विज्ञापन फ़िल्टर करने की सुविधा भी शामिल है. एक बार Protected Audience API से जुड़ी नीलामी पूरी हो गई है. आपको reportImpression(). यह reportWin() को सबसे अच्छे प्रासंगिक विज्ञापन में कॉल करता है इंप्रेशन रिपोर्टिंग के पैटर्न के समान होता है, ताकि किसी साइट पर सबसे अच्छा परफ़ॉर्म करने वाला विज्ञापन दिखाया जा सके डिवाइस. प्रत्येक प्रासंगिक विज्ञापन के लिए एक खरीदार, एक बोली, रिपोर्टिंग लॉजिक का एक लिंक, यूआरएल, और विज्ञापन के मेटाडेटा को रेंडर करने में मदद कर सकता है.

ऐप्लिकेशन में प्रासंगिक विज्ञापन लागू करने के लिए, टारगेट ऐप्लिकेशन को ContextualAds ऑब्जेक्ट:

Kotlin

val contextualAds: ContextualAds =
  Builder().setBuyer(AdTechIdentifier.fromString(mBiddingLogicUri.getHost()))
    //Pass in your valid app install ads
    .setDecisionLogicUri(mContextualLogicUri)
    .setAdsWithBid(appInstallAd)
    .build()

Java

ContextualAds contextualAds = new ContextualAds.Builder()
  .setBuyer(AdTechIdentifier.fromString(mBiddingLogicUri.getHost()))
  .setDecisionLogicUri(mContextualLogicUri)
  //Pass in your valid app install ads
  .setAdsWithBid(appInstallAd)
  .build();

इसके बाद, नतीजा बनाते समय ContextualAds ऑब्जेक्ट को पास किया जा सकता है AdSelectionConfig:

Kotlin

// Create a new ad
val noFilterAd: AdData = Builder()
  .setMetadata(JSONObject().toString())
  .setRenderUri(Uri.parse(baseUri + NO_FILTER_RENDER_SUFFIX))
  .build()
val noFilterAdWithBid = AdWithBid(noFilterAd, NO_FILTER_BID)
contextualAds.getAdsWithBid().add(noFilterAdWithBid)

Java

// Create a new ad
AdData noFilterAd = new AdData.Builder()
  .setMetadata(new JSONObject().toString())
  .setRenderUri(Uri.parse(baseUri + NO_FILTER_RENDER_SUFFIX))
  .build();
AdWithBid noFilterAdWithBid = new AdWithBid(noFilterAd, NO_FILTER_BID);
contextualAds.getAdsWithBid().add(noFilterAdWithBid);

ऐप्लिकेशन इंस्टॉल विज्ञापन फ़िल्टर करना

ऐप्लिकेशन इंस्टॉल विज्ञापन फ़िल्टर करने की सुविधा की मदद से, ऐप्लिकेशन के लिए इंस्टॉलेशन विज्ञापन फ़िल्टर किए जा सकते हैं जो किसी डिवाइस पर पहले से इंस्टॉल हैं.

इस प्रक्रिया का पहला चरण यह तय करना है कि कौनसे विज्ञापन देने वाले का इस्तेमाल करें. यह आपकी पसंद के ऐप्लिकेशन में होना चाहिए का इस्तेमाल करें.

Kotlin

//Create a request for setting the app install advertisers
val adtech = AdTechIdentifier.fromString("your.enrolled.uri")
val adtechSet = setOf(adtech)
val request = SetAppInstallAdvertisersRequest(adtechSet)

//Set the app install advertisers in the ad selection manager
mAdSelectionManager.setAppInstallAdvertisers(
  request,
  mExecutor,
  object : OutcomeReceiver<Any?, Exception?>() {
    fun onResult(@NonNull ignoredResult: Any?) {
      Log.v("[your tag]", "Updated app install advertisers")
    }

    fun onError(@NonNull error: Exception?) {
      Log.e("[your tag]", "Failed to update app install advertisers", error)
    }
  })

Java

//Create a request for setting the app install advertisers
AdTechIdentifier adtech = AdTechIdentifier.fromString("your.enrolled.uri");
Set<AdTechIdentifier> adtechSet = Collections.singleton(adtech);
SetAppInstallAdvertisersRequest request = new SetAppInstallAdvertisersRequest(adtechSet);

//Set the app install advertisers in the ad selection manager
mAdSelectionManager.setAppInstallAdvertisers(
  request,
  mExecutor,
  new OutcomeReceiver<Object, Exception>() {
    @Override
    public void onResult(@NonNull Object ignoredResult) {
      Log.v("[your tag]", "Updated app install advertisers");
    }

    @Override
    public void onError(@NonNull Exception error) {
      Log.e("[your tag]", "Failed to update app install advertisers", error);
    }
  });

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

अगला कदम, प्रकाशक ऐप्लिकेशन में विज्ञापन फ़िल्टर करने की सुविधा सेट अप करना है. वह पक्ष जो विज्ञापन को पब्लिशर ऐप्लिकेशन में दिखाता है (ऐसा सप्लाई-साइड SDK टूल हो सकता है) को अपना AdFilters ऑब्जेक्ट, इस बात की जानकारी के साथ शुरू करना होगा कि कौनसे विज्ञापन हैं, जिन्हें वे फ़िल्टर करना चाहते हैं:

Kotlin

// Instantiate AdFilters object with package names.
val filters: AdFilters = Builder().setAppInstallFilters(
    Builder().setPackageNames(setOf("example.target.app")).build()
  ).build()

Java

// Instantiate AdFilters object with package names.
AdFilters filters = new AdFilters.Builder()
.setAppInstallFilters(
  new AppInstallFilters.Builder()
  .setPackageNames(Collections.singleton("example.target.app"))
  .build())
.build();

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

नया AdData इंस्टैंशिएट करते समय भी AdFilters को पास किया जा सकता है ऑब्जेक्ट:

Kotlin

// Instantiate an AdData object with the AdFilters created in the
// previous example.
val appInstallAd: AdData =
  Builder().setMetadata("{ ... }") // Valid JSON string
    .setRenderUri(Uri.parse("www.example-dsp1.com/.../campaign123.html"))
    .setAdFilters(filters).build()

Java

// Instantiate an AdData object with the AdFilters created in the
// previous example.
AdData appInstallAd = new AdData.Builder()
.setMetadata("{ ... }") // Valid JSON string
.setRenderUri(Uri.parse("www.example-dsp1.com/.../campaign123.html"))
    .setAdFilters(filters)
    .build();

फ़्रीक्वेंसी कैप फ़िल्टर करना

फ़्रीक्वेंसी कैप फ़िल्टर करने की सुविधा की मदद से, विज्ञापन टेक्नोलॉजी से जुड़ी यह सुविधा तय की जा सकती है कि किसी विज्ञापन को कितनी बार दिखाए गए. फ़्रीक्वेंसी कैप फ़िल्टर करने की सुविधा, विज्ञापन के ज़्यादा दिखने की दर को कम करती है और वैकल्पिक किसी विज्ञापन कैंपेन के लिए विज्ञापन चुनना.

फ़्रीक्वेंसी कैप फ़िल्टर के दो मुख्य कॉम्पोनेंट होते हैं: विज्ञापन इवेंट टाइप और कुंजी के नीचे मौजूद होता है. इस्तेमाल किए जा सकने वाले विज्ञापन इवेंट के मौजूदा टाइप:

  • जीत (जल्द आ रहा है): जीतने वाले इवेंट से पता चलता है कि विज्ञापन ने नीलामी जीती है. जीतें इवेंट, Protected Audience API से अपने-आप अपडेट हो जाते हैं. इसलिए, ये इवेंट नहीं किए जा सकते उसे सीधे डेवलपर ही कॉल कर सकता है. जीत डेटा केवल दिए गए कस्टम ऑडियंस को टारगेट करता है.
  • इंप्रेशन: reportImpression से अलग, डिवाइस पर मौजूद कॉलर (SSP या MMP), updateAdCounterHistogram() का इस्तेमाल करके पॉइंट इन कोड का इस्तेमाल करें. इंप्रेशन इवेंट उन सभी विज्ञापनों को दिखते हैं जो आपके विज्ञापन से जुड़े हैं कैंपेन, उसी DSP से कनेक्ट होगा.
  • व्यू: डिवाइस पर मौजूद कॉलर (SSP या MMP) किसी ऐसी जगह पर इवेंट शुरू करता है जहां कोड डालें, जिसे वे updateAdCounterHistogram() को कॉल करने के दौरान चुनते हैं. इवेंट देखें दिए गए DSP से संबंधित सभी विज्ञापनों को दिखाई देगा और केवल उसी कस्टम ऑडियंस.
  • क्लिक: डिवाइस पर मौजूद कॉलर (SSP या MMP) ने किसी इवेंट में कोड डालें, जिसे वे updateAdCounterHistogram() को कॉल करने के दौरान चुनते हैं. क्लिक इवेंट विज्ञापन, किसी खास डीएसपी से जुड़े सभी विज्ञापनों को दिखेंगे. यह विज्ञापन सिर्फ़ उन विज्ञापनों तक सीमित नहीं है एक जैसी कस्टम ऑडियंस.

पब्लिशर ऐप्लिकेशन में, डिवाइस पर मौजूद SSP या एमएमपी विज्ञापन का अनुरोध करता है इवेंट. updateAdCounterHistogram() को कॉल करने पर, फ़्रीक्वेंसी का काउंटर कैप फ़िल्टर को बढ़ाया जाता है, ताकि भविष्य की नीलामियां अप-टू-डेट रहें इस बारे में जानकारी कि उपयोगकर्ता किसी विज्ञापन को कितनी बार देख सकता है. विज्ञापन इवेंट के टाइप ये नहीं हैं संबंधित उपयोगकर्ता की कार्रवाई से ज़बरदस्ती जुड़े होते हैं और कॉलर को अपना इवेंट सिस्टम व्यवस्थित करने के लिए कहा जाता है. इस समय विज्ञापन काउंटर बढ़ाने के लिए किसी इवेंट के लिए, उपयोगकर्ता के डिवाइस पर मौजूद कलाकार, नीलामी में जीतने वाले विज्ञापन को चुनने का आईडी उपलब्ध कराता है.

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

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

अपनी नीलामी में फ़्रीक्वेंसी कैपिंग का इस्तेमाल करने के लिए, आपको सबसे पहले KeyedFrequencyCap ऑब्जेक्ट नीचे दिखाए गए हैं:

Kotlin

// Value used when incrementing frequency counter
val adCounterKey = 123

// Frequency cap exceeded after 2 counts
val keyedFrequencyCapForImpression: KeyedFrequencyCap = Builder(
  adCounterKey, 2, Duration.ofSeconds(10)
).build()

// Frequency cap exceeded after 1 counts
val keyedFrequencyCapForImpression: KeyedFrequencyCap = Builder(
  adCounterKey, 1, Duration.ofSeconds(10)
).build()

Java

// Value used when incrementing frequency counter
int adCounterKey = 123;

// Frequency cap exceeded after 2 counts
KeyedFrequencyCap keyedFrequencyCapForImpression =
  new KeyedFrequencyCap.Builder(
    adCounterKey, 2, Duration.ofSeconds(10)
  ).build();

// Frequency Cap exceeded after 1 counts
KeyedFrequencyCap keyedFrequencyCapForClick =
  new KeyedFrequencyCap.Builder(
    adCounterKey, 1, Duration.ofSeconds(10)
  ).build();

KeyedFrequencyCap ऑब्जेक्ट बन जाने के बाद, आप उन्हें किसी AdFilters ऑब्जेक्ट.

Kotlin

val filters: AdFilters = Builder()
  .setFrequencyCapFilters(
    Builder()
      .setKeyedFrequencyCapsForImpressionEvents(
        ImmutableObject.of(keyedFrequencyCapForImpression)
      )
      .setKeyedFrequencyCapsForClickEvents(
        ImmutableObject.of(keyedFrequencyCapForClick)
      )
  ).build()

Java

AdFilters filters = new AdFilters.Builder()
    .setFrequencyCapFilters(new FrequencyCapFilters.Builder()
        .setKeyedFrequencyCapsForImpressionEvents(
            ImmutableObject.of(keyedFrequencyCapForImpression)
        )
        .setKeyedFrequencyCapsForClickEvents(
            ImmutableObject.of(keyedFrequencyCapForClick)
        )
    ).build();

जब AdFilters ऑब्जेक्ट में, फ़्रीक्वेंसी कैप फ़िल्टर की जानकारी अपने-आप भर जाती है, तो यह कस्टम ऑडियंस बनाने के दौरान भेजी जाती है:

Kotlin

// Initialize a custom audience.
val audience: CustomAudience = Builder()
  .setBuyer(buyer)
  .setName(name)
  .setAds(
    listOf(
      Builder()
        .setRenderUri(renderUri)
        .setMetadata(JSONObject().toString())
        .setAdFilters(filters)
        .setAdCounterKeys(adCounterKeys)
        .build()
    )
  ).build()

Java

// Initialize a custom audience.
CustomAudience audience = new CustomAudience.Builder()
    .setBuyer(buyer)
    .setName(name)
    .setAds(Collections.singletonList(new AdData.Builder()
        .setRenderUri(renderUri)
        .setMetadata(new JSONObject().toString())
        .setAdFilters(filters)
        .setAdCounterKeys(adCounterKeys)
        .build()))
    .build();

जब कस्टम ऑडियंस में फ़्रीक्वेंसी कैप फ़िल्टर लागू किए जाते हैं, तब SSP ये काम कर सकता है: फिर ज़रूरी क्लिक, व्यू या इंप्रेशन इवेंट शुरू करें.

Kotlin

val callerAdTech: AdTechIdentifier = mAdSelectionConfig.getSeller()

val request: UpdateAdCounterHistogramRequest = Builder(
  adSelectionId,
  FrequencyCapFilters.AD_EVENT_TYPE_CLICK,  //CLICK, VIEW, or IMPRESSION
  callerAdTech
).build()

Java

AdTechIdentifier callerAdTech = mAdSelectionConfig.getSeller();

UpdateAdCounterHistogramRequest request =
  new UpdateAdCounterHistogramRequest.Builder(
      adSelectionId,
      FrequencyCapFilters.AD_EVENT_TYPE_CLICK, //CLICK, VIEW, or IMPRESSION
      callerAdTech
).build();

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

नेटवर्क कॉल के बिना प्रासंगिक विज्ञापन फ़िल्टर करना

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

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

नेटवर्क कॉल के बिना विज्ञापन चुनने के लिए:

  1. विज्ञापन फ़िल्टर करने की सुविधा सेट अप करना
  2. काम के विज्ञापन बनाना
  3. इसका इस्तेमाल करके AdSelectionConfig ऑब्जेक्ट बनाएं:

    1. खरीदारों की खाली सूची
    2. सबसे ऊंची बिड चुनने के लिए, पहले से बना यूआरआई
    3. कॉन्टेंट के हिसाब से विज्ञापन
    4. स्कोरिंग सिग्नल के लिए एक खाली यूआरआई. खाली यूआरआई को कि आपको स्कोरिंग के लिए भरोसेमंद सिग्नल फ़ेच करने का इस्तेमाल नहीं करना है:
    Uri prebuiltURIScoringUri = Uri.parse("ad-selection-prebuilt://ad-selection/highest-bid-wins/?reportingUrl=your.registered.uri/reporting");
    // Initialize AdSelectionConfig
    AdSelectionConfig adSelectionConfig =
      new AdSelectionConfig.Builder()
        .setSeller(seller)
        .setDecisionLogicUri(prebuiltURIScoringUri)
        .setCustomAudienceBuyers(Collections.emptyList())
        .setAdSelectionSignals(adSelectionSignals)
        .setSellerSignals(sellerSignals)
        .setPerBuyerSignals(perBuyerSignals)
        .setBuyerContextualAds(buyerContextualAds)
        .setTrustedScoringSignalsUri(Uri.EMPTY)
        .build();
    
  4. विज्ञापन चुनना:

    adSelectionManager.selectAds(
        adSelectionConfig,
        executor,
        outcomeReceiver);
    

पहले से बने यूआरआई का इस्तेमाल करके अपना रिपोर्टिंग JavaScript चलाएं

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

  1. पहले से बने यूआरआई का इस्तेमाल करके संदर्भ के हिसाब से विज्ञापन चुनने के लिए चरण चलाएं
  2. रिपोर्टिंग शुरू करने से पहले, अपने AdSelectionConfig की कॉपी बनाएं

    adSelectionConfigWithYourReportingJS = adSelectionConfig.cloneToBuilder()
      // Replace <urlToFetchYourReportingJS> with your own URL:
      .setDecisionLogicUri(Uri.parse(<urlToFetchYourReportingJS>))
      .build();
    
  3. इंप्रेशन रिपोर्टिंग चलाएं

    // adSelectionId is from the result of the previous selectAds run
    ReportImpressionRequest request = new ReportImpressionRequest(
      adSelectionId,
      adSelectionConfigWithYourReportingJS);
    adSelectionManager.reportImpression(
      request,
      executor,
      outcomeReceiver);
    

वॉटरफ़ॉल मीडिएशन चलाना

वॉटरफ़ॉल मीडिएशन की सुविधा के लिए, तीसरे पक्ष के कई एसडीके (3P नेटवर्क) की ज़रूरत होती है इसे पहले पक्ष के SDK टूल मीडिएशन नेटवर्क से बनाया गया हो. वॉटरफ़ॉल मीडिएशन उसी तरह से किया जाता है चाहे नीलामी डिवाइस पर हुई हो या किसी बोली और नीलामी से जुड़ी सेवाएं (B&A).

3P नेटवर्क

3P नेटवर्क को कोई ऐसा अडैप्टर देना होगा जो मीडिएशन नेटवर्क को ये काम करने की अनुमति देता है नीलामी करने के लिए ज़रूरी तरीके शुरू करना:

  • विज्ञापन चुनना शुरू करें
  • रिपोर्ट इंप्रेशन

यहां मीडिएशन नेटवर्क अडैप्टर का उदाहरण दिया गया है:

Kotlin

class NetworkAdaptor {
    private val adSelectionManager : AdSelectionManager

    init {
        adSelectionManager = context.getSystemService(AdSelectionManager::class.java)
    }

    fun selectAds() {...}

    fun reportImpressions() {...}
}

Java

class NetworkAdaptor {
    AdSelectionManager adSelectionManager;

    public NetworkAdaptor() {
        AdSelectionManager adSelectionManager =
            context.getSystemService(AdSelectionManager.class);
    }

    public void selectAds() {...}

    public void reportImpressions() {...}
}

हर SDK टूल के पास, विज्ञापन चुनने की सेवा देने वाले मैनेजर और क्लाइंट के साथ-साथ उनके अपने खुद के मैनेजर और क्लाइंट भी होते हैं selectAds और reportImpressions लागू करना. SDK टूल की सेवा देने वाली कंपनियां डिवाइस पर नीलामियों या B&A के लिए विज्ञापन चुनने का तरीका चलाने से जुड़े सेक्शन B&A नीलामियों के लिए जानकारी. विज्ञापन की शिकायत करने का तरीका अपनाएं इंप्रेशन (इसके लिए एक SSP इंप्रेशन रिपोर्टिंग के बाद रिपोर्टिंग.

मीडिएशन नेटवर्क

3P नेटवर्क की तरह, मीडिएशन नेटवर्क को भी selectAds और reportImpression लागू करना. विज्ञापन चलाने का तरीका जानने के लिए सेक्शन देखें चुनने और ज़्यादा जानकारी के लिए विज्ञापन इंप्रेशन की रिपोर्ट करने का तरीका देखें.

मीडिएशन नेटवर्क, मीडिएशन चेन को चलाने और मीडिएशन चेन में खुद को शामिल कर लेता है. अगले सेक्शन में, Google Analytics 4 प्रॉपर्टी को सेट अप करने और इस प्रक्रिया को लागू करें.

मीडिएशन चेन और बिड फ़्लोर हासिल करना

मीडिएशन नेटवर्क की ज़िम्मेदारी, पहले पक्ष (1P) को वापस पाने की होती है कीवर्ड के हिसाब से विज्ञापन, मीडिएशन चेन, और तीसरे पक्ष के नेटवर्क बिड के लिए तय की गई कम से कम रकम (3P). यह ऐसा, मीडिएशन की मदद से लागू किए गए, संदर्भ के हिसाब से लागू किए गए विज्ञापनों को फिर से हासिल करने के अनुरोध में हो सकता है नेटवर्क. मीडिएशन चेन से यह तय होता है कि 3P नेटवर्क और 3P यानी तीसरे पक्ष के नेटवर्क के ज़रिए, और बोली की कम से कम सीमा, नीलामी की प्रोसेस में adSelectionSignals के तौर पर पास की जा सकती है.

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

मीडिएशन SDK, अपने लाइव eCPM के आधार पर, मीडिएशन चेन में खुद को शामिल कर सकता है 1P विज्ञापन बिड में से. Protected Audience API में, विज्ञापन के लिए बिड ओपेक होती हैं. मीडिएशन किसी दिए गए 1P की तुलना करने के लिए, SDK टूल को AdSelectionFromOutcomesConfig का इस्तेमाल करना चाहिए की बोली लगाने के लिए इस्तेमाल की जाती है. अगर 1P बिड ज़्यादा से ज़्यादा बिड सेट करने का मतलब है कि मीडिएशन SDK टूल को उस 3P नेटवर्क का.

विज्ञापन चुनना शुरू करें

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

एक AdSelectionFromresultssConfig बनाएं

AdSelectionFromOutcomesConfig, मीडिएशन नेटवर्क को सूची पास करने की अनुमति देता है AdSelectionIds (पिछली नीलामियों के नतीजे), विज्ञापन चुनने के सिग्नल, और JavaScript फ़ेच करने के लिए यूआरआई, जो कई कैंडिडेट के विज्ञापन चुनता है. सूची को उनकी बोलियों और सिग्नल के साथ JavaScript, जो AdSelectionIds से ज़्यादा बिड लगाने पर उनमें से कोई एक दिखा सकती है फ़्लोर या कोई भी सेट नहीं किया जा सकता, अगर मीडिएशन चेन जारी रखनी चाहिए.

मीडिएशन नेटवर्क, पहले पक्ष का इस्तेमाल करके AdSelectionFromOutcomesConfig बनाते हैं पिछले सेक्शन से AdSelectionId और 3P नेटवर्क के लिए बिड की कम से कम सीमा विचार किया जा रहा है. एक नया AdSelectionFromOutcomesConfig बनाया जाना चाहिए मीडिएशन चेन के हर चरण के लिए.

Kotlin

fun  runSelectOutcome(
    adSelectionClient : AdSelectionClient,
    outcome1p : AdSelectionOutcome,
    network3p : NetworkAdapter) : ListenableFuture<AdSelectionOutcome?> {
    val config = AdSelectionFromOutcomesConfig.Builder()
        .setSeller(seller)
        .setAdSelectionIds(listOf(outcome1p))
        .setSelectionSignals({"bid_floor": bid_floor})
        .setSelectionLogicUri(selectionLogicUri)
        .build()
    return adSelectionClient.selectAds(config)
}

Java

public ListenableFuture<AdSelectionOutcome> runSelectOutcome(AdSelectionOutcome outcome1p,
                                              NetworkAdapter network3p) {
    AdSelectionFromOutcomesConfig config = new AdSelectionFromOutcomesConfig.Builder()
            .setSeller(seller)
            .setAdSelectionIds(Collection.singletonList(outcome1p))
            .setSelectionSignals({"bid_floor": bid_floor})
            .setSelectionLogicUri(selectionLogicUri)
            .build();

    return adSelectionClient.selectAds(config){}
}

वॉटरफ़ॉल मीडिएशन के लिए, selectAds() तरीके को बदलने के लिए ज़रूरी है AdSelectionFromOutcomesConfig इनपुट, जहां आपको यह जानकारी देनी होगी ज़रूरी पैरामीटर:

  • सेलर: विज्ञापन को चुनने की प्रोसेस शुरू करने वाले सेलर के विज्ञापन नेटवर्क का आइडेंटिफ़ायर.
  • AdSelectionIds: पहले पक्ष के लिए चलाए गए पिछले selectAds() की सिंगलटन सूची विज्ञापन
  • विज्ञापन चुनने के सिग्नल: एक JSON ऑब्जेक्ट, जो स्ट्रिंग के तौर पर क्रम में होता है. इसमें यह शामिल होता है ऐसे सिग्नल जिनका इस्तेमाल खरीदार के लिए बिडिंग लगाने के तरीके के लिए किया जाएगा. इस मामले में, कम से कम बोली शामिल करें यह डेटा, दिए गए 3P नेटवर्क के लिए फिर से हासिल किया जाता है.
  • चुनने का लॉजिक यूआरआई: ऐसा एचटीटीपीएस यूआरएल जिस पर विज्ञापन को चुनने के दौरान क्वेरी की जाती है मीडिएशन नेटवर्क की JavaScript का इस्तेमाल करती है. ज़रूरी शर्तें देखें फ़ंक्शन सिग्नेचर सबमिट करें. JavaScript को 3P (तीसरे पक्ष का) विज्ञापन, अगर बिड, सेट की गई कम से कम रकम से ज़्यादा है या null नहीं दिखाई जाती है. इससे मीडिएशन SDK टूल, मीडिएशन चेन में तब छोटा कर सकता है, जब कोई विजेता मिल गया.

AdSelectionOutcomesConfig को बनाए जाने के साथ, इसकी selectAds() विधि को कॉल करें 3P (तीसरे पक्ष का) नेटवर्क, जो चेन में पहले नंबर पर है.

Kotlin

val adSelectionManager = context.getSystemService(AdSelectionManager::class.java)

// Initialize AdSelectionFromOutcomesConfig
AdSelectionFromOutcomesConfig adSelectionFromOutcomesConfig =
  AdSelectionFromOutcomesConfig.Builder()
    .setSeller(seller)
    .setAdSelectionIds(listof(outcome1p))
    .setSelectionSignals({"bid_floor": bid_floor})
    .setSelectionLogicUri(selectionLogicUri)
    .setAdSelectionIds(outcomeIds)
    .build()

// Run ad selection with AdSelectionConfig
adSelectionManager.selectAds(
    adSelectionFromOutcomesConfig,
    executor,
    outcomeReceiver)

Java

AdSelectionManager adSelectionManager =
    context.getSystemService(AdSelectionManager.class);

// Initialize AdSelectionFromOutcomesConfig
AdSelectionFromOutcomesConfig adSelectionFromOutcomesConfig =
        new AdSelectionFromOutcomesConfig.Builder()
            .setSeller(seller)
            .setAdSelectionIds(Collection.singletonList(outcome1p))
            .setSelectionSignals({"bid_floor": bid_floor})
            .setSelectionLogicUri(selectionLogicUri)
            .setAdSelectionIds(outcomeIds)
            .build();

// Run ad selection with AdSelectionConfig
adSelectionManager.selectAds(
    adSelectionFromOutcomesConfig,
    executor,
    outcomeReceiver);

ऑर्केस्ट्रेट वॉटरफ़ॉल मीडिएशन

मीडिएशन की मदद से लागू होने वाले ऑपरेशन का क्रम नीचे दिया गया है प्रोसेस.

  1. पहले पक्ष के विज्ञापन को चुनें.
  2. मीडिएशन चेन में दोहराएं. हर 3P नेटवर्क के लिए, ये काम करें:
    1. AdSelectionFromOutcomeConfig बिल्ड करें. इसमें 1P outcomeId और तीसरे पक्ष के SDK टूल के लिए बिड की कम से कम सीमा.
    2. पिछले चरण में बताए गए कॉन्फ़िगरेशन के साथ selectAds() को कॉल करें.
    3. अगर नतीजा खाली नहीं है, तो विज्ञापन दिखाएं.
    4. SDK टूल के मौजूदा नेटवर्क अडैप्टर के selectAds() तरीके से कॉल करें. अगर नतीजे में खाली नहीं है, तो विज्ञापन दिखाएं.
  3. अगर चेन से कोई विजेता नहीं मिलता है, तो पहले पक्ष का विज्ञापन दिखाएं.

Kotlin

fun runWaterfallMediation(mediationChain : List<NetworkAdapter>)
  : Pair<AdSelectionOutcome, NetworkAdapter> {
    val outcome1p = runAdSelection()

    var outcome : AdSelectionOutcome
    for(network3p in mediationChain) {
      outcome = runSelectOutcome(outcome1p, network3p)
      if (outcome1p.hasOutcome() && outcome.hasOutcome()) {
          return Pair(outcome, this)
      }

      outcome = network3p.runAdSelection()
      if(outcome.hasOutcome()) {
          return Pair(outcome, network3p)
      }
    }
  return Pair(outcome1p, this)
}

Java

class MediationNetwork {
    AdSelectionManager adSelectionManager;

    public MediationNetwork() {
        AdSelectionManager adSelectionManager =
            context.getSystemService(AdSelectionManager.class);
    }

    public void runAdSelection() {...}

    public void reportImpressions() {...}

    public Pair<AdSelectionOutcome, NetworkAdapter> runWaterfallMediation(
            List<NetworkAdapter> mediationChain) {
        AdSelectionOutcome outcome1p = runAdSelection();

        AdSelectionOutcome outcome;
        for(NetworkAdapter network3p: mediationChain) {
            if (outcome1p.hasOutcome() &&
              (outcome = runSelectOutcome(outcome1p, network3p)).hasOutcome()) {
                return new Pair<>(outcome, this);
            }

            if((outcome = network3p.runAdSelection()).hasOutcome()) {
                return new Pair<>(outcome, network3p);
            }
        }
        return new Pair<>(outcome1p, this);
    }

    /* Runs comparison by creating an AdSelectionFromOutcomesConfig */
    public AdSelectionOutcome runSelectOutcome(AdSelectionOutcome outcome1p,
                                              NetworkAdapter network3p) { ... }
}

विज्ञापन इंप्रेशन की रिपोर्ट करना

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

एक SSP इंप्रेशन रिपोर्टिंग

विज्ञापन चुनने के वर्कफ़्लो से, जीतने वाले विज्ञापन को चुनने के बाद, आपको विज्ञापन में हिस्सा लेने वाले बाय-साइड और सेल-साइड प्लैटफ़ॉर्म को मिले इंप्रेशन की रिपोर्ट करना AdSelectionManager.reportImpression() तरीके से. किसी विज्ञापन की शिकायत करने के लिए इंप्रेशन:

  1. AdSelectionManager ऑब्जेक्ट शुरू करें.
  2. विज्ञापन चुनने के आईडी के साथ ReportImpressionRequest ऑब्जेक्ट बनाएं.
  3. एसिंक्रोनस reportImpression() तरीके को इस तरीके से कॉल करें: ReportImpressionRequest ऑब्जेक्ट और काम का Executor और OutcomeReceiver ऑब्जेक्ट.

Java

AdSelectionManager adSelectionManager =
    context.getSystemService(AdSelectionManager.class);

// Initialize a ReportImpressionRequest
ReportImpressionRequest reportImpressionRequest =
        new ReportImpressionRequest.Builder()
                .setAdSelectionId(adSelectionId)
                .setAdSelectionConfig(adSelectionConfig)
                .build();

// Request to report the impression with the ReportImpressionRequest
adSelectionManager.reportImpression(
    reportImpressionRequest,
    executor,
    outcomeReceiver);

Kotlin

val adSelectionManager = context.getSystemService(AdSelectionManager::class.java)

// Initialize a ReportImpressionRequest
val adSelectionConfig: ReportImpressionRequest =
    ReportImpressionRequest.Builder()
        .setAdSelectionId(adSelectionId)
        .setAdSelectionConfig(adSelectionConfig)
        .build()

// Request to report the impression with the ReportImpressionRequest
adSelectionManager.reportImpression(
    reportImpressionRequest,
    executor,
    outcomeReceiver)

ReportImpressionRequest को इन निर्देशों के साथ शुरू करें पैरामीटर:

  • विज्ञापन चुनने का आईडी: यह आईडी सिर्फ़ उस डिवाइस के उपयोगकर्ता के लिए यूनीक होता है, जो विज्ञापन को चुना गया.
  • विज्ञापन चुनने का कॉन्फ़िगरेशन: वही कॉन्फ़िगरेशन, जिसका इस्तेमाल selectAds() में किया गया है कॉल की पहचान, दिए गए विज्ञापन को चुनने के आईडी से की गई.

एसिंक्रोनस reportImpression() तरीका, OutcomeReceiver का इस्तेमाल करता है ऑब्जेक्ट का इस्तेमाल करके, एपीआई कॉल के नतीजे के बारे में बताएं.

  • onResult() कॉलबैक से पता चलता है कि इंप्रेशन की रिपोर्टिंग वाले यूआरएल बनाया गया और अनुरोध शेड्यूल कर दिया गया है.
  • onError() कॉलबैक, इन संभावित स्थितियों के बारे में बताता है:
    • अगर कॉल की शुरुआत किसी अमान्य इनपुट आर्ग्युमेंट के साथ की जाती है, तो AdServicesException, IllegalArgumentException को इस तौर पर दिखाता है मदद मिल सकती है.
    • अन्य सभी त्रुटियों को AdServicesException वजह के तौर पर IllegalStateException.

वॉटरफ़ॉल मीडिएशन इंप्रेशन रिपोर्टिंग

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

एसएसपी इस 3P SDK टूल कोड के उदाहरण का इस्तेमाल, इसमें शामिल होने के तरीके के लिए प्रोटोटाइप के तौर पर कर सकते हैं मीडिएशन फ़्लो:

Pair<AdSelectionOutcome, NetworkAdapter> winnerOutcomeAndNetwork =
         mediationSdk.orchestrateMediation(mediationChain);

if (winner.first.hasOutcome()) {
      winner.second.reportImpressions(winner.first.getAdSelectionId());

इंप्रेशन रिपोर्टिंग एंडपॉइंट

रिपोर्ट इंप्रेशन एपीआई, उन एंडपॉइंट को एचटीटीपीएस जीईटी अनुरोध जारी करता है जो इनसे मिला होता है सेल-साइड प्लैटफ़ॉर्म और बाय-साइड प्लैटफ़ॉर्म को बेहतर बनाने के लिए:

बाय-साइड प्लैटफ़ॉर्म एंडपॉइंट:

  • एपीआई, इन कामों के लिए कस्टम ऑडियंस में दिए गए बिडिंग लॉजिक यूआरएल का इस्तेमाल करता है खरीदार का दिया गया JavaScript फ़ेच करें, जिसमें इंप्रेशन रिपोर्टिंग यूआरएल में बदलें.
  • reportWin() JavaScript फ़ंक्शन शुरू करें, जो वापस आ सकता है खरीदार के इंप्रेशन रिपोर्टिंग URL को.

सेल-साइड प्लैटफ़ॉर्म एंडपॉइंट:

  • AdSelectionConfig में बताए गए डिसिज़न लॉजिक यूआरएल का इस्तेमाल करें ऑब्जेक्ट सबमिट करें.
  • reportResult() JavaScript फ़ंक्शन को शुरू करें, जिससे विक्रेता के इंप्रेशन रिपोर्टिंग URL में शामिल है.

बोली और नीलामी से जुड़ी सेवाओं की रिपोर्टिंग

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

इंप्रेशन की रिपोर्टिंग के लिए सबसे सही तरीका

reportImpression() तरीके को इस तरह से डिज़ाइन किया गया है कि रिपोर्टिंग.

विज्ञापन इंटरैक्शन की रिपोर्ट करना

Protected Audience, रेंडर किया गया विज्ञापन होता है. इसमें देखने का समय, क्लिक, होवर, या कोई अन्य उपयोगी मेट्रिक इकट्ठा की जा सकती है. इन्हें पाने की प्रक्रिया रिपोर्ट के लिए दो चरणों की ज़रूरत होती है. सबसे पहले, खरीदारों और विक्रेताओं को इन रिपोर्ट को अपनी रिपोर्टिंग JavaScript में शामिल करना चाहिए. इसके बाद, क्लाइंट को यह करना होगा तो इन इवेंट की शिकायत करें.

इंटरैक्शन इवेंट पाने के लिए रजिस्टर करना

इंटरैक्शन इवेंट के लिए, खरीदार के reportWin() में रजिस्टर होता है और JavaScript फ़ंक्शन का इस्तेमाल करने वाले विक्रेता के reportResult() JavaScript फ़ंक्शन प्लैटफ़ॉर्म से मिली जानकारी: registerAdBeacon. इनाम पाने के लिए रजिस्टर करना इवेंट रिपोर्ट के लिए, बस अपनी रिपोर्टिंग से प्लैटफ़ॉर्म JavaScript Function को कॉल करें JavaScript. निम्न स्निपेट खरीदार के reportWin() का उपयोग कर रहा है, लेकिन वही वाला तरीका reportResult() पर लागू होता है.

reportWin(
  adSelectionSignals,
  perBuyerSignals,
  signalsForBuyer,
  contextualSignals,
  customAudienceSignals) {
    ...
    // Calculate reportingUri, clickUri, viewUri, and hoverUri
    registerAdBeacon("click", clickUri)
    registerAdBeacon("view", viewUri)
    registerAdBeacon("hover", hoverUri)

    return reportingUrl;
}

इंटरैक्शन इवेंट की रिपोर्टिंग

इंप्रेशन की रिपोर्ट करने के बाद, क्लाइंट पहले से रजिस्टर किए गए बाय-साइड और सेल-साइड प्लैटफ़ॉर्म को मिला है. AdSelectionManager.reportInteraction() तरीका. किसी विज्ञापन इवेंट की शिकायत करने के लिए:

  1. AdSelectionManager ऑब्जेक्ट शुरू करें.
  2. विज्ञापन चुनने के आईडी के साथ, ReportInteractionRequest ऑब्जेक्ट बनाएं, इंटरैक्शन कुंजी, इंटरैक्शन डेटा, और रिपोर्टिंग डेस्टिनेशन.
  3. request ऑब्जेक्ट के साथ एसिंक्रोनस reportInteraction() तरीके को कॉल करें Executor और OutcomeReceiver ऑब्जेक्ट.
AdSelectionManager adSelectionManager =
    context.getSystemService(AdSelectionManager.class);

// Initialize a ReportInteractionRequest
ReportInteractionRequest request =
  new ReportInteractionRequest.Builder()
    .setAdSelectionId(adSelectionId)
    .setInteractionKey("view")
    .setInteractionData("{ viewTimeInSeconds : 1 }") // Can be any string
    .setReportingDestinations(
      FLAG_REPORTING_DESTINATION_BUYER | FLAG_REPORTING_DESTINATION_SELLER
    )
    .build();

// Request to report the impression with the ReportImpressionRequest
adSelectionManager.reportInteraction(
  reportImpressionRequest,
  executor,
  outcomeReceiver);

ReportInteractionRequest को इन निर्देशों के साथ शुरू करें पैरामीटर:

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

एसिंक्रोनस reportInteraction() तरीका, OutcomeReceiver का इस्तेमाल करता है ऑब्जेक्ट का इस्तेमाल करके, एपीआई कॉल के नतीजे के बारे में बताएं.

  • onResult() कॉलबैक से पता चलता है कि रिपोर्ट इंटरैक्शन कॉल मान्य है.
  • onError() कॉलबैक, इन संभावित स्थितियों के बारे में बताता है:
    • अगर कॉल बैकग्राउंड में चल रहा ऐप्लिकेशन इस्तेमाल के दौरान किया जाता है, तो गड़बड़ी की जानकारी के साथ IllegalStateException दिखाया जाता है.
    • अगर क्लाइंट को reportInteraction() को कॉल करने से रोका जाता है, तो LimitExceededException लौटाया जाता है.
    • अगर पैकेज को Privacy सुरक्षित API (एपीआई) को कॉल करने के लिए रजिस्टर नहीं किया गया है, तो SecurityException() लौटाया गया.
    • अगर ऐप्लिकेशन रिपोर्टिंग इंटरैक्शन, कॉल करने वाले ऐप्लिकेशन से अलग है selectAds(), IllegalStateException दिखाया जाता है.
  • अगर उपयोगकर्ता ने प्राइवसी सैंडबॉक्स एपीआई को चालू करने की सहमति नहीं दी है, तो कॉल चुपचाप विफल हो जाएगा.

इंटरैक्शन रिपोर्टिंग एंडपॉइंट

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

इंटरैक्शन रिपोर्टिंग के लिए सबसे सही तरीका

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

बैकग्राउंड में रोज़ होने वाला अपडेट

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

  • उपयोगकर्ता के बिडिंग सिग्नल
  • भरोसेमंद बिडिंग का डेटा
  • AdData सूची

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

  • JSON के रिस्पॉन्स में, काम करने वाला कोई भी ऐसा मेटाडेटा फ़ील्ड हो सकता है जिसकी ज़रूरत हो अपडेट नहीं किया जा सकता.
  • हर JSON फ़ील्ड की अलग से पुष्टि की जाती है. क्लाइंट किसी भी गलत फ़ील्ड, जिनके कारण में उस विशेष फ़ील्ड में कोई अपडेट नहीं हुआ जवाब को प्राथमिकता दें.
  • कोई एचटीटीपी रिस्पॉन्स या खाली JSON ऑब्जेक्ट "{}" नतीजे में नहीं मिला मेटाडेटा के अपडेट.
  • जवाब वाले मैसेज का साइज़ 10 केबी से ज़्यादा नहीं होना चाहिए.
  • एचटीटीपीएस का इस्तेमाल करने के लिए, सभी यूआरआई ज़रूरी हैं.
  • trusted_bidding_uri के साथ खरीदार का ETLD+1 एक ही होना चाहिए.

उदाहरण: बैकग्राउंड में हर दिन के अपडेट के लिए JSON रिस्पॉन्स

{
    "user_bidding_signals" : { ... },  // Valid JSON object
    "trusted_bidding_data" : {
        "trusted_bidding_uri" : 'example-dsp1-key-value-service.com',
        "trusted_bidding_keys" : [ 'campaign123', 'campaign456', ... ]
    },
    'ads' : [
        {
            "render_uri" : 'www.example-dsp1.com/.../campaign123.html',
            'metadata' : { ... }  // Valid JSON object
        },
        {
            "render_uri" : 'www.example-dsp1.com/.../campaign456.html',
            'metadata' : { ... }  // Valid JSON object
        },
        ...
    ]
}

विज्ञापन चुनने के लिए JavaScript

विज्ञापन चुनने का वर्कफ़्लो, खरीदार के दिए गए और सेलर से मिला JavaScript.

खरीदार से मिला JavaScript, बिडिंग लॉजिक यूआरएल से फ़ेच किया जाता है. यह यूआरएल, कस्टम ऑडियंस बनाएं. लौटाए गए JavaScript में ये फ़ंक्शन शामिल होने चाहिए:

विक्रेता से मिला JavaScript, इसमें दिए गए डिसिज़न लॉजिक यूआरएल से फ़ेच किया जाता है विज्ञापन चुनने के एपीआई के लिए, AdSelectionConfig पैरामीटर. रिटर्न JavaScript में नीचे दिए गए फ़ंक्शन शामिल होने चाहिए:

generateBid()

function generateBid(
  ad,
  auction_signals,
  per_buyer_signals,
  trusted_bidding_signals,
  contextual_signals,
  user_signals,
  custom_audience_bidding_signals) {
  return {'status': 0, 'ad': ad, 'bid': ad.metadata.result };
}

इनपुट पैरामीटर:

  • ad: इस फ़ॉर्मैट वाला JSON ऑब्जेक्ट var ad = { 'render_url': url, 'metadata': json_metadata };
  • auction_signals, per_buyer_signals: नीलामी में बताए गए JSON ऑब्जेक्ट कॉन्फ़िगरेशन ऑब्जेक्ट
  • custom_audience_bidding_signals: प्लैटफ़ॉर्म से जनरेट किया गया JSON ऑब्जेक्ट. कॉन्टेंट बनाने इस JSON ऑब्जेक्ट का फ़ॉर्मैट यह है:

    var custom_audience_signals = {
      "owner":"ca_owner",
      "buyer":"ca_buyer",
      "name":"ca_name",
      "activation_time":"ca_activation_time_epoch_ms",
      "expiration_time":"ca_expiration_time_epoch_ms",
      "user_bidding_signals":"ca_user_bidding_signals"
    }
    

    कहां:

    • owner, buyer, और name ऐसी स्ट्रिंग है जिसे विज्ञापन चुनने में हिस्सा लेने वाली कस्टम ऑडियंस का एक ही नाम
    • activation_time और expiration_time चालू होने के समय और कस्टम ऑडियंस की समयसीमा खत्म होने की तारीख, जिसे Unix के बाद से सेकंड के तौर पर दिखाया जाता है Epoch
    • ca_user_bidding_signals एक JSON स्ट्रिंग है, जो बनाए जाने के समय CustomAudience में से userBiddingSignals फ़ील्ड
    • trusted_bidding_signals, contextual_signals और user_signals, JSON फ़ॉर्मैट में हैं ऑब्जेक्ट हैं. उन्हें खाली ऑब्जेक्ट के तौर पर पास किया जाता है और उन्हें अपने-आप डाल दिया जाता है रिलीज़ हो रही हैं. प्लैटफ़ॉर्म, इनके फ़ॉर्मैट को लागू नहीं करता और इसे मैनेज किया जाता है से बचा जा सकता है.

नतीजा:

  • ad: वह विज्ञापन है जिसके बारे में बिड बताती है. स्क्रिप्ट को इसकी कॉपी वापस लौटाने की अनुमति है अलग-अलग मेटाडेटा के साथ मिलने वाला विज्ञापन. इसकी render_url प्रॉपर्टी विज्ञापन में कोई बदलाव होने की उम्मीद है.
  • bid: इस विज्ञापन की बोली की वैल्यू दिखाने वाली फ़्लोट वैल्यू
  • status: एक पूर्णांक वैल्यू, जो:
    • 0: लागू करने के लिए
    • 1: (या कोई भी नॉन-ज़ीरो वैल्यू), जब कोई इनपुट सिग्नल अमान्य हो. तय सीमा में अगर जनरेट-बिड से एक नॉन-ज़ीरो वैल्यू वापस मिलती है, तो बिडिंग प्रोसेस सीए के सभी विज्ञापनों के लिए अमान्य है

scoreAd()

function scoreAd(
  ad,
  bid,
  ad_selection_config,
  seller_signals,
  trusted_scoring_signals,
  contextual_signal,
  user_signal,
  custom_audience_signal) {
    return {'status': 0, 'score': score };
}

इनपुट पैरामीटर:

  • ad: generateBid दस्तावेज़ देखें
  • bid: विज्ञापन के लिए बोली मान
  • ad_selection_config: JSON ऑब्जेक्ट जो selectAds एपीआई का AdSelectionConfig पैरामीटर. फ़ॉर्मैट यह है:

    var ad_selection_config = {
      'seller': 'seller',
      'decision_logic_url': 'url_of_decision_logic',
      'custom_audience_buyers': ['buyer1', 'buyer2'],
      'auction_signals': auction_signals,
      'per_buyer_signals': per_buyer_signals,
      'contextual_ads': [ad1, ad2]
    }
    
  • seller_signals: sellerSignals से लिए गए JSON ऑब्जेक्ट AdSelectionConfig एपीआई पैरामीटर

  • trusted_scoring_signal: adSelectionSignals फ़ील्ड से पढ़ा गया AdSelectionConfig एपीआई पैरामीटर

  • contextual_signals, user_signals: JSON ऑब्जेक्ट. फ़िलहाल, इन्हें इस खाते से पास किया गया है: खाली हैं और उन्हें अगली रिलीज़ में भर दिया जाएगा. इनका फ़ॉर्मैट इसे प्लैटफ़ॉर्म की मदद से लागू किया जाता है और इसे विज्ञापन टेक्नोलॉजी से मैनेज किया जाता है.

  • per_buyer_signals: JSON ऑब्जेक्ट, जोperBuyerSignal AdSelectionConfig एपीआई पैरामीटर, मौजूदा कस्टम पैरामीटर को कुंजी के तौर पर इस्तेमाल कर रहा है दर्शक खरीदार. अगर मैप में दी गई जानकारी के लिए कोई एंट्री नहीं है, तो खाली करें खरीदार.

आउटपुट:

  • score: इस विज्ञापन के स्कोर की वैल्यू दिखाने वाला फ़्लोट वैल्यू
  • status: एक पूर्णांक वैल्यू, जो:
    • 0: बेहतर तरीके से लागू करने के लिए
    • 1: अगर customAudienceSignals अमान्य है
    • 2: AdSelectionConfig के अमान्य होने पर
    • 3: यदि कोई भी अन्य सिग्नल अमान्य है
    • कोई भी गैर-शून्य मान की वजह से प्रक्रिया पूरी नहीं होती, मान यह तय करता है कि किस तरह का अपवाद ट्रिगर किया गया है

selectOutcome()

function selectOutcome(
  outcomes,
  selection_signals) {
    return {'status': 0, 'result': null};
}

इनपुट पैरामीटर:

  • outcomes: JSON ऑब्जेक्ट {"id": id_string, "bid": bid_double}
  • selection_signals: नीलामी के कॉन्फ़िगरेशन में बताए गए JSON ऑब्जेक्ट ऑब्जेक्ट

आउटपुट:

  • status: सफलता के लिए 0, विफलता के लिए शून्य नहीं
  • result: कोई एक नतीजा पास किया गया या नहीं बताया गया

reportResult()

function reportResult(ad_selection_config, render_url, bid, contextual_signals) {
   return {
      'status': status,
      'results': {'signals_for_buyer': signals_for_buyer, 'reporting_url': reporting_url }
   };
}

इनपुट पैरामीटर:

  • ad_selection_config: scoreAds का दस्तावेज़ देखें
  • render_url: जीतने वाले विज्ञापन का रेंडर यूआरएल
  • bid: जीतने वाले विज्ञापन के लिए ऑफ़र की गई बिड
  • contextual_signals: generateBid का दस्तावेज़ देखें

आउटपुट:

  • सफलता के लिए status: 0 और असफल होने के लिए शून्य नहीं
  • results: JSON ऑब्जेक्ट में:
    • signals_for_buyer: एक JSON ऑब्जेक्ट, जिसे reportWin को पास किया जाता है फ़ंक्शन
    • reporting_url: ऐसा यूआरएल जिसका इस्तेमाल प्लैटफ़ॉर्म, खरीदार को इंप्रेशन

reportWin()

function reportWin(
   ad_selection_signals,
   per_buyer_signals,
   signals_for_buyer,
   contextual_signals,
   custom_audience_signals) {
   return {'status': 0, 'results': {'reporting_url': reporting_url } };
}

इनपुट पैरामीटर:

  • ad_selection_signals, per_buyer_signals: इसके लिए दस्तावेज़ देखें scoreAd
  • signals_for_buyer: reportResult से मिला JSON ऑब्जेक्ट
  • contextual_signals, custom_audience_signals: इसके लिए दस्तावेज़ देखें generateBid

आउटपुट:

  • सफलता के लिए status: 0 और असफल होने के लिए शून्य नहीं
  • results: एक JSON ऑब्जेक्ट जिसमें यह शामिल है:
    • reporting_url: ऐसा यूआरएल जिसका इस्तेमाल प्लैटफ़ॉर्म, विक्रेता पर इंप्रेशन

registerAdBeacon()

function registerAdBeacon(
  interaction_key,
  reporting_uri
)

इनपुट पैरामीटर:

  • interaction_key: इवेंट को दिखाने वाली स्ट्रिंग. इसका इस्तेमाल यह करता है: बाद में जब वे इवेंट इंटरैक्शन की रिपोर्ट करते हैं. reporting_uri जिसे सूचित किया जाना चाहिए. इस कुंजी का मिलान होना चाहिए खरीदार या विक्रेता रजिस्टर कर रहा है और विक्रेता क्या रिपोर्ट कर रहा है.
  • reporting_uri: इवेंट की रिपोर्ट पाने के लिए यूआरआई. यह इन पर आधारित होना चाहिए रिपोर्ट किया जा रहा इवेंट टाइप. किसी भी इवेंट के साथ रिपोर्ट किया गया डेटा होता है.

विज्ञापन चुनाव पहले से बने यूआरआई

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

पहले से बने यूआरआई को इस फ़ॉर्मैट का इस्तेमाल करके बनाया जाता है:

ad-selection-prebuilt:<use-case>/<name>?<required-script-generation-parameters>

प्राइवसी सैंडबॉक्स प्लैटफ़ॉर्म, यहां दी गई जानकारी का इस्तेमाल करके JavaScript उपलब्ध कराता है रनटाइम में यूआरआई.

IllegalArgumentException को फेंका जाता है, अगर:

  • कोई भी ज़रूरी पैरामीटर, यूआरआई में मौजूद नहीं है
  • यूआरआई में ऐसे पैरामीटर हैं जिनकी पहचान नहीं की जा सकी

पहले से बने यूआरआई के इस्तेमाल के उदाहरण और नाम

इस्तेमाल का पहला उदाहरण: विज्ञापन चुनना

ad-selection के इस्तेमाल के उदाहरण के तहत, पहले से बने यूआरआई का इस्तेमाल selectAds(AdSelectionConfig) फ़्लो.

पहले से बने यूआरआई का नाम: highest-bid-wins

यह पहले से बने यूआरआई एक JavaScript उपलब्ध कराता है, जो सबसे ऊंची बोली वाले विज्ञापन को चुनता है बोली लगाने के बाद. यह रिपोर्ट करने के लिए बुनियादी रिपोर्टिंग फ़ंक्शन भी उपलब्ध कराता है विजेता हैं render_uri और bid.

ज़रूरी पैरामीटर

reportingUrl: वह बेस रिपोर्टिंग यूआरएल जिसे जीतने वाले विज्ञापन के render_uri और bid:

<reportingUrl>?render_uri=<renderUriOfWinnigAd>&bid=<bidOfWinningAd>

इस्तेमाल किए जाने से जुड़ी जानकारी

अगर आपका बेस रिपोर्टिंग यूआरएल https://www.ssp.com/reporting है, तो पहले से बनाया गया यूआरआई:

`ad-selection-prebuilt://ad-selection/highest-bid-wins/?reportingUrl=https://www.ssp.com/reporting`

इस्तेमाल का दूसरा उदाहरण: ad-selection-from-outcomes

ad-selection-from-outcomes के इस्तेमाल के उदाहरण के तहत, पहले से बने यूआरआई selectAds(AdSelectionFromOutcomesConfig) वर्कफ़्लो.

पहले से बने यूआरआई का नाम: waterfall-mediation-truncation

पहले से बने waterfall-mediation-truncation यूआरआई से JavaScript मिलती है जो इस नीति की मदद से, वॉटरफ़ॉल मीडिएशन ट्रंकेशन लॉजिक लागू किया जाता है, जहां JavaScript पहले पक्ष का विज्ञापन, अगर bid, bid floor से ज़्यादा या उसके बराबर है और ऐसा नहीं होने पर null दिखता है.

ज़रूरी पैरामीटर

bidFloor: getSelectionSignals() में पास की गई बिड की कम से कम वैल्यू की कुंजी इसकी तुलना मीडिएशन SDK टूल के विज्ञापन से की जाती है.

इस्तेमाल किए जाने से जुड़ी जानकारी

अगर आपके विज्ञापन चुनने के सिग्नल {"bid_floor": 10} जैसे दिखते हैं, तो नतीजे के तौर पर पहले से बनाया गया यूआरआई यह होगा:

`ad-selection-prebuilt://ad-selection-from-outcomes/waterfall-mediation-truncation/?bidFloor=bid_floor`

टेस्ट करना

Protected Audience API का इस्तेमाल शुरू करने में आपकी मदद करने के लिए, हमने एक सैंपल Kotlin और Java में मौजूद ऐप्लिकेशन. इन्हें GitHub पर देखा जा सकता है.

ज़रूरी शर्तें

Protected Audience API को विज्ञापन चुनने के दौरान, कुछ JavaScript की ज़रूरत होती है और इंप्रेशन रिपोर्टिंग. इसमें JavaScript को उपलब्ध कराने के दो तरीके हैं. टेस्टिंग एनवायरमेंट:

  • ज़रूरी एचटीटीपीएस एंडपॉइंट वाला सर्वर चलाएं, जो JavaScript को रिटर्न करता हो
  • किसी स्थानीय सोर्स से ज़रूरी कोड देकर, रिमोट फ़ेच करने की सुविधा को बदलें

इनमें से किसी भी तरीके को अपनाने के लिए, इंप्रेशन को मैनेज करने के लिए एचटीटीपीएस एंडपॉइंट सेट अप करना ज़रूरी है रिपोर्टिंग.

एचटीटीपीएस एंडपॉइंट

विज्ञापन चुनने और इंप्रेशन की रिपोर्टिंग की जांच करने के लिए, आपको सात एचटीटीपीएस सेट अप करने होंगे ऐसे एंडपॉइंट जिन्हें आपका टेस्ट डिवाइस या एम्युलेटर ऐक्सेस कर सकता है:

  1. खरीदार का एंडपॉइंट, जो बिडिंग लॉजिक JavaScript का इस्तेमाल करता है.
  2. एक एंडपॉइंट जो बिडिंग के सिग्नल दिखाता है.
  3. सेलर एंडपॉइंट जो डिसिज़न लॉजिक JavaScript दिखाता है.
  4. यह एक ऐसा एंडपॉइंट होता है जो स्कोरिंग सिग्नल दिखाता है.
  5. सफल खरीदार इंप्रेशन रिपोर्टिंग एंडपॉइंट.
  6. सेलर इंप्रेशन रिपोर्टिंग एंडपॉइंट.
  7. कस्टम ऑडियंस को रोज़ अपडेट देने के लिए एंडपॉइंट.

सुविधा के लिए, GitHub रेपो जांच के लिए बेसिक JavaScript कोड उपलब्ध कराता है के मकसद से बनाया गया है. इसमें OpenAPI सेवा की परिभाषाएं भी शामिल हैं, जिन्हें इन पर डिप्लॉय किया जा सकता है जो मॉक या माइक्रोसर्विस प्लैटफ़ॉर्म के साथ काम करता हो. ज़्यादा जानकारी के लिए, प्रोजेक्ट देखें रीडमी.

JavaScript की रिमोट फ़ेच करने की सेटिंग बदलें

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

अपने ऐप्लिकेशन के लिए डीबग मोड को चालू करने के लिए, नीचे दी गई लाइन को ऐप्लिकेशन एट्रिब्यूट की वैल्यू को सबमिट करें:

<application
  android:debuggable="true">

इन बदलावों को इस्तेमाल करने के तरीके के उदाहरण के लिए, कृपया सुरक्षित GitHub पर Audience API का सैंपल ऐप्लिकेशन.

विज्ञापन चुनने के रूटीन मैनेज करने के लिए, आपको अपना कस्टम JavaScript जोड़ना होगा जैसे कि बिडिंग, स्कोरिंग के फ़ैसले, और रिपोर्टिंग. Google Analytics 4 पर जाकर बेसिक JavaScript कोड ऐसे उदाहरण जो GitHub के रेपो में सभी ज़रूरी अनुरोधों को मैनेज करते हैं. Protected Audience API का सैंपल ऐप्लिकेशन, इससे कोड को पढ़ने का तरीका बताता है उस फ़ाइल को कॉपी कर सकता है और उसे ओवरराइड के तौर पर इस्तेमाल करने के लिए तैयार कर सकता है.

सेल-साइड और बाय-साइड JavaScript फ़ेचिंग को बदला जा सकता है अलग से, हालांकि कोई भी JavaScript चलाने के लिए आपको एचटीटीपीएस एंडपॉइंट की ज़रूरत पड़ती है आप इन चीज़ों के लिए बदलाव नहीं कर रहे हैं. ज़्यादा जानकारी के लिए, कृपया README देखें इन मामलों को हैंडल करने वाले सर्वर को सेट अप करने के तरीके के बारे में जानकारी.

सिर्फ़ उन कस्टम ऑडियंस के लिए JavaScript फ़ेच करने की सेटिंग को बदला जा सकता है जो आपके पैकेज का मालिकाना हक होता है.

सेल-साइड JavaScript को बदलना

सेल-साइड JavaScript में बदलाव को सेट अप करने के लिए, नीचे बताए गए तरीके का इस्तेमाल करें निम्न कोड उदाहरण में:

  1. AdSelectionManager ऑब्जेक्ट शुरू करें.
  2. यहां से TestAdSelectionManager के लिए रेफ़रंस पाएं AdSelectionManager ऑब्जेक्ट.
  3. कोई AdSelectionConfig ऑब्जेक्ट बनाएं.
  4. किसी AddAdSelectionOverrideRequest को AdSelectionConfig ऑब्जेक्ट और String JavaScript दिखा रहा है का इस्तेमाल कैसे करना है.
  5. एसिंक्रोनस overrideAdSelectionConfigRemoteInfo() तरीके को इस तरीके से कॉल करें: AddAdSelectionOverrideRequest ऑब्जेक्ट और काम का Executor और OutcomeReceiver ऑब्जेक्ट.

Kotlin

val testAdSelectionManager: TestAdSelectionManager =
  context.getSystemService(AdSelectionManager::class.java).getTestAdSelectionManager()

// Initialize AdSelectionConfig =
val adSelectionConfig = new AdSelectionConfig.Builder()
    .setSeller(seller)
    .setDecisionLogicUrl(decisionLogicUrl)
    .setCustomAudienceBuyers(customAudienceBuyers)
    .setAdSelectionSignals(adSelectionSignals)
    .setSellerSignals(sellerSignals)
    .setPerBuyerSignals(perBuyerSignals)
    .build()

// Initialize AddAddSelectionOverrideRequest
val request = AddAdSelectionOverrideRequest.Builder()
    .setAdSelectionConfig(adSelectionConfig)
    .setDecisionLogicJs(decisionLogicJS)
    .build()

// Run the call to override the JavaScript for the given AdSelectionConfig
// Note that this only takes effect in apps marked as debuggable
testAdSelectionManager.overrideAdSelectionConfigRemoteInfo(
    request,
    executor,
    outComeReceiver)

Java

TestAdSelectionManager testAdSelectionManager =
  context.getSystemService(AdSelectionManager.class).getTestAdSelectionManager();

// Initialize AdSelectionConfig =
AdSelectionConfig adSelectionConfig = new AdSelectionConfig.Builder()
    .setSeller(seller)
    .setDecisionLogicUrl(decisionLogicUrl)
    .setCustomAudienceBuyers(customAudienceBuyers)
    .setAdSelectionSignals(adSelectionSignals)
    .setSellerSignals(sellerSignals)
    .setPerBuyerSignals(perBuyerSignals)
    .build();

// Initialize AddAddSelectionOverrideRequest
AddAdSelectionOverrideRequest request = AddAdSelectionOverrideRequest.Builder()
    .setAdSelectionConfig(adSelectionConfig)
    .setDecisionLogicJs(decisionLogicJS)
    .build();

// Run the call to override the JavaScript for the given AdSelectionConfig
// Note that this only takes effect in apps marked as debuggable
testAdSelectionManager.overrideAdSelectionConfigRemoteInfo(
    request,
    executor,
    outComeReceiver);

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

विज्ञापन चुनने के दौरान इस्तेमाल किए गए JavaScript को बदलने के लिए, decisionLogicJs में सेलर साइड के फ़ंक्शन सिग्नेचर सही होने चाहिए. JavaScript फ़ाइल को स्ट्रिंग के रूप में पढ़ने के तरीके का उदाहरण देखने के लिए, कृपया GitHub पर Protected Audience API का सैंपल ऐप्लिकेशन.

एसिंक्रोनस overrideAdSelectionConfigRemoteInfo() तरीका एपीआई कॉल के नतीजे को सिग्नल देने के लिए OutcomeReceiver ऑब्जेक्ट.

onResult() कॉलबैक से पता चलता है कि बदलाव सही तरीके से लागू हुआ है. selectAds() को आने वाले समय में किए जाने वाले कॉल के लिए, यह किया जाएगा कि Google आपके चुने हुए विकल्प के मुताबिक है या नहीं. दिया गया होगा, जिसे आपने ओवरराइड के रूप में पास किया है.

onError() कॉलबैक, दो संभावित शर्तों को दिखाता है:

  • अगर अमान्य आर्ग्युमेंट को बदलने की कोशिश की जाती है, तो AdServiceException, IllegalArgumentException को वजह.
  • अगर किसी ऐसे ऐप्लिकेशन में बदलाव करने की कोशिश की जाती है जो डीबग मोड में नहीं चल रहा हो डेवलपर के लिए सेटिंग और टूल चालू हैं, तो AdServiceException से पता चलता है कि वजह के तौर पर IllegalStateException.

सेल-साइड ओवरराइड रीसेट करें

इस सेक्शन में यह माना गया है कि आपने सेल-साइड JavaScript को बदल दिया है और आपके पास TestAdSelectionManager का रेफ़रंस है और पिछले सेक्शन में इस्तेमाल किया गया AdSelectionConfig.

सभी AdSelectionConfigs के लिए, बदलावों को रीसेट करने के लिए:

  1. एसिंक्रोनस resetAllAdSelectionConfigRemoteOverrides() तरीके को कॉल करें संबंधित OutcomeReceiver ऑब्जेक्ट के साथ.

Kotlin

// Resets overrides for all AdSelectionConfigs
testAadSelectionManager.resetAllAdSelectionConfigRemoteOverrides(
  outComeReceiver)

Java

// Resets overrides for all AdSelectionConfigs
testAdSelectionManager.resetAllAdSelectionConfigRemoteOverrides(
    outComeReceiver);

सेल-साइड ओवरराइड रीसेट करने के बाद, selectAds() को किए गए कॉल किसी भी विकल्प का इस्तेमाल करते हैं decisionLogicUrl को AdSelectionConfig में सेव किया जाता है, ताकि ज़रूरी JavaScript फ़ेच करें.

अगर resetAllAdSelectionConfigRemoteOverrides() को कॉल नहीं किया जाता, तो OutComeReceiver.onError() कॉलबैक से AdServiceException मिलता है. अगर किसी ऐसे ऐप्लिकेशन के ज़रिए बदलावों को हटाने की कोशिश की जाती है जो डीबग मोड में नहीं चल रहा है डेवलपर के लिए सेटिंग और टूल चालू होने पर, AdServiceException से पता चलता है कि वजह के तौर पर IllegalStateException.

बाय-साइड JavaScript को बदलना

  1. कस्टम ऑडियंस में शामिल होने के लिए बताया गया तरीका अपनाएं
  2. खरीदार के साथ AddCustomAudienceOverrideRequest बनाएं और उन कस्टम ऑडियंस का नाम जिसे आपको बदलना है. इसके अलावा, बिडिंग का लॉजिक और ऐसा डेटा जिसे आपको ओवरराइड के तौर पर इस्तेमाल करना है
  3. एसिंक्रोनस overrideCustomAudienceRemoteInfo() तरीके को इस तरीके से कॉल करें: AddCustomAudienceOverrideRequest ऑब्जेक्ट और काम का है Executor और OutcomeReceiver ऑब्जेक्ट

Kotlin

val testCustomAudienceManager: TestCustomAudienceManager =
  context.getSystemService(CustomAudienceManager::class.java).getTestCustomAudienceManager()

// Join custom audience

// Build the AddCustomAudienceOverrideRequest
val request = AddCustomAudienceOverrideRequest.Builder()
    .setBuyer(buyer)
    .setName(name)
    .setBiddingLogicJs(biddingLogicJS)
    .setTrustedBiddingSignals(trustedBiddingSignals)
    .build()

// Run the call to override JavaScript for the given custom audience
testCustomAudienceManager.overrideCustomAudienceRemoteInfo(
    request,
    executor,
    outComeReceiver)

Java

TestCustomAudienceManager testCustomAudienceManager =
  context.getSystemService(CustomAudienceManager.class).getTestCustomAudienceManager();

// Join custom audience

// Build the AddCustomAudienceOverrideRequest
AddCustomAudienceOverrideRequest request =
    AddCustomAudienceOverrideRequest.Builder()
        .setBuyer(buyer)
        .setName(name)
        .setBiddingLogicJs(biddingLogicJS)
        .setTrustedBiddingSignals(trustedBiddingSignals)
        .build();

// Run the call to override JavaScript for the given custom audience
testCustomAudienceManager.overrideCustomAudienceRemoteInfo(
    request,
    executor,
    outComeReceiver);

खरीदार और नाम के लिए वही मान हैं जिनका इस्तेमाल एसेट बनाने के लिए किया जाता है का भी इस्तेमाल कर सकते हैं. इन फ़ील्ड के बारे में ज़्यादा जानें.

इसके अलावा, दो अतिरिक्त पैरामीटर भी तय किए जा सकते हैं:

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

एसिंक्रोनस overrideCustomAudienceRemoteInfo() तरीका OutcomeReceiver ऑब्जेक्ट, एपीआई कॉल के नतीजे को सिग्नल देने के लिए है.

onResult() कॉलबैक से पता चलता है कि बदलाव सही तरीके से लागू हुआ है. selectAds() को किए जाने वाले कॉल में, बिडिंग और रिपोर्टिंग के लॉजिक का इस्तेमाल किया जाता है आपने उसे ओवरराइड के रूप में पास कर लिया है.

onError() कॉलबैक, दो संभावित शर्तों को दिखाता है.

  • अगर अमान्य आर्ग्युमेंट को बदलने की कोशिश की जाती है, तो AdServiceException, IllegalArgumentException को वजह.
  • अगर किसी ऐसे ऐप्लिकेशन में बदलाव करने की कोशिश की जाती है जो डीबग मोड में नहीं चल रहा हो डेवलपर के लिए सेटिंग और टूल चालू हैं, तो AdServiceException से पता चलता है कि वजह के तौर पर IllegalStateException.

बाय-साइड के बदलावों को रीसेट करें

इस सेक्शन में यह माना जाता है कि आपने बाय-साइड JavaScript को बदल दिया है और आपके पास इसमें इस्तेमाल किए गए TestCustomAudienceManager का रेफ़रंस है पिछला सेक्शन देखें.

सभी कस्टम ऑडियंस के लिए, सेटिंग में बदलाव करने का तरीका:

  1. एसिंक्रोनस resetAllCustomAudienceOverrides() तरीके को इसके साथ कॉल करें काम के Executor और OutcomeReceiver ऑब्जेक्ट.

Kotlin

// Resets overrides for all custom audiences
testCustomAudienceManager.resetCustomAudienceRemoteInfoOverride(
    executor,
    outComeReceiver)

Java

// Resets overrides for all custom audiences
testCustomAudienceManager.resetCustomAudienceRemoteInfoOverride(
    executor,
    outComeReceiver)

बाय-साइड ओवरराइड को रीसेट करने के बाद, selectAds() पर किए जाने वाले कॉल इनमें से किसी भी biddingLogicUrl और trustedBiddingData का इस्तेमाल करें ज़रूरी फ़ेच करने के लिए, CustomAudience में सेव किया गया JavaScript.

अगर resetCustomAudienceRemoteInfoOverride() को कॉल नहीं किया जाता, तो OutComeReceiver.onError() कॉलबैक से AdServiceException मिलता है. अगर किसी ऐसे ऐप्लिकेशन के ज़रिए बदलावों को हटाने की कोशिश की जाती है जो डीबग मोड में नहीं चल रहा है अगर डेवलपर के लिए सेटिंग और टूल चालू हैं, तो AdServiceException से पता चलता है कि वजह के तौर पर IllegalStateException.

रिपोर्टिंग सर्वर सेट अप करें

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

OpenAPI की परिभाषाएं खोजते समय, Reporting-server.json देखें. इस फ़ाइल में एक सिंपल एंडपॉइंट है, जो 200 दिखाता है. यह एचटीटीपी को दिखाता है रिस्पॉन्स कोड डालें. इस एंडपॉइंट का इस्तेमाल selectAds() के दौरान किया जाता है. इससे यह पता चलता है कि Protected Audience API, जिससे इंप्रेशन की रिपोर्टिंग पूरी हुई.

जांच करने के लिए उपलब्ध सुविधाएं

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

सीमाएं

नीचे दी गई टेबल में, Protected Audience API की प्रोसेसिंग की सीमाओं के बारे में बताया गया है. ये सीमाएं, सुझाव/राय या शिकायत के आधार पर बदल सकती हैं. इसके लिए जिन सुविधाओं पर काम जारी है, प्रॉडक्ट की जानकारी पढ़ें.

कॉम्पोनेंट सीमा की जानकारी सीमा की वैल्यू
कस्टम ऑडियंस (कनाडा) हर कनाडा में ज़्यादा से ज़्यादा विज्ञापनों की संख्या 100
हर आवेदन के लिए सीए की ज़्यादा से ज़्यादा संख्या 1000
सीए (सर्टिफ़िकेट देने वाली संस्था) बनाने वाले ऐप्लिकेशन की ज़्यादा से ज़्यादा संख्या 1000
CA बनाए जाने के समय से लेकर उसके चालू होने में लगने वाली ज़्यादा से ज़्यादा देरी 60 दिन
ऐक्टिवेशन के समय से लेकर, सीए (सर्टिफ़िकेट देने वाली संस्था) की समयसीमा खत्म होने की ज़्यादा से ज़्यादा अवधि 60 दिन
डिवाइस पर सीए की ज़्यादा से ज़्यादा संख्या 4000
सीए के नाम का ज़्यादा से ज़्यादा साइज़ 200 बाइट
हर दिन फ़ेच किए जाने वाले यूआरआई का ज़्यादा से ज़्यादा साइज़ 400 बाइट
बिडिंग लॉजिक यूआरआई का ज़्यादा से ज़्यादा साइज़ 400 बाइट
भरोसेमंद बिडिंग डेटा का ज़्यादा से ज़्यादा साइज़ 10 केबी
उपयोगकर्ता के बिडिंग सिग्नल का ज़्यादा से ज़्यादा साइज़ 10 केबी
leaveCustomAudience हर खरीदार के लिए ज़्यादा से ज़्यादा कॉल दर 1 प्रति सेकंड
joinCustomAudience हर खरीदार के लिए ज़्यादा से ज़्यादा कॉल दर 1 प्रति सेकंड
CA बैकग्राउंड फ़ेच कनेक्‍शन समयबाह्य 5 सेकंड
एचटीटीपी पढ़ने का टाइम आउट 30 सेकंड
डाउनलोड किए जाने वाले वीडियो का ज़्यादा से ज़्यादा साइज़ 10 केबी
फ़ेच करने के लिए, ज़्यादा से ज़्यादा अवधि 5 मिनट
हर नौकरी में ज़्यादा से ज़्यादा सीए (सर्टिफ़िकेट देने वाली संस्था) को अपडेट किया जा सकता है 1000
विज्ञापन चुनना खरीदारों की ज़्यादा से ज़्यादा संख्या अभी तय नहीं है
हर खरीदार के लिए ज़्यादा से ज़्यादा सीए सर्टिफ़िकेट अभी तय नहीं है
नीलामी में विज्ञापनों की ज़्यादा से ज़्यादा संख्या अभी तय नहीं है
शुरुआती कनेक्शन का टाइम आउट 5 सेकंड
कनेक्शन रीड टाइम आउट 5 सेकंड
पूरे AdSelection में लागू होने वाला ज़्यादा से ज़्यादा समय 10 सेकंड
AdSelection में हर सीए की बिडिंग प्रोसेस करने का ज़्यादा से ज़्यादा समय 5 सेकंड
AdSelection में स्कोर करने का ज़्यादा से ज़्यादा समय 5 सेकंड
AdSelection में हर खरीदार के हिसाब से लागू करने का ज़्यादा से ज़्यादा समय अभी तय नहीं है
विज्ञापन चुनने/सेलर/हर खरीदार के सिग्नल का ज़्यादा से ज़्यादा साइज़ अभी तय नहीं है
सेलर/खरीदार स्क्रिप्ट का ज़्यादा से ज़्यादा साइज़ अभी तय नहीं है
selectAds के लिए कॉल करने की ज़्यादा से ज़्यादा दर 1 क्यूपीएस
इंप्रेशन की रिपोर्टिंग परसिस्टेंस से विज्ञापन चुनने का कम से कम समय 24 घंटे
चुने गए स्टोरेज की ज़्यादा से ज़्यादा संख्या अभी तय नहीं है
रिपोर्टिंग के आउटपुट यूआरएल का ज़्यादा से ज़्यादा साइज़ अभी तय नहीं है
इंप्रेशन रिपोर्टिंग के लिए ज़्यादा से ज़्यादा समय अभी तय नहीं है
सूचना कॉल के लिए इतनी बार कोशिश की जा सकती है अभी तय नहीं है
कनेक्शन टाइम आउट हो गया 5 सेकंड
reportImpression को लागू करने का ज़्यादा से ज़्यादा समय 2 सेकंड
reportImpressions के लिए कॉल करने की ज़्यादा से ज़्यादा दर 1 क्यूपीएस
इवेंट की रिपोर्टिंग हर नीलामी में हर खरीदार के लिए बीकन की ज़्यादा से ज़्यादा संख्या 10

हर नीलामी में हर सेलर के लिए बीकन की ज़्यादा से ज़्यादा संख्या

10

इवेंट कुंजी का ज़्यादा से ज़्यादा साइज़

40 बाइट

इवेंट डेटा का ज़्यादा से ज़्यादा साइज़

64 केबी

विज्ञापन विज्ञापन सूची का अधिकतम आकार सभी ने 10 केबी शेयर किया AdData एक सीए में दस्तावेज़ों को
यूआरएल इनपुट के तौर पर ली गई किसी भी यूआरएल स्ट्रिंग की ज़्यादा से ज़्यादा लंबाई अभी तय नहीं है
JavaScript लागू होने का ज़्यादा से ज़्यादा समय इंप्रेशन रिपोर्टिंग के लिए बोली-प्रक्रिया और स्कोरिंग के लिए 1 सेकंड
ज़्यादा से ज़्यादा इस्तेमाल की गई मेमोरी 10 MB

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

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