為入門和基本概念範例
Google 發布商廣告代碼
(GPT) 程式庫的 display() 方法
註冊並顯示廣告版位不過,有時您可能會希望或甚至需要分開這些動作,以便更精確地控制廣告內容的載入時間。例如,使用同意聲明管理平台或在使用者採取行動後要求廣告內容。
在本指南中,我們將探討 GPT 提供的機制,以便控管廣告內容的載入作業,並依需求擷取新的廣告內容。完整程式碼 都可以根據事件式請求 範例網頁。
控管廣告載入作業
根據預設,display() 方法的行為為
註冊、要求並將廣告素材顯示在廣告版位中。自動
您可以使用
PubAdsService.disableInitialLoad() 方法,增加圍繞地圖邊緣的邊框間距。
在停用初始載入功能的情況下,對 display() 的呼叫只會登錄廣告版位。直到使用者採取第二項動作,系統才會載入廣告內容。這樣一來,
能精準控制發出廣告請求的時機
為避免意外發出廣告請求,您必須呼叫 disableInitialLoad()
再啟用服務以及呼叫 display()。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="Request GPT ads based on events." />
<title>Event-based ad requests</title>
<script
async
src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"
crossorigin="anonymous"
></script>
<script>
window.googletag = window.googletag || { cmd: [] };
googletag.cmd.push(() => {
// Define the ad slot.
googletag
.defineSlot("/6355419/Travel", [728, 90], "div-for-slot")
.setTargeting("test", "event")
.addService(googletag.pubads());
// Disable initial load.
// This prevents GPT from automatically fetching ads when display is called.
googletag.pubads().disableInitialLoad();
googletag.enableServices();
});
</script>
<style></style>
</head>
<body>
<div id="div-for-slot" style="width: 300px; height: 250px"></div>
<script>
googletag.cmd.push(() => {
// Register the ad slot.
// An ad will not be fetched until refresh is called.
googletag.display("div-for-slot");
});
</script>
</body>
</html>在這個範例中,系統會停用初始載入,確保不會發出任何廣告請求
呼叫 display() 時就不會顯示廣告素材。時段已準備就緒
可以接受並顯示廣告,但只有在版位出現後,才會提出廣告請求
重新整理。
重新整理
PubAdsService.refresh() 方法可用來填入
版位或版位來放送新的廣告素材這個方法可用於
尚未載入任何內容 (因為 disableInitialLoad()),或用其他值取代
即可。不過,只有
凡是透過呼叫 display() 註冊的行為,都可重新整理。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="Request GPT ads based on events." />
<title>Event-based ad requests</title>
<script
async
src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"
crossorigin="anonymous"
></script>
<script>
window.googletag = window.googletag || { cmd: [] };
googletag.cmd.push(() => {
// Define the ad slot.
googletag
.defineSlot("/6355419/Travel", [728, 90], "div-for-slot")
.setTargeting("test", "event")
.addService(googletag.pubads());
// Disable initial load.
// This prevents GPT from automatically fetching ads when display is called.
googletag.pubads().disableInitialLoad();
googletag.enableServices();
});
</script>
<style></style>
</head>
<body>
<div id="div-for-slot" style="width: 300px; height: 250px"></div>
<button id="showAdButton">Show/Refresh Ad</button>
<script>
googletag.cmd.push(() => {
// Register the ad slot.
// An ad will not be fetched until refresh is called.
googletag.display("div-for-slot");
// Register click event handler.
document.getElementById("showAdButton").addEventListener("click", () => {
googletag.cmd.push(() => {
googletag.pubads().refresh();
});
});
});
</script>
</body>
</html>在本例中,使用者點按「顯示/重新整理廣告」時按鈕,
系統會呼叫 refresh() 方法。這會觸發要求,擷取新的廣告內容並載入已註冊的版位,覆寫任何先前存在的內容。
請注意,在上述範例中,呼叫 refresh() 方法時不會呼叫
參數,以便重新整理所有已註冊的廣告版位。
不過,您也可以將版位陣列傳遞至 refresh() 方法,藉此重新整理特定廣告版位。請參閱重新整理廣告版位
舉例來說
最佳做法
使用 refresh() 時,建議您提供一些最佳做法
遵守所有適用的原則
不要太快重新整理。
重新整理廣告版位過於頻繁,可能會導致廣告請求受到節流。為避免這種情況,請避免每 30 秒就重新整理一次時段。
避免對
clear()進行不必要的呼叫重新整理廣告版位時,請勿先呼叫
PubAdsService.clear()。這是不必要的,因為refresh()會取代指定版位的內容,無論 指出是否先前已載入任何廣告素材立即撥打clear()只有在呼叫refresh()之前,空白時段才會增加 不會向使用者顯示只重新整理可視廣告版位
使用
refresh()取代不可見的廣告版位內容 可能會大幅降低 Active View 率 ImpressionViewableEvent 可用於 決定廣告版位為可視的時間點,如下所示 範例:googletag.cmd.push(function() { var REFRESH_KEY = 'refresh'; var REFRESH_VALUE = 'true'; googletag.defineSlot('/6355419/Travel',[728, 90], 'div-for-slot') .setTargeting(REFRESH_KEY, REFRESH_VALUE) .setTargeting('test', 'event') .addService(googletag.pubads()); // Number of seconds to wait after the slot becomes viewable. var SECONDS_TO_WAIT_AFTER_VIEWABILITY = 60; googletag.pubads().addEventListener('impressionViewable', function(event) { var slot = event.slot; if (slot.getTargeting(REFRESH_KEY).indexOf(REFRESH_VALUE) > -1) { setTimeout(function() { googletag.pubads().refresh([slot]); }, SECONDS_TO_WAIT_AFTER_VIEWABILITY * 1000); } }); googletag.enableServices(); });