সুরক্ষিত অ্যাপ সিগন্যাল বিকাশকারীর নির্দেশিকা

ডেভেলপারদের সুরক্ষিত অ্যাপ সিগন্যাল এপিআই নিয়ে পরীক্ষা-নিরীক্ষা শুরু করতে সাহায্য করার জন্য, এই নথিটি API পৃষ্ঠের মধ্যে থাকা সমস্ত API বর্ণনা করে, কীভাবে একটি পরীক্ষার পরিবেশ সেট আপ করতে হয় তার বিশদ বিবরণ দেয় এবং কনফিগারেশন এবং স্ক্রিপ্টের উদাহরণ প্রদান করে।

সংস্করণ ইতিহাস

জানুয়ারী 2024

PAS MVP রিলিজ সমর্থনকারী বিকাশকারীর গাইডের প্রথম প্রকাশ

মার্চ 2024

অ্যান্ড্রয়েড এপিআই-এর M-2024-05 রিলিজ এবং সার্ভার সাইড কম্পোনেন্টের এপ্রিল 2024 রিলিজ সমর্থন করার জন্য API-এ পরিবর্তন। সবচেয়ে উল্লেখযোগ্য পরিবর্তন:

  • অন-ডিভাইস API-এর জন্য প্রয়োজনীয় অনুমতিগুলি সম্পর্কে বিশদ যোগ করা হয়েছে
  • অন-ডিভাইস সিগন্যাল কোটা ব্যবস্থাপনা সম্পর্কে বিশদ যোগ করা হয়েছে
  • প্রাসঙ্গিক বিজ্ঞাপন পুনরুদ্ধার এবং প্রস্থান সমর্থনের সাথে সম্পর্কিত পরিবর্তনগুলির সাথে generateBid স্বাক্ষর আপডেট করা হয়েছে
  • আপডেট reportWin ডকুমেন্টেশন সহ প্রস্থান সমর্থন
  • BYOS বিজ্ঞাপন পুনরুদ্ধার এবং বিজ্ঞাপন পুনরুদ্ধার UDF নথিভুক্ত করার জন্য সমর্থন অপসারণ বিজ্ঞাপন পুনরুদ্ধার API ডকুমেন্টেশন আপডেট করুন

API ওভারভিউ

সুরক্ষিত সংকেত API পৃষ্ঠ বিভিন্ন সিস্টেমে API এর বিভিন্ন উপসেট অন্তর্ভুক্ত করে:

  • Android APIs:
    • সিগন্যাল কিউরেশন API, গঠিত:
    • সিগন্যাল এপিআই আপডেট করুন
    • সংকেত এনকোডিং API
    • সুরক্ষিত নিলাম সমর্থন API: সুরক্ষিত অ্যাপ সিগন্যাল ব্যবহার করে বিডিং এবং নিলাম (B&A) সার্ভারগুলিতে সুরক্ষিত নিলাম চালানোর জন্য SDK দ্বারা ব্যবহার করা হবে৷
  • সার্ভার-সাইড APIs:
    • সুরক্ষিত নিলাম API: বিডিং এবং নিলাম সার্ভারে চলমান JS স্ক্রিপ্টগুলির একটি সিরিজ। এই API বিক্রেতা এবং ক্রেতাদের সুরক্ষিত নিলাম বাস্তবায়নের যুক্তি লিখতে সক্ষম করে।
    • বিজ্ঞাপন পুনরুদ্ধার API: ক্রেতার বিডিং সার্ভারে উপলব্ধ প্রাসঙ্গিক এবং ব্যবহারকারীর তথ্য দেওয়া প্রার্থীর বিজ্ঞাপনগুলির একটি তালিকা প্রদানের জন্য দায়ী৷

অ্যান্ড্রয়েড ক্লায়েন্ট

ক্লায়েন্টের দিকে, সুরক্ষিত অ্যাপ সিগন্যাল পৃষ্ঠ তিনটি ভিন্ন API নিয়ে গঠিত:

  • সিগন্যাল আপডেট করুন: ডিভাইসে সিগন্যালের কিউরেশন সক্ষম করতে একটি Android সিস্টেম API।
  • সিগন্যাল এনকোডিং: নিলামের সময় সার্ভারে পাঠানোর জন্য সংকেত প্রস্তুত করার জন্য একটি জাভাস্ক্রিপ্ট API।
  • সুরক্ষিত নিলাম সমর্থন: বিডিং এবং নিলাম সার্ভারগুলিতে একটি সুরক্ষিত নিলাম সম্পাদনে সমর্থন করার জন্য একটি API। এই APIটি সুরক্ষিত অ্যাপ সংকেতগুলির জন্য নির্দিষ্ট নয় এবং এটি সুরক্ষিত দর্শক API-এর জন্য নিলাম সমর্থন করতেও ব্যবহৃত হয়।

সিগন্যাল এপিআই আপডেট করুন

আপডেট সিগন্যাল API ক্রেতার পক্ষে ব্যবহারকারী এবং অ্যাপ সম্পর্কিত সংকেত নিবন্ধন করার ক্ষমতা সহ বিজ্ঞাপন প্রযুক্তি সরবরাহ করে। এপিআই একটি প্রতিনিধি মডেলে কাজ করে। কলার একটি ইউআরআই প্রদান করে যেখান থেকে ফ্রেমওয়ার্ক সংশ্লিষ্ট সংকেতগুলি এবং নিলামে ব্যবহার করার জন্য সেই সংকেতগুলিকে এনকোড করার যুক্তি আনয়ন করে৷

API-এর জন্য android.permission.ACCESS_ADSERVICES_PROTECTED_SIGNALS অনুমতি প্রয়োজন।

updateSignals() API URI থেকে একটি JSON অবজেক্ট পুনরুদ্ধার করবে যা বর্ণনা করে যে কোন সিগন্যালগুলি যোগ করতে হবে বা সরাতে হবে এবং কীভাবে সেই সিগন্যালগুলিকে নিলামের জন্য প্রস্তুত করতে হবে৷

Executor executor = Executors.newCachedThreadPool();
ProtectedSignalsManager protectedSignalsManager
     =  ProtectedSignalsManager.get(context);

// Initialize a UpdateSignalsRequest
UpdateSignalsRequest updateSignalsRequest = new
  UpdateSignalsRequest.Builder(Uri.parse("https://example-adtech1.com/signals"))
      .build();

