作为广告买方(DSP 和广告客户),您可能会有兴趣参与发布商网站上的 Protected Audience 广告竞价,以便将广告定位到您在广告客户网站上指定的兴趣群体。通过参与 Protected Audience 竞价,您能够以可保护隐私的方式覆盖其他网站上已识别的客户。
在 Protected Audience 竞价中,您只需提供用于生成出价的逻辑,浏览器便会使用该逻辑计算出价。这与其他竞价架构完全不同,在这种架构中,您可以直接提交出价,而不是提供逻辑。
您可以在 generateBid()
JavaScript 函数中提供出价生成逻辑,该文件会托管在您的服务器上。当您将用户添加到兴趣群体后,该文件的位置会作为 biddingLogicUrl
传入兴趣群体配置。
在竞价期间,浏览器会提取 biddingLogicUrl
字段中指定的出价逻辑,并在安全隔离环境(该环境与外部上下文的通信受限)中针对每个兴趣群体执行 generateBid()
函数。执行 generateBid()
时,浏览器会将信号作为实参传递给函数。这些信号包含来自不同来源的各种信息,例如发布商的第一方数据、卖方数据、实时数据等。您可以使用这些信号来计算出价,系统会从 generateBid()
调用返回价值。提交出价后,浏览器将对每个出价执行卖方的评分逻辑,以计算卖方的受欢迎程度得分。
generateBid()
下面介绍了 generateBid()
函数的参数以及该函数返回的出价结构:
generateBid(interestGroup, auctionSignals, perBuyerSignals,
trustedBiddingSignals, browserSignals, directFromSellerSignals) {
return {
ad: adObject,
adCost: optionalAdCost,
bid: bidValue,
bidCurrency: 'USD',
render: {
url: renderURL,
width: renderWidth,
height: renderHeight
},
adComponents: [
{url: adComponent1, width: componentWidth1, height: componentHeight1},
{url: adComponent2, width: componentWidth2, height: componentHeight2},
// ...
],
allowComponentAuction: false,
modelingSignals: 123 // 0-4095 integer (12-bits)
};
}
参数
generateBid()
接受以下参数:
参数 | 角色 |
---|---|
|
广告买方传递给的对象。可以使用 dailyUpdateUrl 更新兴趣群体。 |
|
卖方传递给 navigator.runAdAuction() 的竞价配置参数的属性。它提供了与网页上下文(例如广告尺寸和发布商 ID)、竞价类型(最高出价或次高价格)以及其他元数据相关的信息。 |
|
卖方传递的竞价配置参数的属性。如果卖方是对买方服务器执行实时出价调用并将响应传回的 SSP,或发布商网页直接与买方服务器联系,这样就可以提供来自买方服务器关于该网页的情境信号。如果是这样,买方可能希望在 generateBid() 内检查这些信号的加密签名,以防止篡改。 |
|
一个对象,其键为兴趣组的 trustedBiddingSignalsKeys ,其值在 trustedBiddingSignals 请求中返回。 |
|
由浏览器构建的对象,可能包含网页上下文信息(例如,卖方原本可以伪造的当前网页的 hostname )和兴趣群体本身的数据(例如,记录该兴趣群体在何时赢得竞价,以实现设备端频次上限)。 |
|
与 auctionSignals 和 sellerSignals 不同,auctionSignals 和 sellerSignals 可以来自执行 runAdAuction 的位置中存在的任何参与者。 |
浏览器信号
browserSignals
对象具有以下属性:
{
topWindowHostname: 'publisher.example',
seller: 'https://ssp.example',
topLevelSeller: 'https://www.top-level-ssp.com',
requestedSize: {width: 100, height: 200}, /* if specified in auction config */
joinCount: 3,
recency: 3600000,
bidCount: 17,
prevWinsMs: [[timeDeltaMs1,ad1],[timeDeltaMs2,ad2],...],
wasmHelper: ...
dataVersion: 1,
adComponentsLimit: 40
}
属性 | 说明 |
---|---|
|
进行 runAdAuction() 调用的主机名。 |
|
向其提交出价的卖方。在组件竞价中,此值为组件卖方。 |
|
参与组成部分竞价的顶级卖方,仅参与组成部分竞价。 |
|
requestedSize 属性会建议用于竞价的帧大小。卖方在竞价配置中设置请求的尺寸,generateBid() 中的出价方可以使用该值。参与竞价的出价方可以为广告选择不同的内容尺寸,系统会对生成的尺寸进行视觉缩放,使其适合元素的容器尺寸。 |
|
joinCount 字段是指此设备在过去 30 天内在持续存储兴趣群体(即,由于退出计划或成员资格过期而在设备上存储此兴趣群体的空档)加入此兴趣群体的次数。 |
|
recency 字段是指从此设备加入此兴趣群体到现在的持续时间(以分钟为单位) |
|
相应兴趣群体提交出价的次数。 |
|
prevWinMs 字段包含兴趣群体的胜出广告,以及距离它们之前的胜出广告的时间(以毫秒为单位)。请注意,此处的广告对象仅包含 renderURL 和元数据字段。 |
|
一个基于兴趣群体 biddingWasmHelperURL 的 WebAssembly.Module 对象。 |
|
买方键值对服务响应的数据版本值。 |
|
generateBid() 可能返回的广告组件数量已达上限 |
计算出价
为了计算出价值,generateBid()
中的代码可以使用函数参数的属性。
例如:
function generateBid(interestGroup, auctionSignals, perBuyerSignals,
trustedBiddingSignals, browserSignals) {
return {
// ...
bid: auctionSignals.is_above_the_fold ? perBuyerSignals.atf_value : perBuyerSignals.btf_value,
// ...
}
}
返回出价
generateBid()
会返回具有以下属性的对象:
属性 | 角色 |
---|---|
ad |
有关广告的任意元数据,例如卖方希望了解的有关此出价或广告素材的信息。卖方会在其竞价和决策逻辑中使用这些信息。 |
adCost |
一个数值,用于将报告的广告客户点击或转化费用从 generateBid 传递给 reportWin。此数字的精度限制为 8 位尾数和 8 位指数,所有舍入均随机执行。 |
adComponents |
一个可选列表,包含用于由多个部分组成的广告的最多 20 个组件,提取自传递给 navigator.joinAdInterestGroup() 的兴趣群体参数的 adComponents 属性。 |
allowComponentAuction |
指示此出价是否可以用于组成部分竞价的布尔值。默认值为“false”。 |
bid |
将会参与竞价的数字出价。卖方必须能够比较不同买方的出价,因此出价必须采用卖方选择的单位(例如“每千次美元”)。如果出价为零或负数,则此兴趣群体将根本不会参与卖方的竞价。通过这种机制,买方可以实施任何广告客户规则,指定广告可能展示的位置,也可能不会展示。 |
bidCurrency |
出价所用的币种,用于currency-checking。 |
render |
描述在此出价赢得竞价时应呈现的广告素材的字典。其中包括: <ph type="x-smartling-placeholder">
|
|
一个介于 0 到 4095 之间的整数(12 位),有噪声(如噪声和分桶方案中所述),并传递给 reportWin() 。无效值(例如,负数、无限值和 NaN 值)将被忽略,并且不会传递。系统只会传递最低的 12 位。买方可以使用 generateBid() 函数中提供的信号(包括在 userBiddingSignals 创建兴趣组时捕获的第一方买方数据中的数据)来获取一些值,并将其传递给买方的胜出报告函数,以启用机器学习模型训练。 |