大多数通过 DFP 投放的广告在传统意义上都不是响应式的,这是因为广告本质上只是一张静态图片。因此,您需要定义一个尺寸图,告诉 DFP 在加载时应该以特定屏幕尺寸获取哪些广告。
在这部分代码中,您是说此广告位可以加载一个728x60
或一个375x60
尺寸的广告,这将是随机选择的,也可以根据 DFP 中的配置方式以特定优先级选择。
googletag.defineSlot('/xxxxxx/Mobile_ad', [[375, 60], [728, 60]], 'div-gpt-ad-154504231384304-0').addService(googletag.pubads())
您需要更新代码以包含尺寸映射,让它知道它应该为正在查看内容的屏幕尺寸获取适当尺寸的广告。
您可以使用谷歌标签defineSizeMapping
方法来做到这一点。
var mapping = googletag.sizeMapping().
addSize([100, 100], [88, 31]).
addSize([320, 400], [[320, 50], [300, 50]]).
addSize([320, 700], [300, 250]).
addSize([750, 200], [728, 90]).
addSize([1050, 200], [1024, 120]).build();
googletag.defineSlot('/6355419/travel', [[980, 250], [728, 90], [460, 60], [320, 50]], 'ad-slot')
.defineSizeMapping(mapping)
.addService(googletag.pubads())
.setTargeting('test', 'responsive'); // Targeting is only required for this example.
每个addSize
调用都需要两个参数。在下面的示例中,第一个是一个数组,告诉 DFP 它应该在浏览器宽度/高度下使用这个尺寸图(如果您只关心宽度,375 / 60
您可以将高度设置为),第二个参数告诉 DFP 它应该加载一个或满足浏览器尺寸要求时的广告。0
320x50
300x50
addSize([320, 400], [[320, 50], [300, 50]])
浏览器尺寸是最小值,这意味着在以下示例中,如果浏览器尺寸为 1028 宽或更大,它将加载728x90
广告,而任何低于 1028 宽的东西都会加载320x50
广告。
.addSize([1028, 0], [[728, 90]])
.addSize([0, 0], [[320, 50]])
DFP 只会在初始加载时检查浏览器大小,默认情况下不会在您调整屏幕大小时刷新。您可以使用其他 DFP 帮助程序方法来刷新广告位,但您需要编写额外的逻辑来首先检查屏幕尺寸。
googletag.pubads().refresh(['ad-slot'])
这是一个如何与多个 sizemap 断点一起工作的示例,您需要将其保存为 HTML 文件并在本地尝试它,因为 JSFiddle 和 Codepen 使用的 iFrame 会导致其行为不正确。加载页面,调整屏幕大小,然后再次重新加载,您将根据浏览器当前大小获得适当大小的广告。
<script async='async' src='https://www.googletagservices.com/tag/js/gpt.js'></script>
<script type='text/javascript'>
var googletag = googletag || {};
googletag.cmd = googletag.cmd || [];
</script>
<script type='text/javascript'>
googletag.cmd.push(function() {
// Defines the size mapping, there are multiple examples here.
var mapping = googletag.sizeMapping().
addSize([100, 100], [[88, 31]]).
addSize([320, 400], [[320, 50], [300, 50]]).
addSize([320, 700], [[300, 250]]).
addSize([750, 200], [[728, 90]]).
addSize([1050, 200], [[1024, 120]]).build();
// Enables async rendering and single request.
googletag.pubads().enableSingleRequest();
googletag.pubads().enableAsyncRendering();
// Here the slot is defined, the smallest advert should be defined as the slot value
// as this gets overwritten by the defineSizeMapping call.
googletag.defineSlot('/6355419/travel', [320, 50], 'ad-slot')
.defineSizeMapping(mapping)
.addService(googletag.pubads())
.setTargeting('test', 'responsive'); // Targeting is only required for this example.
// Tells the advert to display.
googletag.enableServices();
});
</script>
<div id='ad-slot'>
<script type='text/javascript'>
googletag.cmd.push(function() {
googletag.display('ad-slot');
});
</script>
</div>
您可以在此处找到更多大小映射示例,并在此处找到所有 googletag 方法的定义。
或者,您可以选择投放具有响应性的原生广告,但您需要广告素材支持它,因为大多数广告不是以这种方式构建的。您可以在此处和此处了解有关原生广告的更多信息。他们的服务非常相似。
googletag.defineSlot('/6355419/travel', 'fluid', 'ad-slot')