OutcomeReceiver<Object, Exception> outcomeReceiver = new OutcomeReceiver<Object, Exception>() {
  @Override
  public void onResult(Object o) {
    //Post-success actions
  }

  @Override
  public void onError(Exception error) {
    //Post-failure actions
  };

// Call updateSignals
protectedSignalsManager.updateSignals(updateSignalsRequest,
    executor,
    outcomeReceiver);

প্ল্যাটফর্মটি সংকেত আপডেট আনার অনুরোধে প্রদত্ত URI-তে একটি https অনুরোধ করে। সংকেত আপডেটের সাথে সাথে, প্রতিক্রিয়াতে একটি শেষ পয়েন্ট অন্তর্ভুক্ত থাকতে পারে যা কাঁচা সংকেতগুলিকে এনকোডেড পেলোডে রূপান্তর করার জন্য এনকোডিং লজিক হোস্ট করে। সিগন্যাল আপডেটগুলি JSON আকারে হবে বলে আশা করা হচ্ছে এবং এতে নিম্নলিখিত কী থাকতে পারে:

JSON অবজেক্টের জন্য শীর্ষ স্তরের কীগুলি অবশ্যই পাঁচটি কমান্ডের একটির সাথে সঙ্গতিপূর্ণ হতে হবে:

চাবি

বর্ণনা

put

একই কী দিয়ে বিদ্যমান যেকোনো সিগন্যাল ওভাররাইট করে একটি নতুন সংকেত যোগ করে। মূল্য

এটির জন্য এটি একটি JSON অবজেক্ট যেখানে কীগুলি স্থাপন করা কীটির সাথে সম্পর্কিত বেস 64 স্ট্রিং এবং মানগুলি রাখা মানের সাথে সম্পর্কিত বেস 64 স্ট্রিং।

append

একটি নতুন সংকেত/সংকেত সংকেতগুলির একটি টাইম সিরিজে যুক্ত করে, সবচেয়ে পুরনোটিকে সরিয়ে দেয়

সিরিজের আকার প্রদত্ত সর্বাধিকের চেয়ে বেশি হলে নতুনগুলির জন্য জায়গা তৈরি করার সংকেত। এটির মান হল একটি JSON অবজেক্ট যেখানে কীগুলি হল বেস 64টি স্ট্রিং যা সংযুক্ত করার জন্য কী-এর সাথে সম্পর্কিত এবং মানগুলি হল দুটি ক্ষেত্র সহ অবজেক্ট: "মান" এবং "ম্যাক্স সিগন্যাল"।

"মান": টাইম সিরিজের সাথে যুক্ত করার জন্য সিগন্যাল মানগুলির সাথে সম্পর্কিত বেস 64 স্ট্রিংগুলির একটি তালিকা৷

"maxSignals": এই সময়ের সিরিজে অনুমোদিত সর্বাধিক সংখ্যক মান। যদি

কী-এর সাথে যুক্ত সংকেতের বর্তমান সংখ্যা সর্বাধিক সিগন্যালকে ছাড়িয়ে গেছে, সবচেয়ে পুরানো সংকেতগুলি সরানো হবে। মনে রাখবেন আপনি পুট দ্বারা যোগ করা একটি কী যুক্ত করতে পারেন। মনে রাখবেন যে সর্বাধিক সংখ্যার চেয়ে বেশি মানের যোগ করা ব্যর্থতার কারণ হবে।

put_if_not_present

একই কী দিয়ে কোনো বিদ্যমান সংকেত না থাকলেই শুধুমাত্র একটি নতুন সংকেত যোগ করে। এটির জন্য মান হল একটি JSON অবজেক্ট যেখানে কীগুলি হল বেস 64 স্ট্রিং যা রাখা কী-এর সাথে সম্পর্কিত এবং মানগুলি হল বেস 64 স্ট্রিং যা রাখার মানের সাথে সম্পর্কিত৷

remove

একটি চাবির জন্য সংকেত সরিয়ে দেয়। এর মান হল বেস 64 স্ট্রিংগুলির একটি তালিকা যা সংকেতগুলির কীগুলির সাথে সম্পর্কিত যা মুছে ফেলা উচিত।

update_encoder

এন্ডপয়েন্ট আপডেট করার জন্য একটি অ্যাকশন প্রদান করে এবং একটি URI ব্যবহার করা যেতে পারে

একটি এনকোডিং যুক্তি পুনরুদ্ধার করতে। একটি আপডেট অ্যাকশন প্রদানের উপ-কী হল "অ্যাকশন" এবং

বর্তমানে সমর্থিত মানগুলি শুধুমাত্র "রেজিস্টার" যা প্রথমবার প্রদান করা হলে এনকোডার এন্ডপয়েন্ট নিবন্ধন করবে অথবা নতুন প্রদত্ত এন্ডপয়েন্টের সাথে বিদ্যমানটিকে ওভাররাইট করবে। "রেজিস্টার" অ্যাকশনের জন্য এন্ডপয়েন্ট প্রদান করা প্রয়োজন। একটি এনকোডার এন্ডপয়েন্ট প্রদানের জন্য সাব-কি হল "এন্ডপয়েন্ট" এবং মান হল URI

শেষ পয়েন্টের জন্য স্ট্রিং।

একটি নমুনা JSON অনুরোধ নিম্নলিখিত মত দেখাবে:

{
    "put": {
        "AAAAAQ==": "AAAAZQ==",
        "AAAAAg==": "AAAAZg=="
    },
    "append": {
        "AAAAAw==": {
            "values": [
                "AAAAZw=="
            ],
            "max_signals": 3
        }
    },
    "put_if_not_present": {
        "AAAABA==": "AAAAaQ==",
        "AAAABQ==": "AAAAag=="
    },
    "update_encoder": {
        "action": "REGISTER",
        "endpoint": "https://adtech1.com/Protected App Signals_encode_script.js"
    }
}

10-15Kb ক্রমে সিগন্যালের একটি অন ডিভাইস কোটা থাকবে৷ একবার কোটা অতিক্রম করলে PPAPI একটি FIFO কৌশল ব্যবহার করে সংকেত উচ্ছেদ করবে। উচ্ছেদ প্রক্রিয়াটি উচ্ছেদের ফ্রিকোয়েন্সি কমানোর জন্য অল্প সময়ের ব্যবধানে কোটা সামান্য অতিক্রম করার অনুমতি দেবে।

সংকেত এনকোডিং API

সুরক্ষিত নিলামের সময় সার্ভারে পাঠানোর জন্য ডিভাইসে সংরক্ষিত সংকেতগুলিকে এনকোড করতে ব্যবহার করার জন্য ক্রেতাদের একটি জাভা স্ক্রিপ্ট ফাংশন সরবরাহ করতে হবে। ক্রেতারা URL যোগ করে এই স্ক্রিপ্টটি প্রদান করতে পারে যেখানে এটি একটি UpdateSignal API অনুরোধের যেকোনো প্রতিক্রিয়ায় "update_encoder" কী ব্যবহার করে আনা যেতে পারে। স্ক্রিপ্টে নিম্নলিখিত স্বাক্ষর থাকবে:

function encodeSignals(signals, maxSize) {
  let result = new Uint8Array(maxSize);
  // first entry will contain the total size
  let size = 1;
  let keys = 0;
  
  for (const [key, values] of signals.entries()) {
    keys++;
    // In this encoding we only care about the first byte
    console.log("key " + keys + " is " + key)
    result[size++] = key[0];
    result[size++] = values.length;
    for(const value of values) {
      result[size++] = value.signal_value[0];
    }
  }
  result[0] = keys;
  
  return { 'status': 0, 'results': result.subarray(0, size)};
}

signals পরামিতি হল একটি মানচিত্র যা UInt8Array আকারে 4 আকারের কী থেকে সুরক্ষিত অ্যাপ সিগন্যাল অবজেক্টের তালিকায়। প্রতিটি সুরক্ষিত অ্যাপ সিগন্যাল অবজেক্টের তিনটি ক্ষেত্র রয়েছে:

  • signal_value : একটি UInt8Array যা সিগন্যালের মান উপস্থাপন করে।
  • creation_time : একটি সংখ্যা যা ইপোক-সেকেন্ডে সংকেত তৈরির সময়কে প্রতিনিধিত্ব করে।
  • package_name : একটি স্ট্রিং যে প্যাকেজটির নাম উপস্থাপন করে যা সংকেত তৈরি করেছে।

maxSize প্যারামিটার হল একটি সংখ্যা যা আউটপুটের জন্য সবচেয়ে বড় অনুমোদিত অ্যারের আকার বর্ণনা করে।

ফাংশন দুটি ক্ষেত্র সহ একটি বস্তু আউটপুট করা উচিত:

  • status : স্ক্রিপ্ট সফলভাবে চালানো হলে 0 হওয়া উচিত।
  • results : সর্বাধিক সাইজের থেকে কম বা সমান দৈর্ঘ্যের UInt8Array হওয়া উচিত। এই অ্যারেটি নিলামের সময় সার্ভারে পাঠানো হবে, এবং প্রস্তুত prepareDataForAdRetrieval স্ক্রিপ্ট দ্বারা প্রস্তুত করা হবে।

এনকোডিং বিজ্ঞাপন প্রযুক্তিকে বৈশিষ্ট্য প্রকৌশলের প্রাথমিক পর্যায়ে প্রদান করে, যেখানে তারা তাদের নিজস্ব কাস্টম যুক্তির উপর ভিত্তি করে কাঁচা সংকেতগুলিকে সংকুচিত সংস্করণে সংকুচিত করার মতো রূপান্তর সম্পাদন করতে পারে। মনে রাখবেন যে ট্রাস্টেড এক্সিকিউশন এনভায়রনমেন্টস (TEE) এ চলমান একটি সুরক্ষিত নিলামের সময়, অ্যাড টেক কাস্টম লজিক এনকোডিং দ্বারা জেনারেট হওয়া সিগন্যাল পেলোডগুলিতে পড়ার অ্যাক্সেস থাকবে৷ ক্রেতার B&A TEE-তে চলমান ব্যবহারকারীর সংজ্ঞায়িত ফাংশন (UDF) নামে পরিচিত কাস্টম লজিক বিজ্ঞাপন নির্বাচন (বিজ্ঞাপন পুনরুদ্ধার এবং বিডিং) সম্পাদনের জন্য প্রকাশক অ্যাপ দ্বারা প্রদত্ত এনকোড করা সংকেত এবং অন্যান্য প্রাসঙ্গিক সংকেতগুলিতে পড়ার অ্যাক্সেস পাবে।

সংকেত এনকোডিং

প্রতি ঘন্টায়, যে ক্রেতারা তাদের নিবন্ধিত সংকেতগুলির সাথে এনকোডিং যুক্তি প্রদান করেছে তাদের সংকেতগুলি একটি নিলাম পেলোডে এনকোড করা হবে৷ নিলামের পেলোডের জন্য বাইট অ্যারে ডিভাইসে টিকে থাকে এবং এনক্রিপ্ট করা হয় এবং বিজ্ঞাপনের অংশ হিসাবে বিক্রেতাদের দ্বারা সংগ্রহ করা হবে৷ একটি সুরক্ষিত নিলামের অংশ হিসাবে নির্বাচনের ডেটা অন্তর্ভুক্ত করতে হবে। পরীক্ষার জন্য, আপনি নিম্নলিখিত কমান্ডটি চালানোর মাধ্যমে এই এনকোডিংটিকে ঘন্টায় ক্যাডেন্সের বাইরে ট্রিগার করতে পারেন:

adb shell cmd jobscheduler run -f com.google.android.adservices.api 29
এনকোডার লজিক সংস্করণ

অ্যাড টেক কাস্টম এনকোডার লজিক ডাউনলোড করার জন্য অনুরোধ করা হলে, অ্যাড টেক এন্ডপয়েন্ট রেসপন্স হেডারে একটি ভার্সন নম্বর দিয়ে সাড়া দিতে পারে। ডিভাইসে এনকোডার লজিকের সাথে এই সংস্করণটি টিকে আছে। যখন কাঁচা সংকেত এনকোড করা হয়, তখন এনকোডিং এর জন্য ব্যবহৃত সংস্করণের সাথে এনকোড করা পেলোড টিকে থাকে। এই সংস্করণটি একটি সুরক্ষিত নিলামের সময় B&A সার্ভারে পাঠানো হয়, যাতে বিজ্ঞাপন প্রযুক্তিগুলি সংস্করণের উপর ভিত্তি করে তাদের বিডিং এবং এনকোডিং লজিক সারিবদ্ধ করতে পারে।

Response header for providing encoder version : X_ENCODER_VERSION

সুরক্ষিত নিলাম সমর্থন API

ডিভাইসের দিকে, সুরক্ষিত অ্যাপ সিগন্যালের জন্য একটি নিলাম চালানো সুরক্ষিত দর্শকদের জন্য একটি নিলাম চালানোর সমান

বিডিং এবং নিলাম পরিষেবা

সার্ভার সাইড এপিআই অন্তর্ভুক্ত:

  • সুরক্ষিত নিলাম API: JS ফাংশন বা UDF-এর একটি সিরিজ যা ক্রেতা এবং বিক্রেতারা বিডিং এবং নিলামের যুক্তি নির্ধারণ করতে তাদের মালিকানাধীন B&A উপাদানগুলিতে স্থাপন করতে পারে।
  • বিজ্ঞাপন পুনরুদ্ধার API: ক্রেতারা একটি REST এন্ডপয়েন্ট প্রয়োগ করে এই API প্রয়োগ করতে পারে যা সুরক্ষিত অ্যাপ সিগন্যাল নিলামের জন্য প্রার্থী বিজ্ঞাপনের একটি সেট প্রদানের জন্য দায়ী।

সুরক্ষিত নিলাম API

Protected Auction API-এ JS API বা UDFs রয়েছে যা ক্রেতা ও বিক্রেতারা তাদের নিলাম এবং বিডিং যুক্তি বাস্তবায়ন করতে ব্যবহার করতে পারে।

ক্রেতা বিজ্ঞাপন প্রযুক্তি UDFs
AdRetrieval UDF এর জন্য ডেটা প্রস্তুত করুন

TEE বিজ্ঞাপন পুনরুদ্ধার পরিষেবা থেকে বিজ্ঞাপন প্রার্থীদের আনার জন্য সুরক্ষিত অ্যাপ সিগন্যাল ব্যবহার করার আগে, ক্রেতাদের অবশ্যই সুরক্ষিত অ্যাপ সিগন্যাল এবং অন্যান্য বিক্রেতা-প্রদত্ত ডেটা ডিকোড এবং প্রস্তুত করতে হবে। ক্রেতারা prepareDataForAdRetrieval ডেটার জন্য বিজ্ঞাপন পুনরুদ্ধার করার জন্য UDF আউটপুট বিজ্ঞাপন পুনরুদ্ধার পরিষেবাতে প্রেরণ করা হয় বিডিংয়ের জন্য শীর্ষ k প্রার্থীর বিজ্ঞাপনগুলি পুনরুদ্ধার করতে

// Inputs
// ------
// encodedOnDeviceSignals: A Uint8Array of bytes from the device.
// encodedOnDeviceSignalsVersion: An integer representing the encoded
//   version of the signals.
// sellerAuctionSignals: Information about auction (ad format, size) derived
//                       contextually.
// contextualSignals: Additional contextual signals that could help in
//                    generating bids.
//
// Outputs
// -------
// Returns a JSON structure to be used for retrieval.
// The structure of this object is left to the adtech.
function prepareDataForAdRetrieval(encodedOnDeviceSignals,encodedOnDeviceSignalsVersion,sellerAuctionSignals,contextualSignals) {
   return {};
}
বিড ইউডিএফ তৈরি করুন

শীর্ষ k প্রার্থীর বিজ্ঞাপনগুলি ফেরত দেওয়ার পরে, বিজ্ঞাপন প্রার্থীদের ক্রেতার কাস্টম বিডিং যুক্তিতে পাস করা হয়, বিড ইউডিএফ generateBid :

// Inputs
// ------
// ads: Data string returned by the ads retrieval service. This can include Protected App Signals
//   ads and related ads metadata.
// sellerAuctionSignals: Information about the auction (ad format, size),
//                       derived contextually
// buyerSignals: Any additional contextual information provided by the buyer
// preprocessedDataForRetrieval: This is the output of this UDF.
function generateBid(ads, sellerAuctionSignals, buyerSignals,
                    preprocessedDataForRetrieval,
                    rawSignals, rawSignalsVersion) {
    return { "ad": <ad Value Object>,
             "bid": <float>,
             "render": <render URL string>,
             'adCost': <optional float ad cost>,
             "egressPayload": <limitedEgressPayload>,
             "temporaryUnlimitedEgressPayload": <temporaryUnlimitedEgressPayload>
    };
}

এই ফাংশনের আউটপুট হল একটি বিজ্ঞাপন প্রার্থীর জন্য একটি একক বিড, যা ProtectedAppSignalsAdWithBidMetadata এর সমতুল্য JSON হিসাবে উপস্থাপিত হয়। ফাংশনটি দুটি অ্যারেও ফিরিয়ে দিতে পারে যা মডেল প্রশিক্ষণ সক্ষম করতে reportWin পাস করা হবে (এগ্রেস এবং মডেল প্রশিক্ষণ সম্পর্কে আরও বিশদ বিবরণের জন্য PAS ব্যাখ্যাকারীর রিপোর্টিং বিভাগে পড়ুন)

রিপোর্টউইন ইউডিএফ

যখন একটি নিলাম শেষ হয়, নিলাম পরিষেবা ক্রেতাদের জন্য রিপোর্টিং ইউআরএল তৈরি করবে এবং reportWin ইউডিএফ ব্যবহার করে বীকন নিবন্ধন করবে (এটি একই reportWin ফাংশন যা সুরক্ষিত দর্শকদের জন্য ব্যবহৃত হয়) । ক্লায়েন্ট দ্বারা বিজ্ঞাপনটি রেন্ডার করা হলে এটি ডিভাইস দ্বারা পিং করা হবে। এই পদ্ধতির স্বাক্ষর দুটি অতিরিক্ত প্যারামিটার egressPayload এবং temporaryUnlimitedEgressPayload ব্যতীত সুরক্ষিত শ্রোতা সংস্করণের মতোই যা মডেল প্রশিক্ষণ সক্ষম করতে ব্যবহৃত হয় এবং generateBid ফলাফলগুলি দ্বারা পরিপূর্ণ হয়।

// Inputs / Outputs
// ----------------
// See detailed documentation here.
function reportWin(auctionSignals, perBuyerSignals, signalsForWinner,
                   buyerReportingSignals,
                   egressPayload, temporaryUnlimitedEgressPayload) {
  // ...
}
বিক্রেতা বিজ্ঞাপন প্রযুক্তি UDFs
স্কোরএড ইউডিএফ

ক্রেতাদের কাছ থেকে প্রাপ্ত বিজ্ঞাপনগুলির মধ্যে কোনটি নিলামে জিতবে তা নির্বাচন করতে বিক্রেতারা এই UDF ব্যবহার করে।

function scoreAd(adMetadata, bid, auctionConfig,
                 trustedScoringSignals, bid_metadata) {
  // ...
  return {desirability: desirabilityScoreForThisAd,
              allowComponentAuction: true_or_false};
}
রিপোর্ট ফলাফল UDF

এই UDF বিক্রেতাকে (অবশেষে) বিজয়ী বিজ্ঞাপন সম্পর্কিত তথ্য সহ ইভেন্ট লেভেল রিপোর্টিং করতে দেয়।

function reportResult(auctionConfig, reporting_metadata) {
  // ...
  registerAdBeacon({"click", clickUrl,"view", viewUrl});
  sendReportTo(reportResultUrl);
  return signalsForWinner;
}

বিজ্ঞাপন পুনরুদ্ধার API

MVP প্রকাশে, বিজ্ঞাপন পুনরুদ্ধার পরিষেবাটি হবে ক্রেতা-পরিচালিত এবং হোস্ট করা পরিষেবা এবং বিডিং পরিষেবা এই পরিষেবা থেকে বিজ্ঞাপন প্রার্থীদের পুনরুদ্ধার করে৷ এপ্রিল 2024 থেকে শুরু করে, বিজ্ঞাপন পুনরুদ্ধার সার্ভারটি অবশ্যই একটি বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্টে (TEE) চলবে এবং একটি GRPC/প্রোটো ইন্টারফেস প্রকাশ করবে। বিজ্ঞাপন প্রযুক্তি কোম্পানিগুলিকে অবশ্যই এই সার্ভারটি সেট আপ করতে হবে এবং B&A স্ট্যাক স্থাপনার অংশ হিসাবে এটির URL প্রদান করতে হবে৷ TEE তে চলমান এই পরিষেবাটির একটি বাস্তবায়ন গোপনীয়তা স্যান্ডবক্স গিটহাবে পাওয়া যায় এবং বাকি ডকুমেন্টেশনে আমরা ধরে নিচ্ছি যে এটিই স্থাপনার ক্ষেত্রে ব্যবহৃত কোড।

এপ্রিল 2024 থেকে শুরু করে, B&A সংস্করণগুলি প্রাসঙ্গিক পথ বিজ্ঞাপন পুনরুদ্ধার সমর্থন করে। এই ক্ষেত্রে বিডিং সার্ভার নিলামের প্রাসঙ্গিক অংশের সময় RTB সার্ভারের পাঠানো বিজ্ঞাপন-শনাক্তকারীদের একটি তালিকা পাবে। শনাক্তকারীদের একটি TEE KV সার্ভারে পাঠানো হবে বিডিং পর্বের সময় ব্যবহার করার জন্য বিজ্ঞাপন সম্পর্কিত সমস্ত তথ্য আনার জন্য (উদাহরণস্বরূপ বিজ্ঞাপন-রেন্ডার-ইউআরএল, মেটাডেটা এবং বিজ্ঞাপন এম্বেডিংগুলি টপ-কে নির্বাচনে ব্যবহার করা হবে)। এই দ্বিতীয় পথটি স্থাপন করার জন্য কোনো সুনির্দিষ্ট যুক্তির প্রয়োজন নেই তাই আমরা এখানে নথিভুক্ত করব শুধুমাত্র কীভাবে TEE ভিত্তিক বিজ্ঞাপন পুনরুদ্ধার ব্যবহারের ক্ষেত্রে কনফিগার করতে হয়।

হ্যান্ডেল রিকোয়েস্ট ইউডিএফ
function HandleRequest(requestMetadata, preparedDataForAdRetrieval,
                      deviceMetadata, contextualSignals) {
    return adsMetadataString;
}

কোথায়:

  • requestMetadata : JSON. UDF-তে সার্ভার মেটাডেটা-প্রতি অনুরোধ। আপাতত খালি।
  • preparedDataForAdRetrieval : এই ক্ষেত্রের বিষয়বস্তু বিজ্ঞাপন পুনরুদ্ধার কৌশলের উপর নির্ভর করে। প্রাসঙ্গিক বিজ্ঞাপন পুনরুদ্ধারের ক্ষেত্রে, এই প্যারামিটারে ডিভাইস থেকে উদ্ভূত কাঁচা সংকেত থাকবে এবং বিডিং পরিষেবা থেকে পাস করা হবে। বিজ্ঞাপন পুনরুদ্ধার সার্ভার ব্যবহার করে TEE বিজ্ঞাপন পুনরুদ্ধারের ক্ষেত্রে, এই প্যারামিটারটি prepareDataForAdRetrieval ইউডিএফ-এর ফলাফল ধারণ করবে। দ্রষ্টব্য: এই পর্যায়ে সুরক্ষিত অ্যাপ সিগন্যালগুলি ডিকোড করা হবে এবং এনক্রিপ্ট করা হবে না৷
  • deviceMetadata : বিক্রেতার বিজ্ঞাপন পরিষেবা দ্বারা ফরওয়ার্ড করা ডিভাইস মেটাডেটা ধারণকারী JSON অবজেক্ট। আরও বিস্তারিত জানার জন্য B&A ডকুমেন্টেশন দেখুন।
    • X-Accept-Language : ডিভাইসে ব্যবহৃত ভাষা।
    • X-User-Agent : ডিভাইসে ব্যবহৃত ব্যবহারকারী এজেন্ট।
    • X-BnA-Client-IP : ডিভাইসের আইপি ঠিকানা।
  • contextualSignals : একই DSP দ্বারা পরিচালিত প্রাসঙ্গিক বিডিং সার্ভার থেকে নির্বিচারে স্ট্রিং উৎপন্ন হয়েছে। UDF স্ট্রিংটি ডিকোড করতে এবং এটি ব্যবহার করতে সক্ষম হবে বলে আশা করা হচ্ছে। প্রাসঙ্গিক সংকেতগুলিতে সুরক্ষিত অ্যাপ সিগন্যাল ব্যবহার করে পাস করা সুরক্ষিত এমবেডিংয়ের জন্য এমএল মডেল সংস্করণ তথ্যের মতো যেকোনো তথ্য থাকতে পারে।

UDF সাফল্যের উপর একটি স্ট্রিং ফেরত দেওয়া উচিত. স্ট্রিংটি বিডিং সার্ভারে ফেরত দেওয়া হয় যা তারপর এটি generateBid ইউডিএফ-এ পাস করে। যদিও স্ট্রিংটি কেবল একটি সাধারণ স্ট্রিং হতে পারে, সম্ভবত স্ট্রিংটি একটি সিরিয়ালাইজড অবজেক্ট হওয়া উচিত যার স্কিমা প্রতিটি বিজ্ঞাপন প্রযুক্তি তাদের নিজস্ব দ্বারা সংজ্ঞায়িত করে। যতক্ষণ না বিজ্ঞাপন প্রযুক্তির generateBid লজিক স্ট্রিংটিকে চিনতে এবং ব্যবহার করতে পারে ততক্ষণ স্কিমার উপর কোন বাধা নেই।

উন্নয়নের জন্য আপনার সিস্টেম সেট আপ করুন

অ্যান্ড্রয়েড

আপনার অ্যান্ড্রয়েড উন্নয়ন পরিবেশ সেটআপ করতে আপনাকে নিম্নলিখিতগুলি করতে হবে:

  1. একটি এমুলেটর (পছন্দের) বা শারীরিক ডিভাইস তৈরি করুন যা বিকাশকারী পূর্বরূপ 10 চিত্রটি চালাচ্ছে
  2. নিম্নলিখিত চালান:
adb shell am start -n com.google.android.adservices.api/com.android.adservices.ui.settings.activities.AdServicesSettingsMainActivity

তারপর অ্যাপ-সাজেস্ট করা বিজ্ঞাপনে সম্মতি দেওয়ার জন্য দেখানো বিকল্পটি বেছে নিন।

  1. প্রাসঙ্গিক API গুলি সক্ষম করতে নিম্নলিখিত কমান্ডটি চালান। অক্ষম এর ডিফল্ট কনফিগারেশন পর্যায়ক্রমে সিঙ্ক করা হবে বলে আপনাকে মাঝে মাঝে এটি পুনরায় চালানোর প্রয়োজন হতে পারে।
adb shell device_config put adservices fledge_custom_audience_service_kill_switch false;  adb shell device_config put adservices fledge_select_ads_kill_switch false; adb shell device_config put adservices fledge_on_device_auction_kill_switch false; adb shell device_config put adservices fledge_auction_server_kill_switch false; adb shell "device_config put adservices disable_fledge_enrollment_check true";  adb shell device_config put adservices ppapi_app_allow_list '\*'; adb shell device_config put adservices fledge_auction_server_overall_timeout_ms 60000;
  1. ডিভাইসটি পুনরায় চালু করুন।
  2. আপনার নিলাম কী সার্ভারে নির্দেশ করতে ডিভাইসের নিলাম কীগুলিকে ওভাররাইড করুন৷ ক্যাশে করা থেকে ভুল কীগুলি প্রতিরোধ করার জন্য একটি নিলাম চালানোর চেষ্টা করার আগে এই পদক্ষেপটি চালানো গুরুত্বপূর্ণ৷

বিডিং ও নিলাম পরিষেবা

B&A সার্ভার সেট আপ করতে, সেলফ-সার্ভ সেটআপ ডকুমেন্টেশন পড়ুন।

এই দস্তাবেজটি ক্রেতার নির্দিষ্ট সার্ভারগুলি কীভাবে কনফিগার করতে হয় তার উপর ফোকাস করবে, কারণ বিক্রেতাদের জন্য কোন পরিবর্তনের প্রয়োজন নেই।

পূর্বশর্ত

একটি B&A পরিষেবা স্ট্যাক স্থাপন করার আগে, ক্রেতা বিজ্ঞাপন প্রযুক্তির প্রয়োজন:

  • নিশ্চিত করুন যে তারা তাদের নিজস্ব TEE বিজ্ঞাপন পুনরুদ্ধার পরিষেবা স্থাপন করেছে ( প্রাসঙ্গিক বিভাগটি দেখুন)।
  • নিশ্চিত করুন যে বিজ্ঞাপন প্রযুক্তিতে সমস্ত প্রয়োজনীয় UDF ( prepareDataForAdRetrieval , generateBid , reportWin , HandleRequest ) সংজ্ঞায়িত এবং হোস্ট করা আছে৷

B&A-এর সাথে সুরক্ষিত দর্শকদের সাথে সুরক্ষিত নিলাম কীভাবে কাজ করে তার একটি বোঝাও সহায়ক হবে কিন্তু বাধ্যতামূলক নয়।

টেরাফর্ম কনফিগারেশন

সুরক্ষিত অ্যাপ সিগন্যাল ব্যবহার করতে, বিজ্ঞাপন প্রযুক্তিকে অবশ্যই:

  • B&A-তে সুরক্ষিত অ্যাপ সিগন্যাল সমর্থন সক্ষম করুন।
  • URL এন্ডপয়েন্ট প্রদান করুন যেখান থেকে prepareDataForAdRetrieval, generateBid এবং reportWin এর জন্য নতুন UDFগুলি আনা যেতে পারে৷

অতিরিক্তভাবে, এই নির্দেশিকাটি অনুমান করে যে বিজ্ঞাপন প্রযুক্তিগুলি পুনঃবিপণনের জন্য B&A ব্যবহার করতে চায় তারা যথারীতি পুনঃবিপণন নিলামের জন্য সমস্ত বিদ্যমান কনফিগারেশন ফ্ল্যাগ সেট করা চালিয়ে যাবে৷

ক্রেতা বিজ্ঞাপন প্রযুক্তি কনফিগারেশন

একটি উদাহরণ হিসাবে এই ডেমো ফাইল ব্যবহার করে, ক্রেতাদের নিম্নলিখিত পতাকা সেট করতে হবে:

  • সুরক্ষিত অ্যাপ সিগন্যাল সক্ষম করুন : সুরক্ষিত অ্যাপ সংকেত ডেটা সংগ্রহ করতে সক্ষম।
  • সুরক্ষিত অ্যাপ সিগন্যাল ইউআরএল : সুরক্ষিত অ্যাপ সিগন্যাল সার্ভারের ইউআরএলে সেট করুন।

বিজ্ঞাপন প্রযুক্তিগুলিকে অবশ্যই নিম্নলিখিত ক্ষেত্রগুলির জন্য স্থানধারকগুলিতে সঠিক URLগুলি প্রতিস্থাপন করতে হবে:

module "buyer" {
  # ... More config here.

  runtime_flags = {
    # ... More config here.

    ENABLE_PROTECTED_APP_SIGNALS                  = "true"
    PROTECTED_APP_SIGNALS_GENERATE_BID_TIMEOUT_MS = "60000"
    TEE_AD_RETRIEVAL_KV_SERVER_ADDR               = "<service mesh address of the instance>"
    AD_RETRIEVAL_TIMEOUT_MS                       = "60000"
    BUYER_CODE_FETCH_CONFIG                       = <<EOF
    {
        "protectedAppSignalsBiddingJsUrl": "<URL to Protected App Signals generateBid UDF>",
        "urlFetchTimeoutMs": 60001, # This has to be > 1 minute.
        "urlFetchPeriodMs": 13000000,
        "prepareDataForAdsRetrievalJsUrl": "<URL to the UDF>"
    }
    EOF

  }  # runtime_flags

}  # Module "buyer"

বিক্রেতা বিজ্ঞাপন প্রযুক্তি কনফিগারেশন

একটি উদাহরণ হিসাবে এই ডেমো ফাইল ব্যবহার করে, বিক্রেতাদের নিম্নলিখিত পতাকা সেট করতে হবে। (দ্রষ্টব্য: শুধুমাত্র সুরক্ষিত অ্যাপ সিগন্যাল সম্পর্কিত কনফিগারেশন এখানে হাইলাইট করা হয়েছে)। বিজ্ঞাপন প্রযুক্তিগুলিকে নিশ্চিত করতে হবে যে তারা স্থানধারকগুলিতে সঠিক URLগুলি প্রতিস্থাপন করে:

module "seller" {
  # ... More config here.

  runtime_flags = {
    # ... More config here.

    ENABLE_PROTECTED_APP_SIGNALS                  = "true"

    SELLER_CODE_FETCH_CONFIG                           = <<EOF
  {
    "urlFetchTimeoutMs": 60001, # This has to be > 1 minute.
    "urlFetchPeriodMs": 13000000,
    "protectedAppSignalsBuyerReportWinJsUrls": {"<Buyer Domain>": "URL to reportWin UDF"}
  }
  EOF

  }  # runtime_flags

}  # Module "seller"

কেভি এবং বিজ্ঞাপন পুনরুদ্ধার পরিষেবা

বিজ্ঞাপন পুনরুদ্ধার সমর্থন করার জন্য নির্বাচিত কৌশলগুলির উপর নির্ভর করে, সিস্টেমের জন্য KV পরিষেবার এক বা দুটি দৃষ্টান্ত স্থাপনের প্রয়োজন হবে। আমরা Ad Retrieval Server হিসাবে TEE ভিত্তিক বিজ্ঞাপন পুনরুদ্ধারের জন্য ব্যবহৃত KV দৃষ্টান্ত উল্লেখ করব এবং KV Lookup Server হিসাবে প্রাসঙ্গিক পথ ভিত্তিক পুনরুদ্ধারকে সমর্থন করার উদাহরণে উল্লেখ করব।

উভয় ক্ষেত্রেই সার্ভার স্থাপনা KV সার্ভার GitHub- এ উপলব্ধ ডকুমেন্টেশন অনুসরণ করে, দুটি ক্ষেত্রের মধ্যে পার্থক্য হল যে লুকআপ কেস কোনো অতিরিক্ত কনফিগারেশন ছাড়াই বাক্সের বাইরে কাজ করে যখন পুনরুদ্ধারের জন্য HandleRequest ইউডিএফ প্রয়োগের প্রয়োজন হয় পুনরুদ্ধার যুক্তি. আরও বিস্তারিত জানার জন্য KV সার্ভার অনবোর্ডিং গাইড দেখুন। উল্লেখ্য যে B&A উভয় পরিষেবাই বিডিং পরিষেবার মতো একই পরিষেবা জালে স্থাপন করা হবে বলে আশা করে৷

উদাহরণ সেটআপ

নিম্নলিখিত পরিস্থিতি বিবেচনা করুন: সুরক্ষিত অ্যাপ সিগন্যাল API ব্যবহার করে, একটি বিজ্ঞাপন প্রযুক্তি ব্যবহারকারীর অ্যাপ ব্যবহারের উপর ভিত্তি করে প্রাসঙ্গিক সংকেত সঞ্চয় করে। আমাদের উদাহরণে, সংকেত সংরক্ষণ করা হয় যা বিভিন্ন অ্যাপ থেকে অ্যাপ-মধ্যস্থ কেনাকাটার প্রতিনিধিত্ব করে। একটি নিলামের সময়, এনক্রিপ্ট করা সংকেতগুলি সংগ্রহ করা হয় এবং B&A-তে চলমান একটি সুরক্ষিত নিলামে প্রেরণ করা হয়। B&A-তে চলমান ক্রেতার UDF বিজ্ঞাপন প্রার্থীদের আনতে এবং একটি বিড গণনা করতে সংকেত ব্যবহার করে।

[ক্রেতা] সংকেত উদাহরণ

0 এর কী এবং 1 এর মান সহ একটি সংকেত যোগ করে।

{
  "put": {
    "AA==": "AQ=="
  },
  "update_encoder": {
    "action": "REGISTER",
    "endpoint": "https://example.com/example_script"
  }
}

1 এর কী এবং 2 এর মান সহ একটি সংকেত যোগ করে।

{
  "put": {
    "AQ==": "Ag=="
  },
  "update_encoder": {
    "action": "REGISTER",
    "endpoint": "https://example.com/example_script"
  }
}

[ক্রেতা] encodeSignals উদাহরণ

প্রতিটি সিগন্যালকে দুটি বাইটে এনকোড করে, প্রথম বাইটটি সিগন্যাল কী এর প্রথম বাইট এবং দ্বিতীয় বাইটটি সংকেত মানের প্রথম বাইট।

function encodeSignals(signals, maxSize) {
  // if there are no signals don't write a payload
  if (signals.size === 0) {
      return {};
  }

  let result = new Uint8Array(signals.size * 2);
  let index = 0;
  
  for (const [key, values] of signals.entries()) {
    result[index++] = key[0];
    result[index++] = values[0].signal_value[0];
  }
  
  return { 'status': 0, 'results': result};
}

[ক্রেতা] DataForAdRetrieval উদাহরণ

/**
 * `encodedOnDeviceSignals` is a Uint8Array and would contain
 * the app signals emanating from device. For purpose of the
 * demo, in our sample example, we assume that device is sending
 * the signals with pair of bytes formatted as following:
 * "<id><In app spending>". Where id corresponds to an ad category
 * that user uses on device, and the in app spending is a measure
 * of how much money the user has spent in this app category
 * previously. In our example, id of 0 will correspond to a
 * fitness ad category and a non-zero id will correspond to
 * food app category -- though this info will be useful
 * later in the B&A pipeline.
 *
 * Returns a JSON object indicating what type of ad(s) may be
 * most relevant to the user. In a real setup ad techs might
 * want to decode the signals as part of this script.
 *
 * Note: This example script makes use of only encoded device signals
 * but adtech can take other signals into account as well to prepare
 * the data that will be useful down stream for ad retrieval and
 * bid generation. The max length of the app signals used in this
 * sample example is arbitrarily limited to 4 bytes.
 */
function prepareDataForAdRetrieval(encodedOnDeviceSignals,
                                   encodedOnDeviceSignalsVersion,
                                   sellerAuctionSignals,
                                   contextualSignals) {
  if (encodedOnDeviceSignals.length === 0 || encodedOnDeviceSignals.length > 4 ||
      encodedOnDeviceSignals.length % 2 !== 0) {
     throw "Expected encoded signals length to be an even number in (0, 4]";
  }

  var preparedDataForAdRetrieval = {};
  for (var i = 0; i < encodedOnDeviceSignals.length; i += 2) {
    preparedDataForAdRetrieval[encodedOnDeviceSignals[i]] = encodedOnDeviceSignals[i + 1];
  }
  return preparedDataForAdRetrieval;
}

[ক্রেতাদের] নমুনা বিজ্ঞাপন পুনরুদ্ধার UDF

আমাদের উদাহরণে, বিজ্ঞাপন পুনরুদ্ধার সার্ভার মেটাডেটা পাঠায় (যেমন এই উদাহরণে প্রতিটি বিজ্ঞাপনের জন্য আইডি কিন্তু প্রতিটির জন্য অন্যান্য ডেটা থাকতে পারে যা পরবর্তীতে বিড তৈরিতে সহায়ক হতে পারে) শীর্ষ k বিজ্ঞাপন প্রার্থীদের প্রত্যেকের জন্য।

function HandleRequest(requestMetadata, protectedSignals, deviceMetadata,
                      contextualSignals) {
 return "[{\"adId\":\"0\"},{\"adId\":\"1\"}]"

[ক্রেতাদের] বিড উদাহরণ তৈরি করুন

/**
 * This script receives the data returned by the ad retrieval service
 * in the `ads` argument. This argument is supposed to contain all
 * the Protected App Signals related ads and the metadata obtained from the retrieval
 * service.
 *
 * `preparedDataForAdRetrieval` argument contains the data returned
 * from the `prepareDataForAdRetrieval` UDF.
 *
 * This script is responsible for generating bids for the ads
 * collected from the retrieval service and ad techs can decide to
 * run a small inference model as part of this script in order to
 * decide the best bid given all the signals available to them.
 *
 * For the purpose of the demo, this sample script assumes
 * that ad retrieval service has sent us most relevant ads for the
 * user and this scripts decides on the ad render URL as well as
 * what value to bid for each ad based on the previously decoded
 * device signals. For simplicity sake, this script only considers
 * 2 types of app categories i.e. fitness and food.
 *
 * Note: Only one bid is returned among all the
 * input ad candidates.
 */
function generateBid(ads, sellerAuctionSignals, buyerSignals, preparedDataForAdRetrieval) {
  if (ads === null) {
    console.log("No ads obtained from the ad retrieval service")
    return {};
  }     
        
  const kFitnessAd = "0";
  const kFoodAd = "1";
  const kBuyerDomain = "https://buyer-domain.com";
        
  let resultingBid = 0;
  let resultingRender = kBuyerDomain + "/no-ad";
  for (let i = 0 ; i < ads.length; ++i) {
    let render = "";
    let bid = 0;
    switch (ads[i].adId) {
      case kFitnessAd:
        render = kBuyerDomain + "/get-fitness-app";
        bid = preparedDataForAdRetrieval[kFitnessAd];
        break;
      case kFoodAd:
        render = kBuyerDomain + "/get-fastfood-app";
        bid = preparedDataForAdRetrieval[kFoodAd];
        break;
      default:
        console.log("Unknown ad category");
        render = kBuyerDomain + "/no-ad";
        break;
    }
    console.log("Existing bid: " + resultingBid + ", incoming candidate bid: " + bid);
    if (bid > resultingBid) {
      resultingBid = bid;
      resultingRender = render;
    }
  }
  return {"render": resultingRender, "bid": resultingBid};
}

[ক্রেতাদের] রিপোর্টউইন উদাহরণ

reportWin ইউডিএফ ক্রেতাকে রিপোর্ট করে যে তারা নিলাম জিতেছে।

function reportWin(auctionSignals, perBuyerSignals, signalsForWinner,
                                       buyerReportingSignals, directFromSellerSignals,
                                       egressPayload,
                                       temporaryUnlimitedEgressPayload) {
  sendReportTo("https://buyer-controlled-domain.com/");
  registerAdBeacon({"clickEvent":"https://buyer-controlled-domain.com/clickEvent"});
  return;
}

[বিক্রেতা] কেভি সার্ভার সেটআপ

বিক্রেতাদের অবশ্যই একটি স্কোরিং সিগন্যাল কেভি সার্ভার সেট আপ করতে হবে যাতে বিজ্ঞাপন রেন্ডার ইউআরএল থেকে সংশ্লিষ্ট স্কোরিং সংকেতগুলির জন্য একটি ম্যাপিং উপলব্ধ থাকে, উদাহরণস্বরূপ: যদি https:/buyer-domain.com/get-fitness-app এবং https:/buyer-domain.com/get-fastfood-app ক্রেতাকে ফেরত দিতে হবে, https://key-value-server-endpoint.com?client_type=1&renderUrls=<render-url-returned-by-the-buyer> এ একটি GET ব্যবহার করে SFE দ্বারা জিজ্ঞাসা করা হলে বিক্রেতার নিম্নলিখিত উদাহরণ স্কোরিং সংকেত প্রতিক্রিয়া থাকতে পারে https://key-value-server-endpoint.com?client_type=1&renderUrls=<render-url-returned-by-the-buyer> :

{
   "renderUrls" : {
      "https:/buyer-domain.com/get-fitness-app" : [
         "1",
         "2"
      ],
      "https:/buyer-domain.com/get-fastfood-app" : [
         "3",
         "4"
      ]
   }
}

[বিক্রেতা] স্কোর বিজ্ঞাপনের উদাহরণ

/**
 * This module generates a random desirability score for the Protected App
 * Signals ad in this example. In a production deployment,
 * however, the sellers would want to use all the available signals to generate
 * a score for the ad.
 */
function getRandomInt(max) {
  return Math.floor(Math.random() * max);
}

function scoreAd(adMetadata, bid, auctionConfig,
                                   trustedScoringSignals, deviceSignals,
                                   directFromSellerSignals) {
  return {
    "desirability": getRandomInt(10000),
    "allowComponentAuction": false
  };
}

[বিক্রেতা] রিপোর্ট ফলাফল উদাহরণ

function reportResult(auctionConfig, sellerReportingSignals, directFromSellerSignals){
  let signalsForWinner = {};
    sendReportTo("https://seller-controlled-domain.com");
    registerAdBeacon({"clickEvent":
                    "https://seller-controlled-domain.com/clickEvent"});
    return signalsForWinner;
}

নমুনা অ্যাপ্লিকেশন

উপরে বর্ণিত হিসাবে একটি সহজ প্রবাহ ব্যবহার করে এমন একটি অ্যাপ তৈরি করতে কীভাবে API ব্যবহার করা যেতে পারে তার উদাহরণ হিসাবে, আমরা একটি সুরক্ষিত অ্যাপ সিগন্যাল নমুনা অ্যাপ তৈরি করেছি যা এই নমুনা সংগ্রহস্থলে পাওয়া যাবে।