এই ডকুমেন্টটি শেয়ার্ড স্টোরেজ এবং প্রাইভেট অ্যাগ্রিগেশন ব্যবহারের জন্য একটি দ্রুত নির্দেশিকা। আপনার উভয় API সম্পর্কে ধারণা থাকা প্রয়োজন কারণ শেয়ার্ড স্টোরেজ মান সংরক্ষণ করে এবং প্রাইভেট অ্যাগ্রিগেশন একত্রিতযোগ্য প্রতিবেদন তৈরি করে।
লক্ষ্য শ্রোতা: বিজ্ঞাপন প্রযুক্তিবিদ এবং পরিমাপ প্রদানকারী।
শেয়ার্ড স্টোরেজ API
ক্রস-সাইট ট্র্যাকিং প্রতিরোধ করার জন্য, ব্রাউজারগুলি স্থানীয় স্টোরেজ, কুকিজ ইত্যাদি সহ সকল ধরণের স্টোরেজ পার্টিশন করা শুরু করেছে। কিন্তু এমন কিছু ক্ষেত্রে ব্যবহারের প্রয়োজন হয় যেখানে পার্টিশনবিহীন স্টোরেজ প্রয়োজন। শেয়ার্ড স্টোরেজ API গোপনীয়তা-সংরক্ষণকারী পঠন অ্যাক্সেস সহ বিভিন্ন শীর্ষ-স্তরের সাইটগুলিতে সীমাহীন লেখার অ্যাক্সেস প্রদান করে।
শেয়ার্ড স্টোরেজ প্রসঙ্গের উৎসের ( sharedStorage এর কলার) মধ্যে সীমাবদ্ধ।
শেয়ার্ড স্টোরেজের প্রতিটি অরিজিনের জন্য ধারণক্ষমতার সীমা রয়েছে, প্রতিটি এন্ট্রি সর্বোচ্চ সংখ্যক অক্ষরের মধ্যে সীমাবদ্ধ। যদি সীমাটি পৌঁছে যায়, তাহলে আর কোনও ইনপুট সংরক্ষণ করা হবে না। শেয়ার্ড স্টোরেজ ব্যাখ্যাকারীতে ডেটা স্টোরেজ সীমা বর্ণিত আছে।
শেয়ার্ড স্টোরেজ চালু করা হচ্ছে
বিজ্ঞাপন প্রযুক্তিবিদরা জাভাস্ক্রিপ্ট অথবা একটি প্রতিক্রিয়া শিরোনাম ব্যবহার করে শেয়ার্ড স্টোরেজে লিখতে পারেন। শেয়ার্ড স্টোরেজ থেকে পড়া শুধুমাত্র একটি বিচ্ছিন্ন জাভাস্ক্রিপ্ট পরিবেশের মধ্যেই ঘটে যাকে ওয়ার্কলেট বলা হয়।
জাভাস্ক্রিপ্ট ব্যবহার করে বিজ্ঞাপন প্রযুক্তিবিদরা জাভাস্ক্রিপ্ট ওয়ার্কলেটের বাইরে মান সেট করা, সংযোজন করা এবং মুছে ফেলার মতো নির্দিষ্ট শেয়ার্ড স্টোরেজ ফাংশন সম্পাদন করতে পারেন। তবে, শেয়ার্ড স্টোরেজ পড়া এবং ব্যক্তিগত সমষ্টি সম্পাদন করার মতো ফাংশনগুলি একটি জাভাস্ক্রিপ্ট ওয়ার্কলেটের মাধ্যমে সম্পন্ন করতে হবে। জাভাস্ক্রিপ্ট ওয়ার্কলেটের বাইরে ব্যবহার করা যেতে পারে এমন পদ্ধতিগুলি প্রস্তাবিত API সারফেস - ওয়ার্কলেটের বাইরে পাওয়া যাবে।
কোনও অপারেশনের সময় ওয়ার্কলেটে ব্যবহৃত পদ্ধতিগুলি প্রস্তাবিত API সারফেস - ওয়ার্কলেটে পাওয়া যাবে।
প্রতিক্রিয়া শিরোনাম ব্যবহার করে
জাভাস্ক্রিপ্টের মতোই, শুধুমাত্র শেয়ার্ড স্টোরেজে মান সেট করা, সংযোজন করা এবং মুছে ফেলার মতো নির্দিষ্ট ফাংশনগুলি রেসপন্স হেডার ব্যবহার করে করা যেতে পারে। রেসপন্স হেডারে শেয়ার্ড স্টোরেজের সাথে কাজ করার জন্য, রিকোয়েস্ট হেডারে
Shared-Storage-Writable: ?1অন্তর্ভুক্ত করতে হবে।ক্লায়েন্টের কাছ থেকে একটি অনুরোধ শুরু করতে, আপনার নির্বাচিত পদ্ধতির উপর নির্ভর করে নিম্নলিখিত কোডটি চালান:
fetch()ব্যবহার করেfetch("https://a.example/path/for/updates", {sharedStorageWritable: true});একটি
iframeবাimgট্যাগ ব্যবহার করা<iframe src="https://a.example/path/for/updates" sharedstoragewritable></iframe>একটি
iframeবাimgট্যাগ সহ একটি IDL অ্যাট্রিবিউট ব্যবহার করাlet iframe = document.getElementById("my-iframe"); iframe.sharedStorageWritable = true; iframe.src = "https://a.example/path/for/updates";
আরও তথ্য শেয়ার্ড স্টোরেজ: রেসপন্স হেডারস -এ পাওয়া যাবে।
শেয়ার্ড স্টোরেজে লেখা
শেয়ার্ড স্টোরেজে লেখার জন্য, জাভাস্ক্রিপ্ট ওয়ার্কলেটের ভেতর থেকে অথবা বাইরে থেকে sharedStorage.set() কল করুন। যদি ওয়ার্কলেটের বাইরে থেকে কল করা হয়, তাহলে ডেটাটি সেই ব্রাউজিং প্রসঙ্গের উৎপত্তিস্থলে লেখা হয় যেখান থেকে কল করা হয়েছিল। যদি ওয়ার্কলেটের ভেতর থেকে কল করা হয়, তাহলে ডেটাটি সেই ব্রাউজিং প্রসঙ্গের উৎপত্তিস্থলে লেখা হয় যেখানে ওয়ার্কলেটটি লোড করা হয়েছিল। সেট করা কীগুলির মেয়াদ শেষ হওয়ার তারিখ শেষ আপডেট থেকে 30 দিন।
ignoreIfPresent ফিল্ডটি ঐচ্ছিক। যদি উপস্থিত থাকে এবং true তে সেট করা থাকে, তাহলে কীটি ইতিমধ্যেই বিদ্যমান থাকলে আপডেট করা হবে না। কীটি আপডেট না করা হলেও, কীটির মেয়াদ set() কল থেকে 30 দিন পর্যন্ত পুনর্নবীকরণ করা হবে।
যদি একই পৃষ্ঠা লোডের সময় একই কী দিয়ে একাধিকবার শেয়ার্ড স্টোরেজ অ্যাক্সেস করা হয়, তাহলে কীটির মান ওভাররাইট করা হবে। যদি কীটির পূর্ববর্তী মান বজায় রাখার প্রয়োজন হয় তবে sharedStorage.append() ব্যবহার করা ভালো।
জাভাস্ক্রিপ্ট ব্যবহার করা
ওয়ার্কলেটের বাইরে:
window.sharedStorage.set('myKey', 'myValue1', { ignoreIfPresent: true }); // Shared Storage: {'myKey': 'myValue1'} window.sharedStorage.set('myKey', 'myValue2', { ignoreIfPresent: true }); // Shared Storage: {'myKey': 'myValue1'} window.sharedStorage.set('myKey', 'myValue2', { ignoreIfPresent: false }); // Shared Storage: {'myKey': 'myValue2'}একইভাবে, ওয়ার্কলেটের ভিতরে:
sharedStorage.set('myKey', 'myValue1', { ignoreIfPresent: true });প্রতিক্রিয়া শিরোনাম ব্যবহার করে
আপনি রেসপন্স হেডার ব্যবহার করে শেয়ার্ড স্টোরেজেও লিখতে পারেন। এটি করার জন্য, রেসপন্স হেডারে নিম্নলিখিত কমান্ডগুলির সাথে
Shared-Storage-Writeব্যবহার করুন:Shared-Storage-Write : set;key="myKey";value="myValue";ignore_if_presentShared-Storage-Write : set;key="myKey";value="myValue";ignore_if_present=?0একাধিক আইটেম কমা দ্বারা পৃথক করা যেতে পারে এবং
set,append,delete, এবংclearএকত্রিত করতে পারে।Shared-Storage-Write : set;key="hello";value="world";ignore_if_present, set;key="good";value="bye"
একটি মান যোগ করা হচ্ছে
আপনি append পদ্ধতি ব্যবহার করে একটি বিদ্যমান কীতে একটি মান যোগ করতে পারেন। যদি কীটি বিদ্যমান না থাকে, তাহলে append() কল করার মাধ্যমে কী তৈরি হয় এবং মান সেট করা হয়। এটি জাভাস্ক্রিপ্ট অথবা একটি প্রতিক্রিয়া হেডার ব্যবহার করে সম্পন্ন করা যেতে পারে।
জাভাস্ক্রিপ্ট ব্যবহার করা
বিদ্যমান কীগুলির মান আপডেট করতে, ওয়ার্কলেটের ভিতরে বা বাইরে থেকে
sharedStorage.append()ব্যবহার করুন।window.sharedStorage.append('myKey', 'myValue1'); // Shared Storage: {'myKey': 'myValue1'} window.sharedStorage.append('myKey', 'myValue2'); // Shared Storage: {'myKey': 'myValue1myValue2'} window.sharedStorage.append('anotherKey', 'hello'); // Shared Storage: {'myKey': 'myValue1myValue2', 'anotherKey': 'hello'}ওয়ার্কলেটের ভিতরে যুক্ত করতে:
sharedStorage.append('myKey', 'myValue1');প্রতিক্রিয়া শিরোনাম ব্যবহার করে
শেয়ার্ড স্টোরেজে মান সেট করার মতো, আপনি কী-মান জোড়ায় পাস করার জন্য রেসপন্স হেডারে
Shared-Storage-Writeব্যবহার করতে পারেন।Shared-Storage-Write : append;key="myKey";value="myValue2"
মানগুলির ব্যাচ আপডেটিং
আপনি জাভাস্ক্রিপ্ট ওয়ার্কলেটের ভেতর বা বাইরে থেকে sharedStorage.batchUpdate() কল করতে পারেন এবং নির্বাচিত ক্রিয়াকলাপগুলি নির্দিষ্ট করে এমন পদ্ধতিগুলির একটি ক্রমযুক্ত অ্যারেতে পাস করতে পারেন। প্রতিটি পদ্ধতি কনস্ট্রাক্টর সেট, অ্যাপেন্ড, ডিলিট এবং ক্লিয়ারের জন্য সংশ্লিষ্ট পৃথক পদ্ধতির মতো একই পরামিতি গ্রহণ করে।
আপনি জাভাস্ক্রিপ্ট থেকে batchUpdate() কল করতে পারেন, অথবা একটি প্রতিক্রিয়া শিরোনাম ব্যবহার করতে পারেন:
জাভাস্ক্রিপ্ট ব্যবহার করা
batchUpdate()এর সাথে ব্যবহার করা যেতে পারে এমন জাভাস্ক্রিপ্ট পদ্ধতিগুলির মধ্যে রয়েছে:-
SharedStorageSetMethod(): শেয়ার্ড স্টোরেজে একটি কী-মান জোড়া লেখে। -
SharedStorageAppendMethod(): শেয়ার্ড স্টোরেজে বিদ্যমান কী-তে একটি মান যোগ করে, অথবা যদি কীটি এখনও বিদ্যমান না থাকে তবে একটি কী-মান জোড়া লেখে। -
SharedStorageDeleteMethod(): শেয়ার্ড স্টোরেজ থেকে একটি কী-মান জোড়া মুছে ফেলে। -
SharedStorageClearMethod(): শেয়ার্ড স্টোরেজের সমস্ত কী সাফ করে।
sharedStorage.batchUpdate([ new SharedStorageSetMethod('keyOne', 'valueOne'), new SharedStorageAppendMethod('keyTwo', 'valueTwo'), new SharedStorageDeleteMethod('keyThree'), new SharedStorageClearMethod() ]);-
প্রতিক্রিয়া শিরোনাম ব্যবহার করে
Shared-Storage-Write : set;key=keyOne;value=valueOne, append;key=keyTwo;value=valueTwo,delete;key=keyThree,clear
রেসপন্স হেডার ব্যবহার করলে হেডারের সকল পদ্ধতির জন্য batchUpdate() কাজ করে।
শেয়ার্ড স্টোরেজ থেকে পড়া
আপনি শুধুমাত্র একটি ওয়ার্কলেটের মধ্যে থেকে শেয়ার্ড স্টোরেজ থেকে পড়তে পারবেন।
await sharedStorage.get('mykey');
ওয়ার্কলেট মডিউলটি যে ব্রাউজিং প্রসঙ্গে লোড করা হয়েছিল তার উৎপত্তি নির্ধারণ করে যে কার শেয়ার্ড স্টোরেজ পড়া হচ্ছে।
শেয়ার্ড স্টোরেজ থেকে মুছে ফেলা হচ্ছে
আপনি ওয়ার্কলেটের ভেতর বা বাইরে থেকে জাভাস্ক্রিপ্ট ব্যবহার করে অথবা delete() সহ রেসপন্স হেডার ব্যবহার করে শেয়ার্ড স্টোরেজ থেকে ডিলিট করতে পারেন। একসাথে সমস্ত কী মুছে ফেলতে, যেকোনো একটি থেকে clear() ব্যবহার করুন।
জাভাস্ক্রিপ্ট ব্যবহার করা
ওয়ার্কলেটের বাইরে থেকে শেয়ার্ড স্টোরেজ থেকে মুছে ফেলার জন্য:
window.sharedStorage.delete('myKey');ওয়ার্কলেটের ভেতর থেকে শেয়ার্ড স্টোরেজ থেকে মুছে ফেলার জন্য:
sharedStorage.delete('myKey');ওয়ার্কলেটের বাইরে থেকে একবারে সমস্ত কী মুছে ফেলার জন্য:
window.sharedStorage.clear();ওয়ার্কলেটের ভেতর থেকে একবারে সমস্ত কী মুছে ফেলার জন্য:
sharedStorage.clear();প্রতিক্রিয়া শিরোনাম ব্যবহার করে
রেসপন্স হেডার ব্যবহার করে মান মুছে ফেলার জন্য, আপনি রেসপন্স হেডারে
Shared-Storage-Writeব্যবহার করে মুছে ফেলার জন্য কীটি পাস করতে পারেন।delete;key="myKey"রেসপন্স হেডার ব্যবহার করে সমস্ত কী মুছে ফেলার জন্য:
clear;
শেয়ার্ড স্টোরেজ থেকে সুরক্ষিত শ্রোতাদের আগ্রহের গোষ্ঠীগুলি পঠন
আপনি একটি Shared Storage ওয়ার্কলেট থেকে Protected Audience এর আগ্রহের গ্রুপগুলি পড়তে পারেন। interestGroups() পদ্ধতিটি StorageInterestGroup অবজেক্টের একটি অ্যারে প্রদান করে, যার মধ্যে AuctionInterestGroup এবং GenerateBidInterestGroup বৈশিষ্ট্যগুলি অন্তর্ভুক্ত রয়েছে।
নিচের উদাহরণটি দেখায় কিভাবে ব্রাউজিং প্রেক্ষাপটের আগ্রহ গোষ্ঠীগুলি এবং পুনরুদ্ধার করা আগ্রহ গোষ্ঠীগুলিতে সম্পাদিত কিছু সম্ভাব্য ক্রিয়াকলাপগুলি পড়তে হয়। ব্যবহৃত দুটি সম্ভাব্য ক্রিয়াকলাপ হল আগ্রহ গোষ্ঠীর সংখ্যা খুঁজে বের করা এবং সর্বোচ্চ বিড গণনা সহ আগ্রহ গোষ্ঠী খুঁজে বের করা।
async function analyzeInterestGroups() {
const interestGroups = await interestGroups();
numIGs = interestGroups.length;
maxBidCountIG = interestGroups.reduce((max, cur) => { return cur.bidCount > max.bidCount ? cur : max; }, interestGroups[0]);
console.log("The IG that bid the most has name " + maxBidCountIG.name);
}
ওয়ার্কলেট মডিউলটি যে ব্রাউজিং প্রসঙ্গে লোড করা হয়েছিল তার উৎপত্তি ডিফল্টরূপে পঠিত আগ্রহ গোষ্ঠীর উৎপত্তি নির্ধারণ করে। ডিফল্ট ওয়ার্কলেট উৎপত্তি এবং এটি কীভাবে পরিবর্তন করবেন সে সম্পর্কে আরও জানতে, শেয়ার্ড স্টোরেজ API ওয়াকথ্রুতে "শেয়ার্ড স্টোরেজ এবং প্রাইভেট অ্যাগ্রিগেশন কার্যকর করা" বিভাগটি পর্যালোচনা করুন।
বিকল্পগুলি
সকল শেয়ার্ড স্টোরেজ মডিফায়ার পদ্ধতি শেষ আর্গুমেন্ট হিসেবে একটি ঐচ্ছিক অপশন অবজেক্ট সমর্থন করে।
উইথলক
withLock বিকল্পটি ঐচ্ছিক। যদি নির্দিষ্ট করা থাকে, তাহলে এই বিকল্পটি পদ্ধতিটিকে Web Locks API ব্যবহার করে সংজ্ঞায়িত রিসোর্সের জন্য একটি লক অর্জন করার নির্দেশ দেয়। লক অনুরোধ করার সময় একটি লক নাম পাস করা হয়। নামটি এমন একটি রিসোর্সকে প্রতিনিধিত্ব করে যার ব্যবহার একাধিক ট্যাব, কর্মী বা মূলের মধ্যে কোড জুড়ে সমন্বিত হয়।
withLock বিকল্পটি নিম্নলিখিত শেয়ার্ড স্টোরেজ মডিফায়ার পদ্ধতিগুলির সাথে ব্যবহার করা যেতে পারে:
- সেট
- সংযোজন করা
- মুছে ফেলা
- পরিষ্কার
- ব্যাচ আপডেট
আপনি জাভাস্ক্রিপ্ট অথবা একটি রেসপন্স হেডার ব্যবহার করে লক সেট করতে পারেন:
জাভাস্ক্রিপ্ট ব্যবহার করা
sharedStorage.set('myKey', 'myValue', { withLock: 'myResource' });প্রতিক্রিয়া শিরোনাম ব্যবহার করে
Shared-Storage-Write : set;key="myKey";value="myValue",options;with_lock="myResource"
শেয়ার্ড স্টোরেজ লকগুলি ডেটা অরিজিন অনুসারে পার্টিশন করা হয়। লকগুলি LockManager request() পদ্ধতি ব্যবহার করে প্রাপ্ত যেকোনো লক থেকে স্বাধীন, সেগুলি window বা worker প্রসঙ্গে যাই হোক না কেন। তবুও, SharedStorageWorklet প্রসঙ্গের মধ্যে request() ব্যবহার করে প্রাপ্ত লকগুলির মতোই তাদের সুযোগ রয়েছে।
যদিও request() পদ্ধতিটি বিভিন্ন কনফিগারেশন বিকল্পের জন্য অনুমতি দেয়, শেয়ার্ড স্টোরেজের মধ্যে অর্জিত লকগুলি সর্বদা নিম্নলিখিত ডিফল্ট সেটিংস মেনে চলে:
-
mode: "exclusive": একই নামের অন্য কোনও লক একসাথে রাখা যাবে না। -
steal: false: একই নামের বিদ্যমান তালাগুলি অন্যান্য অনুরোধ পূরণের জন্য প্রকাশ করা হয় না। -
ifAvailable: false: লকটি উপলব্ধ না হওয়া পর্যন্ত অনুরোধগুলি অনির্দিষ্টকালের জন্য অপেক্ষা করে।
কখন withLock ব্যবহার করবেন
লকগুলি এমন পরিস্থিতিতে কার্যকর যেখানে একসাথে একাধিক ওয়ার্কলেট চলমান থাকতে পারে (যেমন, একটি পৃষ্ঠায় একাধিক ওয়ার্কলেট, অথবা বিভিন্ন ট্যাবে একাধিক ওয়ার্কলেট) যার প্রতিটি একই ডেটা দেখছে। সেই পরিস্থিতিতে, প্রাসঙ্গিক ওয়ার্কলেট কোডটি একটি লক দিয়ে মুড়িয়ে রাখা একটি ভাল ধারণা যাতে নিশ্চিত করা যায় যে একবারে শুধুমাত্র একটি ওয়ার্কলেট রিপোর্ট প্রক্রিয়া করছে।
আরেকটি পরিস্থিতি যেখানে লকগুলি কার্যকর তা হল যদি একটি ওয়ার্কলেটে একাধিক কী একসাথে পড়ার প্রয়োজন হয় এবং তাদের অবস্থা সিঙ্ক্রোনাইজ করা উচিত। সেই ক্ষেত্রে, একজনের উচিত একটি লক দিয়ে get কলগুলি মুড়িয়ে দেওয়া এবং সেই কীগুলিতে লেখার সময় একই লকটি অর্জন করা।
তালার ক্রম
ওয়েব লকের প্রকৃতির কারণে, মডিফায়ার পদ্ধতিগুলি আপনার সংজ্ঞায়িত ক্রমে কার্যকর নাও হতে পারে। যদি প্রথম অপারেশনের জন্য একটি লকের প্রয়োজন হয় এবং এটি বিলম্বিত হয়, তাহলে প্রথমটি শেষ হওয়ার আগেই দ্বিতীয় অপারেশনটি শুরু হতে পারে।
উদাহরণ স্বরূপ:
// This line might pause until the lock is available.
sharedStorage.set('keyOne', 'valueOne', { withLock: 'resource-lock' });
// This line will run right away, even if the first one is still waiting.
sharedStorage.set('keyOne', 'valueTwo');
একাধিক কী পরিবর্তনের উদাহরণ
batchUpdate() সহ withLock বিকল্পটি একই লক অর্জনকারী অন্যান্য সমসাময়িক ক্রিয়াকলাপগুলির সাথে পারস্পরিক বর্জন নিশ্চিত করে। আপনি কেবল batchUpdate() এর জন্য withLock বিকল্পটি সম্পূর্ণ ব্যাচে প্রয়োগ করতে পারেন। ব্যাচের মধ্যে যেকোনো পৃথক পদ্ধতির বস্তুতে withLock প্রয়োগ করলে একটি ব্যতিক্রম ঘটে।
এই উদাহরণে একটি লক ব্যবহার করা হয়েছে যাতে ওয়ার্কলেটের মধ্যে পড়া এবং মুছে ফেলার ক্রিয়াকলাপ একসাথে ঘটে, যা ওয়ার্কলেটের বাইরের হস্তক্ষেপ রোধ করে।
নিম্নলিখিত modify-multiple-keys.js উদাহরণটি modify-lock সহ keyOne এবং keyTwo এর জন্য নতুন মান সেট করে তারপর ওয়ার্কলেট থেকে modify-multiple-keys অপারেশনটি কার্যকর করে:
// modify-multiple-keys.js
sharedStorage.batchUpdate([
new SharedStorageSetMethod('keyOne', calculateValueFor('keyOne')),
new SharedStorageSetMethod('keyTwo', calculateValueFor('keyTwo'))
], { withLock: 'modify-lock' });
const modifyWorklet = await sharedStorage.createWorklet('modify-multiple-keys-worklet.js');
await modifyWorklet.run('modify-multiple-keys');
তারপর, modify-multiple-keys-worklet.js এর মধ্যে আপনি navigator.locks.request() ব্যবহার করে লকটি অনুরোধ করতে পারেন যাতে প্রয়োজনে কীগুলি পড়তে এবং পরিবর্তন করতে পারেন।
// modify-multiple-keys-worklet.js
class ModifyMultipleKeysOperation {
async run(data) {
await navigator.locks.request('modify-lock', async (lock) => {
const value1 = await sharedStorage.get('keyOne');
const value2 = await sharedStorage.get('keyTwo');
// Do something with `value1` and `value2` here.
await sharedStorage.delete('keyOne');
await sharedStorage.delete('keyTwo');
});
}
}
register('modify-multiple-keys', ModifyMultipleKeysOperation);
প্রসঙ্গ পরিবর্তন
শেয়ার্ড স্টোরেজ ডেটা ব্রাউজিং প্রসঙ্গের উৎসস্থলে (উদাহরণস্বরূপ, https://example.adtech.com) লেখা হয় যেখান থেকে কলটি এসেছে।
যখন আপনি একটি <script> ট্যাগ ব্যবহার করে তৃতীয় পক্ষের কোড লোড করেন, তখন কোডটি এম্বেডারের ব্রাউজিং প্রসঙ্গে কার্যকর করা হয়। অতএব, যখন তৃতীয় পক্ষের কোডটি sharedStorage.set() কল করে, তখন ডেটা এম্বেডারের শেয়ার্ড স্টোরেজে লেখা হয়। যখন আপনি একটি আইফ্রেমের মধ্যে তৃতীয় পক্ষের কোড লোড করেন, তখন কোডটি একটি নতুন ব্রাউজিং প্রসঙ্গ গ্রহণ করে এবং এর উৎপত্তি হল আইফ্রেমের উৎপত্তি। অতএব, আইফ্রেম থেকে করা sharedStorage.set() কলটি আইফ্রেম অরিজিনের শেয়ার্ড স্টোরেজে ডেটা সংরক্ষণ করে।
প্রথম পক্ষের প্রসঙ্গ
যদি কোনও প্রথম-পক্ষের পৃষ্ঠায় তৃতীয়-পক্ষের জাভাস্ক্রিপ্ট কোড এমবেড করা থাকে যা sharedStorage.set() বা sharedStorage.delete() কল করে, তাহলে কী-মান জোড়াটি প্রথম-পক্ষের প্রসঙ্গে সংরক্ষণ করা হয়।

তৃতীয় পক্ষের প্রসঙ্গ
কী-মান জোড়াটি একটি আইফ্রেম তৈরি করে এবং আইফ্রেমের মধ্যে থেকে জাভাস্ক্রিপ্ট কোডে set() অথবা delete() কল করে বিজ্ঞাপন প্রযুক্তি বা তৃতীয়-পক্ষের প্রসঙ্গে সংরক্ষণ করা যেতে পারে।

ব্যক্তিগত সমষ্টি API
শেয়ার্ড স্টোরেজে সংরক্ষিত সমষ্টিগত ডেটা পরিমাপ করতে, আপনি ব্যক্তিগত সমষ্টি API ব্যবহার করতে পারেন।
একটি রিপোর্ট তৈরি করতে, একটি ওয়ার্কলেটের ভিতরে একটি বাকেট এবং মান সহ contributeToHistogram() কল করুন। বাকেটটি একটি স্বাক্ষরবিহীন 128-বিট পূর্ণসংখ্যা দ্বারা প্রতিনিধিত্ব করা হয় যা ফাংশনে একটি BigInt হিসাবে পাস করতে হবে। মানটি একটি ধনাত্মক পূর্ণসংখ্যা।
গোপনীয়তা রক্ষার জন্য, রিপোর্টের পেলোড, যার মধ্যে বাকেট এবং মান রয়েছে, ট্রানজিটে এনক্রিপ্ট করা হয় এবং এটি শুধুমাত্র অ্যাগ্রিগেশন পরিষেবা ব্যবহার করে ডিক্রিপ্ট এবং একত্রিত করা যেতে পারে।
ব্রাউজারটি একটি সাইটের আউটপুট কোয়েরিতে অবদানের পরিমাণও সীমিত করবে। বিশেষ করে, অবদান বাজেট একটি নির্দিষ্ট সময়সীমার মধ্যে একটি নির্দিষ্ট ব্রাউজারের জন্য একটি সাইট থেকে সমস্ত প্রতিবেদনের মোট পরিমাণকে সীমাবদ্ধ করে। যদি বর্তমান বাজেট অতিক্রম করা হয়, তাহলে একটি প্রতিবেদন তৈরি করা হবে না।
privateAggregation.contributeToHistogram({
bucket: BigInt(myBucket),
value: parseInt(myBucketValue)
});
শেয়ার্ড স্টোরেজ এবং ব্যক্তিগত সমষ্টি কার্যকর করা
ডিফল্টরূপে, createWorklet() এর সাথে শেয়ার্ড স্টোরেজ ব্যবহার করার সময়, ডেটা পার্টিশনের উৎপত্তি হবে ইনভোকিং ব্রাউজিং কনটেক্সটের উৎপত্তি, ওয়ার্কলেট স্ক্রিপ্টের উৎপত্তি নয়।
ডিফল্ট আচরণ পরিবর্তন করতে, createWorklet কল করার সময় dataOrigin বৈশিষ্ট্যটি সেট করুন।
-
dataOrigin: "context-origin": (ডিফল্ট) ইনভোকিং ব্রাউজিং কনটেক্সটের অরিজিনের শেয়ার্ড স্টোরেজে ডেটা সংরক্ষণ করা হয়। -
dataOrigin: "script-origin": ডেটা ওয়ার্কলেট স্ক্রিপ্টের অরিজিনের শেয়ার্ড স্টোরেজে সংরক্ষণ করা হয়। এই মোডটি সক্ষম করার জন্য একটি অপ্ট-ইন প্রয়োজন। -
dataOrigin: "https://custom-data-origin.example": ডেটা একটি কাস্টম ডেটা অরিজিনের শেয়ার্ড স্টোরেজে সংরক্ষণ করা হয়। এই মোডটি সক্ষম করার জন্য একটি অপ্ট-ইন প্রয়োজন এবং কাস্টম ডেটা অরিজিনের মালিকের সম্মতি প্রয়োজন, যেমনটি কাস্টম ডেটা অরিজিনে বিস্তারিতভাবে বর্ণনা করা হয়েছে।
sharedStorage.createWorklet(scriptUrl, {dataOrigin: "script-origin"});
"script-origin" অথবা কাস্টম অরিজিন ব্যবহার করার সময়, স্ক্রিপ্ট এন্ডপয়েন্টকে Shared-Storage-Cross-Origin-Worklet-Allowed হেডার দিয়ে প্রতিক্রিয়া জানাতে হবে। ক্রস-অরিজিন অনুরোধের জন্য, CORS ও সক্ষম করা উচিত।
Shared-Storage-Cross-Origin-Worklet-Allowed : ?1
Access-Control-Allow-Origin: *
আপনি একটি তৃতীয়-পক্ষের আইফ্রেম ব্যবহার করে ক্রস-অরিজিন স্ক্রিপ্টও চালাতে পারেন, এই ক্ষেত্রে শেয়ার্ড স্টোরেজ অ্যাকশনগুলি তৃতীয়-পক্ষের ব্রাউজিং প্রসঙ্গে থাকবে।
ক্রস-অরিজিন আইফ্রেম ব্যবহার করা হচ্ছে
শেয়ার্ড স্টোরেজ ওয়ার্কলেট চালু করার জন্য একটি আইফ্রেম প্রয়োজন।
বিজ্ঞাপনের আইফ্রেমে, addModule() কল করে ওয়ার্কলেট মডিউলটি লোড করুন। sharedStorageWorklet.js ওয়ার্কলেট ফাইলে নিবন্ধিত পদ্ধতিটি চালানোর জন্য, একই বিজ্ঞাপন আইফ্রেম জাভাস্ক্রিপ্টে, sharedStorage.run() কল করুন।
const sharedStorageWorklet = await window.sharedStorage.createWorklet(
'https://any-origin.example/modules/sharedStorageWorklet.js'
);
await sharedStorageWorklet.run('shared-storage-report', {
data: { campaignId: '1234' },
});
ওয়ার্কলেট স্ক্রিপ্টে, আপনাকে একটি অ্যাসিঙ্ক run পদ্ধতি ব্যবহার করে একটি ক্লাস তৈরি করতে হবে এবং বিজ্ঞাপনের আইফ্রেমে চালানোর জন্য এটি register । sharedStorageWorklet.js ভিতরে:
class SharedStorageReportOperation {
async run(data) {
// Other code goes here.
bucket = getBucket(...);
value = getValue(...);
privateAggregation.contributeToHistogram({
bucket,
value
});
}
}
register('shared-storage-report', SharedStorageReportOperation);
ক্রস-অরিজিন অনুরোধ ব্যবহার করা হচ্ছে
শেয়ার্ড স্টোরেজ এবং প্রাইভেট অ্যাগ্রিগেশন ক্রস-অরিজিন আইফ্রেমের প্রয়োজন ছাড়াই ক্রস-অরিজিন ওয়ার্কলেট তৈরির অনুমতি দেয়।
প্রথম-পক্ষের পৃষ্ঠাটি ক্রস-অরিজিন জাভাস্ক্রিপ্ট এন্ডপয়েন্টে একটি createWorklet() কলও করতে পারে। ওয়ার্কলেট তৈরি করার সময় আপনাকে ওয়ার্কলেটের ডেটা পার্টিশন অরিজিনকে স্ক্রিপ্ট-অরিজিনের অরিজিন হিসেবে সেট করতে হবে।
async function crossOriginCall() {
const privateAggregationWorklet = await sharedStorage.createWorklet(
'https://cross-origin.example/js/worklet.js',
{ dataOrigin: 'script-origin' }
);
await privateAggregationWorklet.run('pa-worklet');
}
crossOriginCall();
ক্রস-অরিজিন জাভাস্ক্রিপ্ট এন্ডপয়েন্টকে Shared-Storage-Cross-Origin-Worklet-Allowed শিরোনাম দিয়ে প্রতিক্রিয়া জানাতে হবে এবং মনে রাখবেন যে অনুরোধের জন্য CORS সক্রিয় করা আছে।
Shared-Storage-Cross-Origin-Worklet-Allowed : ?1
createWorklet() ব্যবহার করে তৈরি করা ওয়ার্কলেটগুলিতে selectURL এবং run() থাকবে। addModule() এর জন্য উপলব্ধ নয়।
class CrossOriginWorklet {
async run(data){
// Other code goes here.
bucket = getBucket(...);
value = getValue(...);
privateAggregation.contributeToHistogram({
bucket,
value
});
}
}
কাস্টম ডেটা উৎস
যখন dataOrigin একটি বৈধ অরিজিনে সেট করা থাকে, তখন dataOrigin এর মালিককে path /.well-known/shared-storage/trusted-origins এ ওয়ার্কলেট স্ক্রিপ্ট অরিজিন তালিকাভুক্ত একটি JSON ফাইল হোস্ট করে সেই dataOrigin জন্য Shared Storage প্রক্রিয়াকরণে সম্মতি জানাতে হবে। ফাইলটি scriptOrigin এবং contextOrigin কী সহ অবজেক্টের একটি অ্যারে হওয়া উচিত। এই কীগুলির মান একটি স্ট্রিং বা স্ট্রিংগুলির একটি অ্যারে হতে পারে।
নিম্নলিখিত তথ্য ব্যবহার করে trusted-origins ফাইলটি তৈরি করুন:
- কলার প্রসঙ্গ
- ওয়ার্কলেট স্ক্রিপ্টের উৎপত্তি এবং URL
- ডেটার উৎস এবং মালিক
নিম্নলিখিত টেবিলটি দেখায় কিভাবে আপনি এই তথ্যের উপর ভিত্তি করে trusted-origins ফাইলটি তৈরি করতে পারেন:
| কলার প্রসঙ্গ | ওয়ার্কলেট স্ক্রিপ্ট URL | ডেটা উৎস | ডেটার মালিক | ডেটা অরিজিন মালিকের বিশ্বস্ত-অরিজিন JSON ফাইল |
|---|---|---|---|---|
| https://publisher.example | https://publisher.example/script.js | প্রসঙ্গ-উৎপত্তি | https://publisher.example | JSON প্রয়োজন নেই |
| https://publisher.example | https://ad.example/script.js | স্ক্রিপ্ট-উৎপত্তি | https://ad.example | JSON প্রয়োজন নেই |
| https://publisher.example | https://cdn-ad.example/script.js | https://ad.example | https://ad.example | [{ "scriptOrigin": "https://cdn-ad.example", "contextOrigin": "https://publisher.example" }] |
| যেকোনো কলার | https://cdn-ad.example/script.js | https://ad.example | https://ad.example | [{ "scriptOrigin": "https://cdn-ad.example", "contextOrigin": "*" }] |
| https://publisher-a.example, অথবা https://publisher-b.example | https://cdn-ad.example/script.js | https://ad.example | https://ad.example | [{ "scriptOrigin": "https://cdn-ad.example", "contextOrigin": [ "https://publisher-a.example", "https://publisher-b.example" ] }] |
| https://publisher.example | https://cdn-a-ad.example/script.js, অথবা https://cdn-b-ad.example/script.js | https://ad.example | https://ad.example | [{ "scriptOrigin": [ "https://cdn-a-ad.example", "https://cdn-b-ad.example" ], "contextOrigin": "https://publisher.example" }] |
উদাহরণস্বরূপ, নিম্নলিখিত JSON https://custom-data-origin.example/.well-known/shared-storage/trusted-origins এ হোস্ট করা যেতে পারে এবং https://custom-data-origin.example অরিজিনের জন্য শেয়ার্ড স্টোরেজ ডেটার সমস্ত অনুমোদিত প্রসেসর একত্রিত করে।
[
{
"scriptOrigin": "https://script-origin.a.example",
"contextOrigin": "https://context-origin.a.example"
},
{
"scriptOrigin": "https://script-origin.b.example",
"contextOrigin": [
"https://context-origin.a.example",
"https://context-origin.b.example"
]
}]
পরবর্তী পদক্ষেপ
নিম্নলিখিত পৃষ্ঠাগুলিতে শেয়ার্ড স্টোরেজ এবং প্রাইভেট এগ্রিগেশন API-এর গুরুত্বপূর্ণ দিকগুলি ব্যাখ্যা করা হয়েছে।
- শেয়ার্ড স্টোরেজের ভূমিকা (ডেভেলপার ক্রোম)
- শেয়ার্ড স্টোরেজ ব্যবহারের ক্ষেত্রে (ডেভেলপার ক্রোম)
- ব্যক্তিগত সমষ্টির ভূমিকা (ডেভেলপার ক্রোম)
- শেয়ার্ড স্টোরেজ এক্সপ্লেনার (GitHub)
- ব্যক্তিগত সমষ্টি ব্যাখ্যাকারী (GitHub)
- শেয়ার্ড স্টোরেজ এবং প্রাইভেট অ্যাগ্রিগেশন ডেমো
একবার আপনি API গুলির সাথে পরিচিত হয়ে গেলে, আপনি প্রতিবেদনগুলি সংগ্রহ করা শুরু করতে পারেন, যা অনুরোধের বডিতে JSON হিসাবে নিম্নলিখিত এন্ডপয়েন্টগুলিতে POST অনুরোধ হিসাবে পাঠানো হয়।
- ডিবাগ রিপোর্ট -
context-origin/.well-known/private-aggregation/debug/report-shared-storage - প্রতিবেদন -
context-origin/.well-known/private-aggregation/report-shared-storage
একবার রিপোর্ট সংগ্রহ করা হয়ে গেলে, আপনি স্থানীয় টেস্টিং টুল ব্যবহার করে পরীক্ষা করতে পারেন অথবা একত্রিত প্রতিবেদনগুলি পেতে বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্ট ফর অ্যাগ্রিগেশন সার্ভিস সেট আপ করতে পারেন।
আপনার মতামত শেয়ার করুন
আপনি GitHub-এ API এবং ডকুমেন্টেশন সম্পর্কে আপনার মতামত শেয়ার করতে পারেন।