این سند یک راهنمای شروع سریع برای استفاده از فضای ذخیرهسازی مشترک و تجمیع خصوصی است. شما به درک هر دو API نیاز دارید زیرا ذخیرهسازی مشترک مقادیر را ذخیره میکند و تجمیع خصوصی گزارشهای قابل جمعآوری را ایجاد میکند.
مخاطبان هدف: فناوری های تبلیغاتی و ارائه دهندگان اندازه گیری.
نسخه ی نمایشی را امتحان کنید
نسخه ی نمایشی زنده را امتحان کنید. برای فعال کردن APIهای Privacy Sandbox مراحل دستورالعملهای نمایشی را دنبال کنید. باز کردن Chrome DevTools به شما کمک می کند تا نتایج موارد استفاده مختلف را تجسم کنید. موارد استفاده موجود در دمو:
- تجمیع خصوصی
- اندازه گیری دسترسی منحصر به فرد
- اندازه گیری جمعیت شناسی
- اندازه گیری فرکانس K+
- استفاده عمومی
- رویداد شناور بر روی قابهای حصاردار را اندازهگیری کنید
- ناوبری سطح بالا
- کنترل جایی که اشخاص ثالث می توانند بنویسند
نحوه مشاهده فضای ذخیره سازی مشترک
برای مشاهده آنچه در فضای ذخیرهسازی مشترک ذخیره میشود، از Chrome DevTools استفاده کنید. داده های ذخیره شده را می توان در Application -> Shared Storage
پیدا کرد.
مشاهده گزارشهای جمعآوری خصوصی
برای مشاهده گزارش های جمع آوری ارسال شده، به chrome://private-aggregation-internals
بروید. هنگامی که حالت اشکال زدایی فعال است، یک گزارش بلافاصله (بدون تاخیر) به [[YOUR_ORIGIN]]/.well-known/private-aggregation/debug/report-shared-storage
همراه با گزارش تأخیر زمانی ارسال می شود. [[YOUR_ORIGIN]]/.well-known/private-aggregation/report-shared-storage
.
برای فعال کردن اشکال زدایی، دستورالعمل های بخش اشکال زدایی را دنبال کنید.
API ذخیره سازی مشترک
برای جلوگیری از ردیابی بین سایتی، مرورگرها شروع به پارتیشن بندی تمام اشکال ذخیره سازی، از جمله ذخیره سازی محلی، کوکی ها و غیره کرده اند. اما موارد استفاده ای وجود دارد که به ذخیره سازی پارتیشن نشده نیاز است. Shared Storage API دسترسی نوشتن نامحدودی را در سایتهای سطح بالا با دسترسی خواندن حفظ حریم خصوصی فراهم میکند.
فضای ذخیرهسازی مشترک محدود به مبدأ زمینه (تماسگیرنده sharedStorage
) است.
فضای ذخیرهسازی مشترک دارای محدودیت ظرفیت در هر مبدا است که هر ورودی به حداکثر تعداد کاراکتر محدود میشود. در صورت رسیدن به حد مجاز، هیچ ورودی دیگری ذخیره نمی شود. محدودیتهای ذخیرهسازی دادهها در توضیح فضای ذخیرهسازی مشترک مشخص شدهاند.
فراخوانی حافظه مشترک
فنآوران تبلیغات میتوانند با استفاده از جاوا اسکریپت یا سرصفحههای پاسخ در فضای ذخیرهسازی مشترک بنویسند. خواندن از ذخیرهسازی مشترک فقط در یک محیط جاوا اسکریپت مجزا به نام Worklet انجام میشود.
با استفاده از فناوریهای تبلیغات جاوا اسکریپت میتوان عملکردهای ذخیرهسازی مشترک خاصی مانند تنظیم، الحاق و حذف مقادیر خارج از Worklet جاوا اسکریپت را انجام داد. با این حال، عملکردهایی مانند خواندن ذخیرهسازی مشترک و انجام تجمیع خصوصی باید از طریق یک Worklet JavaScript تکمیل شوند. روشهایی را میتوان در خارج از Worklet جاوا اسکریپت در Proposed API Surface - Outside the Worklet یافت.
روش هایی که در Worklet در طول یک عملیات استفاده می شوند را می توان در Proposed API Surface - In the worklet یافت.
استفاده از هدرهای پاسخ
مشابه جاوا اسکریپت، تنها توابع خاصی مانند تنظیم، افزودن و حذف مقادیر در ذخیرهسازی اشتراکی را میتوان با استفاده از هدرهای پاسخ انجام داد. برای کار با ذخیرهسازی مشترک در سرصفحه پاسخ،
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>
استفاده از ویژگی IDL با تگ
iframe
یاimg
let iframe = document.getElementById("my-iframe"); iframe.sharedStorageWritable = true; iframe.src = "https://a.example/path/for/updates";
اطلاعات بیشتر را میتوانید در ذخیرهسازی مشترک: سرصفحههای پاسخ پیدا کنید.
نوشتن در فضای ذخیرهسازی مشترک
برای نوشتن در فضای ذخیرهسازی مشترک، با sharedStorage.set()
از داخل یا خارج از Worklet جاوا اسکریپت تماس بگیرید. اگر از خارج از Worklet فراخوانی شود، داده ها در مبدأ زمینه مروری که تماس از آن برقرار شده است، نوشته می شود. اگر از داخل Worklet فراخوانی شود، داده ها در مبدأ زمینه مروری که worklet را بارگذاری کرده است، نوشته می شود. کلیدهای تنظیم شده دارای تاریخ انقضا 30 روز از آخرین به روز رسانی هستند.
فیلد ignoreIfPresent
اختیاری است. اگر موجود باشد و روی true
تنظیم شود، اگر کلید از قبل وجود داشته باشد، به روز نمی شود. انقضای کلید تا 30 روز از زمان فراخوانی set()
تمدید می شود حتی اگر کلید به روز نشده باشد.
اگر در بارگذاری یک صفحه با کلید یکسان چندین بار به فضای ذخیرهسازی مشترک دسترسی داشته باشید، مقدار کلید بازنویسی میشود. اگر کلید نیاز به حفظ مقدار قبلی دارد، ایده خوبی است که از 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_present
Shared-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()
از داخل یا خارج Worklet استفاده کنید.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"
خواندن از فضای ذخیرهسازی مشترک
میتوانید از فضای ذخیرهسازی مشترک فقط از داخل یک Worklet مطالعه کنید.
await sharedStorage.get('mykey');
مبدأ زمینه مروری که ماژول worklet از آن بارگیری شده است، تعیین میکند که ذخیرهسازی مشترک چه کسی خوانده شود.
حذف از حافظه مشترک
میتوانید با استفاده از جاوا اسکریپت از داخل یا خارج از Worklet یا با استفاده از هدرهای پاسخ با delete()
حذفها را از ذخیرهسازی مشترک انجام دهید. برای حذف همه کلیدها به طور همزمان، از clear()
از هر کدام استفاده کنید.
با استفاده از جاوا اسکریپت
برای حذف از فضای ذخیرهسازی مشترک از خارج از Worklet:
window.sharedStorage.delete('myKey');
برای حذف از فضای ذخیرهسازی مشترک از داخل Worklet:
sharedStorage.delete('myKey');
برای حذف همه کلیدها به یکباره از خارج از Worklet:
window.sharedStorage.clear();
برای حذف یکباره همه کلیدها از داخل Worklet:
sharedStorage.clear();
استفاده از هدرهای پاسخ
برای حذف مقادیر با استفاده از هدرهای پاسخ، میتوانید از
Shared-Storage-Write
در سرصفحه پاسخ نیز استفاده کنید تا کلید حذف شود.delete;key="myKey"
برای حذف همه کلیدها با استفاده از هدرهای پاسخ:
clear;
تغییر متن
دادههای ذخیرهسازی مشترک در مبدا (به عنوان مثال، https://example.adtech.com) زمینه مروری که تماس از آن آغاز شده است، نوشته میشود.
هنگامی که کد شخص ثالث را با استفاده از یک تگ <script>
بارگیری می کنید، کد در زمینه مرور در embedder اجرا می شود. بنابراین، زمانی که کد شخص ثالث sharedStorage.set()
را فراخوانی میکند، دادهها در ذخیرهسازی اشتراکی embedder نوشته میشوند. هنگامی که کد شخص ثالث را در یک iframe بارگیری می کنید، کد یک زمینه مرور جدید دریافت می کند و منشاء آن مبدا iframe است. بنابراین، فراخوانی sharedStorage.set()
که از iframe انجام میشود، دادهها را در ذخیرهسازی مشترک مبدا iframe ذخیره میکند.
زمینه شخص اول
اگر یک صفحه شخص اول کد جاوا اسکریپت شخص ثالثی را جاسازی کرده باشد که sharedStorage.set()
یا sharedStorage.delete()
را فراخوانی می کند، جفت کلید-مقدار در زمینه شخص اول ذخیره می شود.
زمینه شخص ثالث
جفت کلید-مقدار را می توان با ایجاد یک iframe و فراخوانی set()
یا delete()
در کد جاوا اسکریپت از داخل iframe در فناوری تبلیغات یا زمینه شخص ثالث ذخیره کرد.
Private Aggregation API
برای اندازهگیری دادههای جمعآوریشده ذخیرهشده در ذخیرهسازی مشترک، میتوانید از API جمعآوری خصوصی استفاده کنید.
برای ایجاد یک گزارش، داخل یک Worklet با یک سطل و مقدار contributeToHistogram()
فراخوانی کنید. سطل با یک عدد صحیح 128 بیتی بدون علامت نشان داده می شود که باید به عنوان BigInt
به تابع ارسال شود. مقدار یک عدد صحیح مثبت است.
برای محافظت از حریم خصوصی، محموله گزارش، که حاوی سطل و مقدار است، در حین انتقال رمزگذاری میشود و تنها با استفاده از سرویس تجمع میتوان آن را رمزگشایی و جمعآوری کرد.
مرورگر همچنین مشارکتهایی را که یک سایت میتواند در یک جستجوی خروجی انجام دهد محدود میکند. به طور خاص، بودجه مشارکت، مجموع گزارشهای یک سایت را برای یک مرورگر معین در یک پنجره زمانی معین در تمام سطلها محدود میکند. در صورت تجاوز از بودجه جاری، گزارشی ایجاد نخواهد شد.
privateAggregation.contributeToHistogram({
bucket: BigInt(myBucket),
value: parseInt(myBucketValue)
});
اجرای فضای ذخیره سازی مشترک و تجمیع خصوصی
در iframe آگهی، ماژول worklet را با فراخوانی addModule()
بارگیری کنید. برای اجرای روشی که در فایل worklet sharedStorageWorklet.js
ثبت شده است، در همان ad iframe JavaScript، sharedStorage.run()
را فراخوانی کنید.
await window.sharedStorage.worklet.addModule('modules/sharedStorageWorklet.js');
await window.sharedStorage.worklet.run('shared-storage-report', {
data: { campaignId: '1234' },
});
در اسکریپت worklet، باید یک کلاس با یک متد async run
ایجاد کنید. و این کلاس را برای اجرا در iframe آگهی register
. داخل sharedStorageWorklet.js
:
class SharedStorageReportOperation {
async run(data) {
// Other code goes here.
bucket = getBucket(...);
value = getValue(...);
privateAggregation.contributeToHistogram({
bucket: bucket,
value: value
});
}
}
register('shared-storage-report',
SharedStorageReportOperation);
اشکال زدایی
برای فعال کردن اشکال زدایی، روش جاوا اسکریپت enableDebugMode()
را در همان زمینه ای که از ذخیره سازی مشترک و تجمیع خصوصی استفاده می شود، فراخوانی کنید. این برای گزارش های آینده در همین زمینه اعمال خواهد شد.
privateAggregation.enableDebugMode();
برای مرتبط کردن گزارشها با زمینههایی که آنها را راهاندازی کردهاند، میتوانید یک کلید اشکالزدایی عدد صحیح بدون علامت 64 بیتی تنظیم کنید که به فراخوانی جاوا اسکریپت ارسال میشود. debugKey
یک BigInt
است.
privateAggregation.enableDebugMode({debugKey: 1234});
اشکال زدایی حافظه مشترک
فضای ذخیرهسازی مشترک یک پیام خطای عمومی را برمیگرداند:
Promise is rejected without and explicit error message
میتوانید با قرار دادن تماسها با بلوکهای try-catch، فضای ذخیرهسازی مشترک را رفع اشکال کنید.
try {
privateAggregation.contributeToHistogram({bucket, value});
} catch (e){
console.log(e);
}
اشکال زدایی تجمع خصوصی
گزارش ها به /.well-known/private-aggregation/report-shared-storage
and /.well-known/private-aggregation/debug/report-shared-storage
ارسال می شوند. گزارشهای اشکالزدایی باری مشابه JSON زیر دریافت میکنند. این محموله فیلد api
را به عنوان "store-store" تعریف می کند.
{
"aggregation_coordinator_identifier": "aws-cloud",
"aggregation_service_payloads": [ {
"debug_cleartext_payload": "omRkYXRhgaJldmFsdWVEAAAAgGZidWNrZXRQAAAAAAAAAAAAAAEfV32BFWlvcGVyYXRpb25paGlzdG9ncmFt",
"key_id": "9bc4afa7-2934-4779-99ff-999d91b137ec",
"payload": "bqOFO/cHCdwefU2W4FjMYRMSLoGHPWwZbgVF4aa/ji2YtwFz+jb6v2XCwQUdmvYcZSRPKosGRpKELJ0xAFv+VBYvCiv3FXP6jjAHQD+XAJUz17A39aXijk6JnEAu86+DfTSbXYn1fWhGzIG9xH/Y"
} ],
"debug_key": "1234",
"shared_info": "{\"api\":\"shared-storage\",\"debug_mode\":\"enabled\",\"report_id\":\"93f86829-cdf7-4ecd-b16d-4e415a3ee063\",\"reporting_origin\":\"https://small-free-wealth.glitch.me\",\"scheduled_report_time\":\"1681319668\",\"version\":\"0.1\"}"
}
اشکالزدایی محموله متن شفاف
debug_cleartext_payload
با Base64 CBOR -encoded است. میتوانید سطل و مقدار را با استفاده از رمزگشا مشاهده کنید یا از کد جاوا اسکریپت موجود در رمزگشای ذخیرهسازی مشترک استفاده کنید.
مراحل بعدی
صفحات زیر جنبههای مهم ذخیرهسازی مشترک و APIهای جمعآوری خصوصی را توضیح میدهند.
- مقدمه ای بر فضای ذخیره سازی مشترک (برنامه نویس کروم)
- موارد استفاده از فضای ذخیرهسازی مشترک (برنامهنویس Chrome)
- مقدمه ای بر Private Aggregation (Developer Chrome)
- توضیح دهنده حافظه مشترک (GitHub)
- توضیح دهنده تجمع خصوصی (GitHub)
- نسخه نمایشی ذخیره سازی مشترک و جمع آوری خصوصی
هنگامی که با API ها آشنا شدید، می توانید شروع به جمع آوری گزارش ها کنید که به عنوان یک درخواست POST به نقاط انتهایی زیر به عنوان JSON در بدنه درخواست ارسال می شوند.
- گزارشهای اشکالزدایی -
context-origin/.well-known/private-aggregation/debug/report-shared-storage
- گزارش ها -
context-origin/.well-known/private-aggregation/report-shared-storage
پس از جمعآوری گزارشها، میتوانید با استفاده از ابزار آزمایش محلی آزمایش کنید یا محیط اجرای معتمد را برای سرویس جمعآوری راهاندازی کنید تا گزارشهای انبوه را دریافت کنید.
بازخورد خود را به اشتراک بگذارید
می توانید بازخورد خود را در مورد API ها و اسناد در GitHub به اشتراک بگذارید.