Ten dokument zawiera krótki przewodnik po korzystaniu z pamięci współdzielonej i prywatności Agregacja. Musisz znać oba interfejsy API, ponieważ pamięć współdzielona przechowuje wartości, a agregacja prywatna tworzy raporty agregowane.
Docelowi odbiorcy: dostawcy technologii reklamowych i pomiarów.
Wypróbuj wersję demonstracyjną
Wypróbuj prezentację na żywo. Wykonaj odpowiednie czynności w instrukcji włączania interfejsów API Piaskownicy prywatności. Uruchamiam Chrome Narzędzia deweloperskie ułatwiają wizualizację wyników w różnych przypadkach użycia. Zastosowania dostępne w wersji demonstracyjnej:
- Agregacja prywatna
- Pomiar zasięgu wśród unikalnych użytkowników
- Pomiar danych demograficznych
- Pomiar częstotliwości K+
- Zastosowania ogólne
- Pomiar zdarzenia najechania kursorem myszy w chronionych ramkach
- Nawigacja najwyższego poziomu
- Kontrola nad uprawnieniami innych firm do zapisu
Jak wyświetlić pamięć współdzieloną
Aby sprawdzić, co jest przechowywane w pamięci współdzielonej, użyj Narzędzi deweloperskich w Chrome. Zapisane dane mogą
znaleźć w domenie Application -> Shared Storage
.
Wyświetlanie raportów dotyczących agregacji prywatnej
Aby wyświetlić wysłane raporty zbiorcze, otwórz
chrome://private-aggregation-internals
Po włączeniu trybu debugowania
jest wysyłana natychmiast (bez opóźnienia) do
[[YOUR_ORIGIN]]/.well-known/private-aggregation/debug/report-shared-storage
wraz z raportem o opóźnieniu, który ma zostać wysłany do
[[YOUR_ORIGIN]]/.well-known/private-aggregation/report-shared-storage
Aby włączyć debugowanie, wykonaj instrukcje podane w artykule na temat debugowania. .
Interfejs Shared Storage API
Aby zapobiec śledzeniu w witrynach, przeglądarki zaczęły partycjonować wszystkie formy pamięci lokalnej, plików cookie itd. Istnieją przypadki użycia, w których wymagane jest przechowywanie bez partycji. Interfejs Shared Storage API zapewnia nieograniczony dostęp do zapisu w różnych witrynach najwyższego poziomu z zachowaniem prywatności uprawnienia do odczytu danych.
Pamięć współdzielona jest ograniczona do źródła kontekstu (wywołania funkcji
sharedStorage
).
W pamięci współdzielonej obowiązuje limit pojemności na punkt początkowy, a każda pozycja jest ograniczona do maksymalną liczbę znaków. Po osiągnięciu limitu nie można już wprowadzać żadnych danych zapisane. Limity miejsca na dane są przedstawione w sekcji Pamięć współdzielona .
Wywoływanie pamięci współdzielonej
Specjaliści z branży reklamowej mogą zapisywać w pamięci współdzielonej za pomocą kodu JavaScript lub nagłówków odpowiedzi. Odczyt z pamięci współdzielonej odbywa się tylko w obrębie izolowanego kodu JavaScript w środowisku Worklet.
Za pomocą JavaScriptu specjaliści ds. technologii reklamowych mogą wykonywać określone funkcje pamięci współdzielonej takich jak ustawianie, dołączanie i usuwanie wartości poza kodem JavaScript Worklet. Funkcje takie jak odczyt pamięci współdzielonej czy Agregację prywatną należy wykonać za pomocą workletu JavaScript. Metody, których można używać poza Workletem JavaScriptu, znajdziesz tutaj Proponowany interfejs API – poza Worklet.
Metody używane w Workletze podczas operacji można znaleźć tutaj: Proponowany interfejs API – w Worklet.
Korzystanie z nagłówków odpowiedzi
Podobnie jak w języku JavaScript, tylko określone funkcje, takie jak ustawianie, dodawanie a wartości w pamięci współdzielonej można wykonać za pomocą nagłówków odpowiedzi. Do działa ze współdzielonymi danymi w nagłówku odpowiedzi,
Shared-Storage-Writable: ?1
musi być zawarte w nagłówku żądania.Aby zainicjować żądanie od klienta, uruchom następujący kod w zależności od wybraną metodę:
- Jak korzystać z aplikacji
fetch()
fetch("https://a.example/path/for/updates", {sharedStorageWritable: true});
- Za pomocą tagu
iframe
lubimg
<iframe src="https://a.example/path/for/updates" sharedstoragewritable></iframe>
- Używanie atrybutu IDL z tagiem
iframe
lubimg
let iframe = document.getElementById("my-iframe"); iframe.sharedStorageWritable = true; iframe.src = "https://a.example/path/for/updates";
- Jak korzystać z aplikacji
Więcej informacji znajdziesz w artykule Shared Storage: Response (Pamięć współdzielona: odpowiedź) Nagłówki.
Zapisywanie w pamięci współdzielonej
Aby zapisać dane w pamięci współdzielonej, wywołaj funkcję sharedStorage.set()
w aplikacji lub poza nią
Worklet JavaScriptu. Jeśli dane zostaną wywołane spoza Worklet, dane są zapisywane w
źródło kontekstu przeglądania, z którego wykonano wywołanie. W przypadku połączenia z
dane są zapisywane w źródle kontekstu przeglądania
który wczytał worklet. Ustawione klucze mają datę ważności równą 30
dni od ostatniej aktualizacji.
Pole ignoreIfPresent
jest opcjonalne. Jeśli klucz jest dostępny i ustawiony na true
, klucz
nie jest aktualizowany, jeśli już istnieje. Ważność klucza została odnowiona na 30 dni z
wywołanie set()
, nawet jeśli klucz nie został zaktualizowany.
Jeśli podczas tego samego wczytywania strony wielokrotnie uzyskuje się dostęp do pamięci współdzielonej
, wartość klucza zostanie zastąpiona. Warto użyć
sharedStorage.append()
, jeśli klucz musi zachować poprzednią wartość.
Używanie JavaScriptu
Poza obszarem roboczym:
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'}
Podobnie w obrębie Worklet:
sharedStorage.set('myKey', 'myValue1', { ignoreIfPresent: true });
Korzystanie z nagłówków odpowiedzi
Możesz też zapisywać w pamięci współdzielonej za pomocą nagłówków odpowiedzi. W tym celu użyj
Shared-Storage-Write
w nagłówku odpowiedzi wraz z tym fragmentem polecenia:Shared-Storage-Write : set;key="myKey";value="myValue";ignore_if_present
Shared-Storage-Write : set;key="myKey";value="myValue";ignore_if_present=?0
Można rozdzielić przecinkami wiele elementów, które można połączyć z tymi atrybutami:
set
,append
,delete
iclear
.Shared-Storage-Write : set;key="hello";value="world";ignore_if_present, set;key="good";value="bye"
Dołączenie wartości
Wartość możesz dołączyć do istniejącego klucza, korzystając z metody include. Jeśli klucz
nie istnieje, wywołanie funkcji append()
powoduje utworzenie klucza i ustawienie wartości. Może to spowodować
w JavaScript lub nagłówkach odpowiedzi.
Używanie JavaScriptu
Aby zaktualizować wartości istniejących kluczy, użyj parametru
sharedStorage.append()
z jednego z tych kluczy wewnątrz czy na zewnątrz Workletu.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'}
Aby dołączyć do Workletu:
sharedStorage.append('myKey', 'myValue1');
Korzystanie z nagłówków odpowiedzi
Podobnie jak w przypadku ustawień pamięci współdzielonej, możesz użyć funkcji
Shared-Storage-Write
w nagłówku odpowiedzi, aby przekazać ją w parze klucz-wartość.Shared-Storage-Write : append;key="myKey";value="myValue2"
Odczyt z pamięci współdzielonej
Możesz odczytywać dane z pamięci współdzielonej tylko w obrębie workletu.
await sharedStorage.get('mykey');
Źródło kontekstu przeglądania, z którego został wczytany moduł Worklet określa, czyja pamięć współdzielona jest odczytywana.
Usuwam z pamięci współdzielonej
Możesz usuwać dane z pamięci współdzielonej za pomocą JavaScriptu z jednego z tych narzędzi
lub poza Workletem bądź za pomocą nagłówków odpowiedzi z atrybutem delete()
. Aby usunąć
wszystkich klawiszy naraz, użyj klawisza clear()
dowolnej z nich.
Używanie JavaScriptu
Aby usunąć dane z pamięci współdzielonej spoza Workletu:
window.sharedStorage.delete('myKey');
Aby usunąć ze współdzielonej pamięci masowej z wewnątrz Workletu:
sharedStorage.delete('myKey');
Aby usunąć wszystkie klucze jednocześnie spoza Workletu:
window.sharedStorage.clear();
Aby usunąć wszystkie klucze jednocześnie z workletu:
sharedStorage.clear();
Korzystanie z nagłówków odpowiedzi
Aby usunąć wartości za pomocą nagłówków odpowiedzi, możesz też użyć funkcji
Shared-Storage-Write
w nagłówku odpowiedzi, aby przekazać klucz do usunięcia.delete;key="myKey"
Aby usunąć wszystkie klucze za pomocą nagłówków odpowiedzi:
clear;
Przełączanie kontekstu
Dane pamięci współdzielonej są zapisywane w origin, (na przykład https://example.adtech.com) kontekstu przeglądania, przez które wywołanie .
Gdy wczytujesz kod innej firmy za pomocą tagu <script>
, kod jest wykonywany.
w kontekście przeglądania. Dlatego gdy kod innej firmy
wywoła sharedStorage.set()
, dane są zapisywane w
Miejsce na dane. Gdy ładujesz kod innej firmy w elemencie iframe, kod otrzyma
nowym kontekstem przeglądania, a jego źródłem jest źródło elementu iframe. Dlatego
wywołanie sharedStorage.set()
z elementu iframe zapisuje dane w sekcji
Wspólna pamięć masowa źródła elementu iframe.
Kontekst własny
Jeśli strona własna ma osadzony kod JavaScript innej firmy, który wywołuje
sharedStorage.set()
lub sharedStorage.delete()
, para klucz-wartość jest przechowywana
w kontekście
Kontekst firmy zewnętrznej
Para klucz-wartość może być przechowywana w kontekście technologii reklamowej lub innej firmy przez
tworząc element iframe i wywołując funkcję set()
lub delete()
w kodzie JavaScript z
wewnątrz elementu iframe.
Interfejs Private Aggregation API
Aby mierzyć agregowane dane przechowywane w pamięci współdzielonej, możesz użyć funkcji Prywatny Interfejs API agregacji.
Aby utworzyć raport, wywołaj contributeToHistogram()
w workletze ze znakiem
odbiorcy i wartości. Zasobnik jest reprezentowany przez nieoznaczoną 128-bitową liczbę całkowitą, która
musi zostać przekazana do funkcji w postaci BigInt
. Wartość musi być dodatnią liczbą całkowitą.
Aby chronić prywatność, ładunek raportu, który zawiera zasobnik i wartość, jest zaszyfrowany podczas przesyłania i można go odszyfrować i zagregować tylko przy użyciu agregacja danych.
Przeglądarka ogranicza też wpływ witryny na dane wyjściowe zapytania. Konkretnie: wkład ogranicza łączną liczbę wszystkich raportów z jednej witryny dla danej przeglądarki w danym przedziale czasowym we wszystkich zasobnikach. Jeśli bieżący budżet zostanie przekroczony, nie zostanie wygenerowany.
privateAggregation.contributeToHistogram({
bucket: BigInt(myBucket),
value: parseInt(myBucketValue)
});
Wykonywanie pamięci współdzielonej i agregacji prywatnej
Używanie elementów iframe z innych domen
Do wywołania Workletu pamięci współdzielonej potrzebny jest element iframe.
W elemencie iframe reklamy wczytaj moduł Worklet, wywołując funkcję addModule()
. Aby uruchomić
zarejestrowanej w pliku worklet sharedStorageWorklet.js
, w metodzie
taki sam element iframe reklamy, wywołanie sharedStorage.run()
.
await window.sharedStorage.worklet.addModule('modules/sharedStorageWorklet.js');
await window.sharedStorage.worklet.run('shared-storage-report', {
data: { campaignId: '1234' },
});
W skrypcie Worklet musisz utworzyć klasę z asynchroniczną klasą run
. Dodaj też register
tę klasę do uruchomienia w elemencie iframe reklamy. Wewnątrz
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);
Używanie żądań z innych domen
Pamięć współdzielona i agregacja prywatna umożliwiają tworzenie Workletów z innych domen bez potrzeby stosowania elementów iframe z innych domen.
Strona własna może wywoływać wywołanie createWorklet()
do zasobów z innych domen
punkt końcowy JavaScript.
async function crossOriginCall() {
let privateAggregationWorklet = await sharedStorage.createWorklet(
'https://cross-origin.dev/js/worklet.js',
);
await privateAggregationWorklet.run('pa-worklet');
}
crossOriginCall();
Punkt końcowy JavaScript z innych domen będzie musiał odpowiadać z nagłówkami
Shared-Storage-Cross-Origin-Worklet-Allowed
i zezwól na korzystanie z innych domen za pomocą
Access-Control-Allow-Origin
Shared-Storage-Cross-Origin-Worklet-Allowed : ?1
Access-Control-Allow-Origin : https://first-party.dev
Worklety utworzone za pomocą interfejsu createWorklet()
będą mieć selectURL
i run()
.
Usługa addModule()
jest niedostępna w tym przypadku.
class CrossOriginWorklet {
async run(data){
// Other code goes here.
bucket = getBucket(...);
value = getValue(...);
privateAggregation.contributeToHistogram({
bucket: bucket,
value: value
});
}
}
Debugowanie
Aby włączyć debugowanie, wywołaj metodę JavaScript enableDebugMode()
w tym samym
w którym używana jest pamięć współdzielona i agregacja prywatna. Będzie to
dla przyszłych raportów w tym samym kontekście.
privateAggregation.enableDebugMode();
Aby powiązać raporty z kontekstami, które je spowodowały, możesz określić
64-bitowy niepodpisany klucz całkowity do debugowania, który jest przekazywany do wywołania JavaScriptu.
debugKey
ma status BigInt
.
privateAggregation.enableDebugMode({debugKey: 1234});
Debugowanie pamięci współdzielonej
Pamięć współdzielona zwraca ogólny komunikat o błędzie:
Promise is rejected without and explicit error message
Możesz debugować pamięć współdzieloną, dodając do wywołań funkcję try-catch bloki.
try {
privateAggregation.contributeToHistogram({bucket, value});
} catch (e){
console.log(e);
}
Debugowanie agregacji prywatnej
Raporty są wysyłane na te adresy: /.well-known/private-aggregation/report-shared-storage
oraz
/.well-known/private-aggregation/debug/report-shared-storage
Raporty debugowania
otrzymasz ładunek podobny do tego w formacie JSON. Ten ładunek określa api
jako „pamięć-wspólna”.
{
"aggregation_coordinator_origin": "https://publickeyservice.msmt.gcp.privacysandboxservices.com",
"aggregation_service_payloads": [ {
"debug_cleartext_payload": "omRkYXRhlKJldmFsdWVEAAAAgGZidWNrZXRQAAAAAAAAAAAAAAAAB1vNFaJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAKJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAGlvcGVyYXRpb25paGlzdG9ncmFt",
"key_id": "1569ab37-da44-4a26-80d9-5ed6524ab2a7",
"payload": "/9nHrWn1MnJWRxFvanbubciWE9mPyIij6uYLi5k351eQCd3/TZpe2knaatUNcniq4a4e61tmKebv50OmMRZFnnCfcAwIdIgLHu1a3en97PojqWJBfO52RiVMIcP7KQTLzMxq2LhvPSdV4zjXo1Teu/JuIK3LIyis3vUMpS+tUAX0QV+I6X5SVmZFiNW9aMb8DwLOtqrBy5JJ/EkOIY0G+1Fi1/3R7UtKsqM1o71A/OzdmlNkwO7EV/VUNinGvWnd19FvDHe/kqkNdTHKbhAnMmbZzHW9bsEQS81leElCla6BTdbdbeeFU/jbTj0AOaoNOIe5r7FU5NG6nW4ULXTCbLLjTQ1mtl3id3IP41Zin1JvABCDC/HUSgLFz8EUqkmbMIOlMfNYA79aURq6FqE0GO0HtICYf0GPNdVv7p4jY3FNn6+JS4l5F3t+3lP9ceo4IpCE+31jzMtYJ+19xFh6C5ufteBR/iknZFcc1w3caQBhgRl5jt8DbaOzYcW4690H8Ul4Oh2wRO+6/njifk+pExLay/O5swLi2lUUph5OUEaaztwwzh2mnhwIBxMkPnfsGihiF+5KDEajVfMZ3NLsIDoZO+l4RTZrkqE+jVkAqaZGBiCIx42Edp/JV0DXfrryypCdQBZr8iEbSzCM9hKsMfLN7S/VkPe5rDwOZbhKCn5XXgfGz5tSx/KbZgsQf4OCEhwAyNPHAh3MHU7xmkQ3pKg4EIUC/WOtKAlVDOtDMmPPoQY1eAwJhw9SxZaYF1kHjUkTm3EnGhgXgOwCRWqeboNenSFaCyp6DbFNI3+ImONMi2oswrrZO+54Tyhca5mnLIiInI+C3SlP4Sv1jFECIUdf/mifJRM5hMj6OChzHf4sEifjqtD4A30c4OzGexWarie2xakdQej9Go4Lm0GZEDBfcAdWLT9HwmpeI2u4HDAblXDvLN8jYFDOOtzOl90oU7AwdhkumUCFLRadXAccXW9SvLfDswRkXMffMJLFqkRKVE1GPonFFtlzaRqp7IgE8L6AOtz6NDcxAjHnEuzDPPMcWMl1AFH0gq7h"
} ],
"debug_key": "1234",
"shared_info": "{\"api\":\"shared-storage\",\"debug_mode\":\"enabled\",\"report_id\":\"80d93c0a-a94e-4ab7-aeb5-a4ecd4bfc598\",\"reporting_origin\":\"https://privacy-sandbox-demos-dsp.dev\",\"scheduled_report_time\":\"1717784740\",\"version\":\"0.1\"}"
}
Debuguj ładunek nieszyfrowany
debug_cleartext_payload
to
Base64
Z kodowaniem CBOR. Możesz wyświetlić zasobnik
za pomocą dekodera lub użyj wartości
kod JavaScript dostępny w Shared Storage
za pomocą dekodera.
Dalsze kroki
Na kolejnych stronach opisujemy ważne aspekty udostępniania pamięci współdzielonej i prywatności Interfejsy API do agregacji.
- Wprowadzenie do pamięci współdzielonej (Chrome dla programistów)
- Przypadki użycia pamięci współdzielonej (Chrome dla deweloperów)
- Wprowadzenie do agregacji prywatnej (Chrome dla deweloperów)
- Wyjaśnienie dotyczące pamięci współdzielonej (GitHub)
- Wyjaśnienie agregacji prywatnej (GitHub)
- Wersja demonstracyjna agregacji współdzielonej pamięci i agregacji prywatnej
Po zapoznaniu się z interfejsami API możesz zacząć zbierać raporty które są wysyłane jako żądanie POST do poniższych punktów końcowych w postaci kodu JSON w treść żądania.
- Raporty debugowania –
context-origin/.well-known/private-aggregation/debug/report-shared-storage
- Raporty –
context-origin/.well-known/private-aggregation/report-shared-storage
Po zebraniu raportów można przeprowadzić testy, korzystając z testów lokalnych lub skonfigurować zaufane środowisko wykonawcze dla agregacji. Usługa , aby uzyskać raporty zbiorcze.
Prześlij opinię
Możesz podzielić się swoją opinią na temat interfejsów API i dokumentacji w GitHubie.