1. Введение
Услуги по проведению торгов и аукционов (B&A) включают в себя 4 услуги для покупателей и продавцов, способствующие проведению аукциона с защищенной аудиторией :
Стек покупателя:
- Обслуживание покупателей на переднем крае
- Служба торгов
Стек продавца:
- Обслуживание клиентов продавца
- Аукционная служба
Эта кодовая лаборатория проведет вас через настройку и тестирование сквозной настройки в вашей локальной среде. Ожидается, что пошаговое руководство займет около 1 часа, не считая времени первоначальной сборки сервиса.
Даже если вы работаете только над кодом покупателя или продавца, полезно настроить сквозной поток в вашей локальной среде, чтобы лучше понять, как стеки покупателя и продавца работают друг с другом. Настроив оба стека, вы сможете быть более уверенными в дальнейшем, когда будете интегрироваться с соответствующим стеком покупателя или продавца другой стороны. Тестирование служб локально также экономит ваши затраты на разработку.
В этой лабораторной работе мы будем использовать приложение B&A Local Testing в качестве пошагового руководства.
Приложение для локального тестирования размещает различные ресурсы покупателя и продавца, используемые в аукционе B&A. Приложение также предоставляет пользовательский интерфейс по http://localhost:3000
, где вы можете моделировать различные конфигурации аукциона.
2. Настройка среды
2.1 Подготовка машины Linux
Используйте локальную машину Linux или предоставьте виртуальную машину Linux облачного провайдера по вашему выбору. Для улучшения времени сборки рекомендуется не менее 16 ядер, а предпочтительнее 32+ ядер.
Обратите внимание, что мы будем загружать HTML-страницу с http://localhost:3000
этой машины. Если виртуальная машина не предоставляет GUI, убедитесь, что порт 3000
доступен для вашей локальной машины, чтобы вы могли подключиться к ней.
2.2 Установка Докера
Мы используем Docker для запуска сервисов и локального тестового приложения.
Мы воспользуемся удобным скриптом для установки Docker в тестовой среде.
# Install Docker
> curl -fsSL https://get.docker.com -o get-docker.sh
> sudo sh get-docker.sh
# Set up sudo-less Docker
> sudo groupadd docker
> sudo usermod -aG docker $USER
> newgrp docker
# Test
> docker run hello-world
Предупреждение: При настройке sudo-less группа Docker предоставляет пользователю привилегии root-уровня. Прочитайте руководство Docker sudo-less, чтобы узнать больше.
2.3 Запустите сопутствующее приложение Local Testing
Сопутствующее приложение предоставляет ресурсы, такие как скрипты фиктивных торгов или подсчета очков, а также фиктивные конечные точки K/V BYOS. Приложение должно быть запущено до запуска служб B&A, чтобы ресурсы можно было загрузить в службы.
Загрузите репозиторий приложения Local Testing :
git clone https://github.com/privacysandbox/bidding-auction-local-testing-app.git
Из корня репозитория запустите скрипт установки :
./setup
Скрипт установки создаст сеть Docker ba-dev
, сгенерирует SSL-сертификаты и создаст тестовый образ приложения.
После успешной сборки запустите стартовый скрипт :
./start
3. Создание и запуск B&A локально
3.1. Свернуть B&A Услуги
Мы запустим два набора служб B&A на одной машине, поэтому мы разместим репозиторий в двух разных папках.
Набор А:
Загрузите репозиторий B&A:
git clone https://github.com/privacysandbox/bidding-auction-servers.git bidding-auction-servers-set-a
Набор Б
Загрузите репозиторий B&A:
git clone https://github.com/privacysandbox/bidding-auction-servers.git bidding-auction-servers-set-b
`
3.2 Создание сервисов
Из корневой папки каждой папки B&A выполните следующую команду для сборки всех 4 служб:
production/packaging/build_and_test_all_in_docker \
--service-path bidding_service \
--service-path auction_service \
--service-path buyer_frontend_service \
--service-path seller_frontend_service \
--platform gcp \
--instance local \
--no-precommit \
--no-tests \
--build-flavor non_prod \
--gcp-skip-image-upload
Эта команда создаст local
экземпляр сборки разработки ( non_prod
) для Google Cloud ( gcp
) всех 4 сервисов. При необходимости обновите флаг --platform
до выбранного вами облачного провайдера. Чтобы узнать больше о флагах сборки, проверьте файл build_and_test_all_docker
.
Первоначальная сборка может занять 2 часа, если используется 64-ядерная машина, а время сборки линейно масштабируется в зависимости от количества ядер. Если у вас 32-ядерная машина, это может занять 4 часа. Если у вас 16-ядерная машина, это может занять 8 часов.
Обратите внимание, что последующие сборки используют кэш, и каждая сборка должна занимать около 5–20 минут.
Два программиста бездельничают во время выполнения сборки.
( Я встретил Рэндалла Манро из xkcd во время написания этой кодовой лаборатории и сказал ему, что добавил этот комикс сюда )
3.3 Запуск служб
Для нашего тестирования мы запустим 8 служб (4 службы на стек). Каждая команда настроена на использование ресурсов, предоставляемых приложением Local Testing. Настоятельно рекомендуется использовать оконный менеджер, такой как tmux
.
Откройте не менее 8 дополнительных окон терминала и выполните следующие команды в каждом сеансе.
Обратите внимание, что сервер приложения локального тестирования должен быть запущен в отдельном процессе, поскольку скрипты торгов и подсчета очков будут обслуживаться приложением.
3.3.1 Команды набора А
Услуга | Команда |
Служба торгов | |
| |
Аукционная служба | |
| |
3.3.2 Набор команд B
Услуга | Команда |
Служба торгов | |
| |
Аукционная служба | |
| |
3.3.2 Переменные среды для локальных стартовых скриптов
Для управления поведением при запуске можно использовать следующие переменные среды.
Окружение вар | Доступность | Описание |
| Все услуги | Флаги для установки команды docker |
| Все услуги | При тестировании на локальной машине вам может потребоваться использовать самоподписанный сертификат, который не проходит проверку пиров SSL По умолчанию — |
| Все услуги | Уровень журналов обслуживания. Более высокий уровень обеспечивает больше журналов. 0 — самый низкий, 10 — самый высокий. По умолчанию |
| Служба торгов | Порт Bidding Service. По умолчанию |
| Служба торгов | URL логики торгов |
| Служба торгов | Выходные данные для обучения модели |
| Служба торгов | Аргументы в пользу заключения торгов |
| BFE-сервис | Порт службы BFE. По умолчанию |
| BFE-сервис | Адрес BYOS K/V покупателя |
| BFE-сервис | Адрес покупателя TEE K/V |
| BFE-сервис | Адрес службы торгов покупателя |
| Аукционная служба | Порт службы аукциона. По умолчанию |
| Аукционная служба | URL логики подсчета очков |
| Аукционная служба | URL-адрес отчета о победе покупателя |
| Аукционная служба | Скрипт отчета о победе покупателя |
| Аукционная служба | Скрипт отчета о победе покупателя для PAS |
| SFE-сервис | Порт службы SFE. По умолчанию |
| SFE-сервис | Адрес аукционной службы продавца |
| SFE-сервис | Адрес BYOS K/V продавца |
| SFE-сервис | Адрес TEE K/V продавца |
| SFE-сервис | Происхождение продавца |
| SFE-сервис | Адреса BFE покупателя |
4. Тестирование с помощью Secure Invoke из командной строки
4.1 Тестирование SFE
Вы также можете использовать инструмент Secure Invoke , входящий в пакет B&A Services, для вызова служб непосредственно из командной строки.
4.1.2 Полезная нагрузка SFE SelectAd
Следующий запрос JSON был заполнен настройкой аукциона B&A с одним продавцом SSP-BA
:
{
"auction_config": {
"seller": "https://localhost:6002",
"auction_signals": "{\"testKey\":\"someValue\"}",
"seller_signals": "{\"testKey\":\"someValue\"}",
"buyer_list": [
"https://localhost:5003",
"https://localhost:5004"
],
"per_buyer_config": {
"https://localhost:5003": { "buyer_signals": "{\"testKey\":\"someValue\"}" },
"https://localhost:5004": { "buyer_signals": "{\"testKey\":\"someValue\"}" }
}
},
"raw_protected_audience_input": {
"publisher_name": "http://localhost:4001",
"generation_id": "1210718540",
"enable_debug_reporting": true,
"raw_buyer_input": {
"https://localhost:5003": {
"interest_groups": [
{
"name": "dsp-x-demo",
"ad_render_ids": ["1234"],
"bidding_signals_keys": ["demo-key"],
"browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" },
"user_bidding_signals": "[1, 2, 3]"
}
]
},
"https://localhost:5004": {
"interest_groups": [
{
"name": "dsp-x-demo",
"ad_render_ids": ["1234"],
"bidding_signals_keys": ["demo-key"],
"browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" },
"user_bidding_signals": "[1, 2, 3]"
}
]
}
}
}
}
Сохраните файл как sfe-test.json
в корневой папке репозитория B&A Services набора A (скрипт сборки B&A скопирует файлы из корневой папки репозитория в папку /src/workspace
образа Docker).
4.1.2 Вызов SFE с помощью безопасного вызова
Выполните следующую команду из корневой папки репозитория B&A Services:
DOCKER_NETWORK=ba-dev ./builders/tools/bazel-debian run //tools/secure_invoke:invoke \
-- \
-target_service=sfe \
-input_file=/src/workspace/sfe-test.json \
-host_addr=192.168.84.104:50053 \
-client_ip=192.168.84.100 \
-insecure=true
Если стеки B&A настроены правильно, вы получите следующий успешный ответ:
{"adRenderUrl":"https://localhost:5004/ad.html","interestGroupName":"dsp-x-demo","interestGroupOwner":"https://localhost:5004","score":39,"bid":39,"biddingGroups":{"https://localhost:5003":{"index":[0]},"https://localhost:5004":{"index":[0]}}}
4.2 Тестирование BFE
4.2.1 Запрос BFE GetBids
{
"buyer_input": {
"interest_groups": {
"name": "dsp-x-demo",
"ad_render_ids": ["1234"],
"bidding_signals_keys": ["demo-key"],
"browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" }
}
},
"auction_signals": "{\"testKey\":\"someValue\"}",
"buyer_signals": "{\"testKey\":\"someValue\"}",
"seller": "https://localhost:6002",
"publisher_name": "http://localhost:4001",
"enable_debug_reporting": true,
"client_type": "CLIENT_TYPE_BROWSER"
}
Сохраните файл как bfe-test.json
в корневой папке репозитория B&A Services.
4.2.2 Вызов BFE с помощью безопасного вызова
Выполните следующую команду из корневой папки репозитория B&A Services:
DOCKER_NETWORK=ba-dev ./builders/tools/bazel-debian run //tools/secure_invoke:invoke \
-- \
-target_service=bfe \
-input_file="/src/workspace/bfe-test.json" \
-host_addr="192.168.84.102:50051" \
-client_ip=192.168.84.100 \
-insecure=true
Если стеки B&A настроены правильно, BFE возвращает следующий ответ:
{"bids":[{"bid":6,"render":"https://localhost:5003/ad.html","interestGroupName":"dsp-x-demo"}],"updateInterestGroupList":{}}
4.3 Проверьте журналы SFE
Посетите терминал и проверьте журналы SFE. Мы рассмотрим некоторые из примечательных журналов в выводе.
4.3.1 Зашифрованная полезная нагрузка запроса SelectAd
В этом выводе журнала SFE мы находим зашифрованную полезную нагрузку вызова navigator.getInterestGroupAdAuctionData()
. Эта полезная нагрузка генерируется браузером, отправляется из тега в SAS, а затем SAS пересылает ее в SFE:
I1210 21:20:47.266673 37 select_ad_reactor.cc:228] Protected auction ciphertext: AEAAIAABAAKg3OQSSLEBMR1MmJiwfOT8uef41iE+DQIvKUowsQvVcGbWZ+r17ff2r/iTbEnwqLPtpAxSTy77mi+cVV5cKjkKb4piaZnKiCDIMCyEvrQUD4+BG+HgrbUFhqiWPmQhNThvInMaHuYrXG7xushbRtvSPsVzEl6iBZcLZzD7W3CHMFK7bnJ+ufu52W6B7/8dOQ1gZW6SpwXMGNcrurTGoucbwbZRIPqCcbZk76J1gB69wrDYRo1wQ6jmBleLM36nulxbEj/sHhpQIgr895aKqEGQ3Fy+/HHPTO+zHphcX44YeF6mZ/I+WxZTDxCi1x27nI4yvzC8vI4a/giJN5XUlJZGb/fMrj3/Qly+gwJ8lbxdX+4GWTooDoS4MTtiBpJqh9wkIQ5XwfO54p8Kv6j/tk+51hOfVkOdtGwX0LvVrWT9PiJOJHa23nZ1fLg/22mTe05xdbR3WVeA+xiO9YwF4ozyCYDRUkDyWB/3k9RuaaT9H5S1szVpuOuD2nYSRpT9svmpfG4kipiS6BTPZPX2whDlukpuuoFgdiDtH6cFShNhZ5C47R0ayAvaZ1QSpOZMWfA6pdl4nhvNLpOKesKY/KFDEBzpUXRDsQWsfvmdqFl1mCeX9rOrEc9rodYVLXXhM8GPycehHmvqkccTBW6kipOQlmnSdIYaFmtWSFpUrzxajGkct3mZdTjVjOf...
4.3.2 Расшифрованная полезная нагрузка
В этом выводе мы находим расшифрованную полезную нагрузку вызова navigator.getInterestGroupAdAuctionData()
:
I1210 21:20:47.267590 37 select_ad_reactor.cc:347] (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Decoded BuyerInput:
https://localhost:5003 : {interest_groups { name: "dsp-x-demo" bidding_signals_keys: "demo-key" browser_signals { join_count: 1 recency: 7 prev_wins: "[]" } }}
4.3.3 Запрос GetBids
к BFE
Запрос GetBids
отправляется из SFE в BFE:
I1210 21:20:47.267710 37 select_ad_reactor.cc:751] (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Getting bid from a BFE
I1210 21:20:47.267729 37 buyer_frontend_async_client.cc:52] Raw request:
buyer_input {
interest_groups {
name: "dsp-x-demo"
bidding_signals_keys: "demo-key"
browser_signals {
join_count: 1
recency: 7
prev_wins: "[]"
}
}
}
auction_signals: "{\"testKey\":\"someValue\"}"
buyer_signals: "{\"testKey\": \"someValue\"}"
seller: "https://localhost:6002"
publisher_name: "localhost"
enable_debug_reporting: true
log_context {
generation_id: "c2824bfc-d515-4a1a-9de9-7660ad963252"
}
client_type: CLIENT_TYPE_BROWSER
4.3.4 Ответ GetBids
от BFE
BFE отвечает предложением:
I1210 21:20:47.282549 41 select_ad_reactor.cc:856] (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Received response from a BFE ...
I1210 21:20:47.282552 41 select_ad_reactor.cc:859] (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252)
GetBidsResponse:
bids {
bid: 9
render: "https://localhost:5003/ad.html"
interest_group_name: "dsp-x-demo"
}
update_interest_group_list {
}
4.3.5 Запрос ScoreAds
в службу аукционов
После получения ставок SFE отправляет вызов ScoreAds
в службу аукционов для каждой ставки:
I1210 21:20:47.287898 18 select_ad_reactor.cc:1280] (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) ScoreAdsRawRequest:
ad_bids {
bid: 9
render: "https://localhost:5003/ad.html"
interest_group_name: "dsp-x-demo"
interest_group_owner: "https://localhost:5003"
join_count: 1
k_anon_status: true
}
seller_signals: "{\"testKey\":\"someValue\"}"
auction_signals: "{\"testKey\":\"someValue\"}"
scoring_signals: "{\"renderUrls\":{\"https://localhost:5003/ad.html\":[1,2,3],\"https://localhost:5004/ad.html\":[1,2,3]}}"
publisher_hostname: "localhost"
enable_debug_reporting: true
log_context {
generation_id: "c2824bfc-d515-4a1a-9de9-7660ad963252"
}
per_buyer_signals {
key: "https://localhost:5003"
value: "{\"testKey\": \"someValue\"}"
}
per_buyer_signals {
key: "https://localhost:5004"
value: "{\"testKey\": \"someValue\"}"
}
seller: "https://localhost:6002"
4.3.6 Ответ ScoreAds
от службы аукционов
Служба аукционов продавца выдает ответ с оценкой желательности:
I1210 21:20:47.298029 33 default_async_grpc_client.h:134] Decrypting the response ...
I1210 21:20:47.298100 33 default_async_grpc_client.h:152] Decryption/decoding of response succeeded: ad_score {
desirability: 9
render: "https://localhost:5003/ad.html"
interest_group_name: "dsp-x-demo"
buyer_bid: 9
interest_group_owner: "https://localhost:5003"
win_reporting_urls {
top_level_seller_reporting_urls {
}
}
ad_type: AD_TYPE_PROTECTED_AUDIENCE_AD
}
4.3.7 Ответ SelectAd
от SFE
Ответ SelectAd
от SFE шифруется и отправляется в SAS:
I1210 21:20:47.298428 33 select_ad_reactor.cc:1413] (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Encrypted SelectAdResponse:
auction_result_ciphertext: "\023\233\252\321\000\331M\327\216\201S\332kl?\322\255\247\312\375h\007W\367\016\366FR\364\275\377\326\027h\204\203\265\t\271-\333\266\tH\342\033F\001k\211C\026V\013\271\255(\236\273\353\260\275\007\346\027\340?\005|\235S\244\265\2563U\246\322\177%\200/\3175\034 \020\024\362\345\3263\356F.s\261\005\231\262Z\000\330x\0230\335>\"\217\254\010\254\330>\206\007\274\235\037`\370W\032\207\356\367\206\026\341.i\"$\370\367\2554i\247\354\304e\306\2466S\337\321w\327+!\316\035:\002\231\246\362\366qm\211\000\013\343\345\224{\365py\361\374\316\202\217-\244\302\331\216D\025W#.\304nH\235\315\311<#\342\344\324\257\354\2441\251\312\320\226\342\021\377>3`\347/\350\254h\306\273\023\365\340@\321\2412\254\323\213\0137,\013n\220|\211\323/\030)\314\263\223\355>\254\312aa`!\375\335\023Z\234p\206\037\001\355\261{$\025+\341\275\327Ny\342\342\264=\376\2138\224\026\2058\251\020\202\245*46\023\307)K\342\364k<\2104r\247\034\216}\034\001\374\215\363\210\026\275\371S>\031;f.b\260\363\257.\255\023I\341A\237*_T\355\262\005\344L\336D%\327\267@\302$\300\340\203c\350|\337>C\275c\260\202o\315xp\260\257\241\305U\nK\033\274L6\025\350\373a:\253\212&>p\210\215\017&^\327\005_\037\020\212\362\351\341\231@g\372\0037\275b:)\207\303d\243?\261O\266\343\214\200\004\247\372\022S\326\200\037\330\252r\257+e\273[\231\202\3625{\330\213\240\370\245\\\214\350/\313\ty/\004\313\0304k\223\354\374\305\233\264\224K\344\241\251\322?\323q6\314D\027\200\203\035]\023O\306\230?\203\237:\254\305\265\332\330\2641l\322\020\022\330O-\242\207>Q\364_{F\235\353tk\207\035\205\005\221\373\207\0143\035\014\322\240H\220\347%\262f\347\017\352\273\265\231\014\204\r\312\254z\000\340&\354\222\323\245\356\217(i\246"
5. Тестирование с помощью локального тестового приложения из браузера
5.1 Откройте Chrome
Прочитайте статью Chromium о запуске Chrome из командной строки и запустите его со следующими флагами:
google-chrome --enable-privacy-sandbox-ads-apis --disable-features=EnforcePrivacySandboxAttestations,FledgeEnforceKAnonymity --enable-features=FledgeBiddingAndAuctionServerAPI,FledgeBiddingAndAuctionServer:FledgeBiddingAndAuctionKeyURL/https%3A%2F%2Fstorage.googleapis.com%2Fba-test-buyer%2Fcoordinator-test-key.json
Флаг установлен для загрузки фиктивного ключа координатора, который мы разместили по адресу https://storage.googleapis.com/ba-test-buyer/coordinator-test-key.json
Важно: Убедитесь, что вы полностью вышли из всех экземпляров Chrome, прежде чем открывать его из командной строки с флагами B&A. Чтобы выйти из всех процессов Chrome, попробуйте запустить ps aux | grep -ie chrome/chrome | awk '{print $2}' | xargs kill -9
из командной строки.
5.2 Посетите пользовательский интерфейс приложения локального тестирования
Пользовательский интерфейс приложения можно найти по адресу http://localhost:3000 в экземпляре браузера Chrome, который вы открыли с флагами. Точный адрес, который вы посещаете, может отличаться, если вы используете виртуальную машину с другим именем хоста.
Скриншот локального тестового приложения, посещаемого в браузере
В верхнем ряду приложения панель «Элементы управления» содержит кнопки для имитации различных конфигураций аукциона. Две другие панели содержат iframes с сайтов рекламодателя и издателя.
Скриншот групп по интересам в Chrome DevTools.
Затем нажмите кнопки на панели «Элементы управления», чтобы имитировать различные типы аукционов.
Если B&A Services и приложение Local Testing настроены правильно, предыдущее объявление отображается на панели «iframe сайта издателя».
5.3 Конфигурация аукциона локального тестового приложения
В сопутствующем локальном приложении для тестирования размещены следующие участники, различающиеся по номеру порта (другой порт считается кросс-источником):
Участник | Описание | Порт |
Рекламодатель | Загружает теги DSP на страницу | |
Издатель | Загружает теги SSP на страницу | |
| Покупатель на устройстве | |
| Покупатель на устройстве | |
| Покупатель B&A | |
| Покупатель B&A | |
| Продавец высшего уровня | |
| Продавец, работающий только на устройстве | |
| Продавец только B&A | |
| Продавец смешанного типа | |
Существует четыре DSP:
-
DSP-A
иDSP-B
участвуют в аукционах на устройствах -
DSP-X
иDSP-Y
участвуют в аукционах B&A
Существует четыре SSP, и каждый продавец использует собственную конфигурацию аукциона:
-
SSP-OD
проводит аукцион только на устройстве -
SSP-BA
проводит аукцион только B&A -
SSP-MIX
проводит аукцион смешанного типа -
SSP-TOP
проводит многопродавцовый аукцион-
SSP-OD/BA/MIX
участвуют в качестве продавцов компонентов многостороннего аукционаSSP-TOP
-
Полную архитектуру смотрите на схеме проекта .
5.4 Конфигурация услуг торгов и аукционов
В этой лабораторной работе мы запускаем два набора B&A одновременно.
Набор | Услуга | Участник | сетевой адрес |
Набор А | Служба торгов | | |
BFE-сервис | | | |
Аукционная служба | | | |
SFE-сервис | | | |
Набор Б | Служба торгов | | |
BFE-сервис | | | |
Аукционная служба | | | |
SFE-сервис | | | |
Приложение | Приложение для локального тестирования | Все | |
- В наборе A услуги покупателя используются
DSP-X
, а услуги продавца используютсяSSP-BA
- В наборе B услуги покупателя используются
DSP-Y
, а услуги продавца используютсяSSP-MIX
Для связи между Local Testing App и B&A Services используется мостовая сеть Docker . Мостовая сеть ba-dev
создается скриптом настройки Local Testing App. Службам B&A назначается IP-адрес в подсети 192.168.84.0
.
Например, когда вы вызываете SFE Set A из приложения, используется сетевой адрес 192.168.84.104:50053
. Когда вы загружаете скрипт фиктивных торгов из DSP-X в BFE, используется https://192.168.84.100:5003/generate-bid.js
.
6. Подведение итогов
Мы надеемся, что к настоящему моменту вы уже ознакомились с запуском стека служб B&A локально на своем компьютере и стали лучше понимать, как службы взаимодействуют друг с другом.
6.1 Техническая поддержка
- Если у вас возник вопрос по настройке приложения локального тестирования, создайте вопрос в репозитории LTA .
- Если у вас есть вопрос об услугах торгов и аукционов, создайте вопрос в репозитории услуг B&A .
- Если у вас есть вопрос о Privacy Sandbox в целом, создайте вопрос в репозитории privacy-sandbox-dev-support .
6.2 Узнать больше
- Узнайте больше об архитектуре B&A для веб-сайтов
- Узнайте больше об интеграции продавца с B&A для веб-сайтов