Adcontroller: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(18 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 11: | Zeile 11: | ||
Wenn lediglich redaktionelle Elemente derselben Seite asynchron nachladen werden (z.B. Bildergalerien ohne Page-Refresh), bietet der AdController zu diesem Zweck eine Callback-Funktion zum Nachladen der Anzeigenpositionen an. Hier können die Schritte aus Abschnitt [[#Single_Page_Applikation_(Kein_Pageload)| Single Page Applikation (Kein Pageload)]] ignoriert werden. Der Publisher verantwortet die Event-Bindung zum Triggern des Callback nach gemeinsamer Absprache mit iq digital ([[#Callback-Funktion_zum_Nachladen_der_Anzeigenpositionen| siehe Abschnitt Callback-Funktion zum Nachladen der Anzeigenpositionen]]). | Wenn lediglich redaktionelle Elemente derselben Seite asynchron nachladen werden (z.B. Bildergalerien ohne Page-Refresh), bietet der AdController zu diesem Zweck eine Callback-Funktion zum Nachladen der Anzeigenpositionen an. Hier können die Schritte aus Abschnitt [[#Single_Page_Applikation_(Kein_Pageload)| Single Page Applikation (Kein Pageload)]] ignoriert werden. Der Publisher verantwortet die Event-Bindung zum Triggern des Callback nach gemeinsamer Absprache mit iq digital ([[#Callback-Funktion_zum_Nachladen_der_Anzeigenpositionen| siehe Abschnitt Callback-Funktion zum Nachladen der Anzeigenpositionen]]). | ||
<div class="page-break"></div> | |||
===Hosting & Einbindung AdController=== | ===Hosting & Einbindung AdController=== | ||
Es bestehen zwei Möglichkeiten für das Hosting/Einbindung des AdController Script-Deployments auf Ihren Seiten: | Es bestehen zwei Möglichkeiten für das Hosting/Einbindung des AdController Script-Deployments auf Ihren Seiten: | ||
*Abruf des AC-Script-Deployments vom Web-Server des Seitenbetreibers (empfohlen) | |||
**Für das Hosting und den unmittelbaren Abruf des AC-Deployment vom iq-CDN wird eine direkte Implementierung des Adcontrollers über den Webserver des Seitenbetreibers empfohlen. Voraussetzung ist eine weiterhin flexible Anbindung des AC- Deployment als PRELIVE- und SANDBOX-Version (siehe "Auslieferungsmodus") durch den iq-Entwickler mittels iqdeployment-Parameter. Es gibt hierzu bereits unterschiedliche Umsetzungen im Einsatz, die wir gerne gemeinsam mit Ihnen abstimmen. | |||
*Abruf des AC-Script-Deployments von einem externen Web-Host der iq digital (AWS-CDN) | *Abruf des AC-Script-Deployments von einem externen Web-Host der iq digital (AWS-CDN) | ||
** | **Sollte die zuvor genannte Variante aus technisch-organisatorischen Gründen nicht möglich sein, bitte Kontakt mit uns aufnehmen. In Absprache kann in Ausnahmefällen hiervon abgewichen werden. Hosting und Abruf des AC-Deployment vom iq-CDN | ||
===Caching AdController=== | ===Caching AdController=== | ||
Zeile 45: | Zeile 46: | ||
var iqd_mode = (function () { | var iqd_mode = (function () { | ||
let mode = 'live'; | |||
const currentUrlSearchParams = new URLSearchParams(window.location.search); | |||
if (currentUrlSearchParams.has('iqdeployment')) { | |||
mode = currentUrlSearchParams.get('iqdeployment').replace(/\W/g, ''); | |||
} | |||
return mode; | |||
})(); | })(); | ||
Zeile 57: | Zeile 64: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div class="page-break"></div> | |||
====Einbindung auf einer responsive Seite (Beispiel Implementierung)==== | ====Einbindung auf einer responsive Seite (Beispiel Implementierung)==== | ||
<syntaxhighlight lang='html'> | <syntaxhighlight lang='html'> | ||
<script> | <script> | ||
function isDesktop() { | |||
var width = (window.innerWidth > 0) ? window.innerWidth : screen.width; | |||
return width >= 850; | |||
} | |||
function isMobileOrTablet() { | |||
return !isDesktop(); | |||
} | |||
function isTablet() { | |||
return isMobileOrTablet() && window.outerWidth >= 480 && window.hasOwnProperty('orientation'); | |||
} | |||
function isMobile() { | |||
return isMobileOrTablet() && !isTablet(); | |||
} | |||
function getPlatform() { | |||
if (isDesktop()) { | |||
return 'desktop'; | |||
} | |||
if (isTablet()) { | |||
return 'tablet'; | |||
} | |||
return 'mobile'; | |||
} | |||
function IQSLoader(url) { | |||
var script = document.createElement("script") | |||
script.type = "text/javascript"; | |||
script.src = url; | |||
document.getElementsByTagName("head")[0].appendChild(script); | |||
} | |||
var iqd_mode = (function () { | |||
let mode = 'live'; | |||
const currentUrlSearchParams = new URLSearchParams(window.location.search); | |||
if (currentUrlSearchParams.has('iqdeployment')) { | |||
mode = currentUrlSearchParams.get('iqdeployment').replace(/\W/g, ''); | |||
} | |||
return mode; | |||
})(); | |||
if (isDesktop()) { | |||
IQSLoader( | |||
"https://s3.eu-central-1.amazonaws.com/prod.iqdcontroller.iqdigital/[cdn_partnersite_Folgt_durch_iq]/" + | |||
iqd_mode + "/iqadcontroller.js.gz"); | |||
} else { | |||
IQSLoader( | |||
"https://s3.eu-central-1.amazonaws.com/prod.iqdcontroller.iqdigital/[cdn_partnersite_Folgt_durch_iq]/" + | |||
iqd_mode + "/iqadcontroller.js.gz"); | |||
} | |||
</script> | </script> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Zeile 114: | Zeile 132: | ||
(function () { | (function () { | ||
window.AdController = { | window.AdController = { | ||
i: null, // page info q: [], // render queue | i: null, // page info | ||
f: false, // is finalized s: false, // is staged | q: [], // render queue | ||
n: false, // is initialized r: null, // ready function c: [], // command queue | f: false, // is finalized | ||
s: false, // is staged | |||
n: false, // is initialized | |||
r: null, // ready function | |||
c: [], // command queue | |||
setPageInfo: function (i) { | setPageInfo: function (i) { | ||
window.AdController.i = i; | window.AdController.i = i; | ||
Zeile 156: | Zeile 178: | ||
Um unter Anderem die anzuwendende Konfiguration für die aktuelle Angebotsseite festzustellen, werden dem AdController über dieses Objekt notwendige Informationen des Seitenbetreibers übergeben. | Um unter Anderem die anzuwendende Konfiguration für die aktuelle Angebotsseite festzustellen, werden dem AdController über dieses Objekt notwendige Informationen des Seitenbetreibers übergeben. | ||
Das vom Seitenbetreiber bereitzustellende Mandanten-CMS-Objekt übermittelt die seitenspezifischen Informationen zur Auswahl der gültigen bzw. spezifischen AdController-Konfiguration und inventargerechten Anzeigenanforderung. | Das vom Seitenbetreiber bereitzustellende Mandanten-CMS-Objekt übermittelt die seitenspezifischen Informationen zur Auswahl der gültigen bzw. spezifischen AdController-Konfiguration und inventargerechten Anzeigenanforderung. | ||
<i><p>Code-Beispiel zur Umsetzung im <head>-Tag des Dokuments nach der AdController Einbindung:</p></i> | <i><p>Code-Beispiel zur Umsetzung im <head>-Tag des Dokuments nach der AdController Einbindung:</p></i> | ||
Zeile 186: | Zeile 207: | ||
Enthalten seitenspezifische Informationen für die erforderliche Inventarisierung der Publisher-Site im Ad Server und den AdRequest- URL-Builder zur Anforderungen der auf dieses Inventar gebuchten Anzeigen. Die Level-Informationen sind in Abhängigkeit der Ressort- bzw. Umfeld-Tiefen zu füllen insofern vermarktungsrelevant. | Enthalten seitenspezifische Informationen für die erforderliche Inventarisierung der Publisher-Site im Ad Server und den AdRequest- URL-Builder zur Anforderungen der auf dieses Inventar gebuchten Anzeigen. Die Level-Informationen sind in Abhängigkeit der Ressort- bzw. Umfeld-Tiefen zu füllen insofern vermarktungsrelevant. | ||
Beispiel: Wenn die Seite eine Rubrik 'Politik' hat und diese eine Unterrubrik ' | Beispiel: Wenn die Seite eine Rubrik 'Politik' hat und diese eine Unterrubrik 'Außenpolitik', dann wäre den Wert für level2:'politik' und für level3:'aussenpolitik' | ||
<span style="color:red;">'''Achtung:'''</span> Es fehlt absichtlich level1, da dieser Teil der Adunit von der iqdigital innerhalb des Adcontrollers festgelegt wird. | |||
====Schlüssel: isWrapperApp==== | ====Schlüssel: isWrapperApp==== | ||
Zeile 209: | Zeile 232: | ||
Alle Informationen im CMS-Objekt sind ausschließlich klein zu schreiben; Leerzeichen, Sonderzeichen und Umlaute sind nicht erlaubt. Die einzige Ausnahme ist das "_" Zeichen (Unterstrich/Underscore). | Alle Informationen im CMS-Objekt sind ausschließlich klein zu schreiben; Leerzeichen, Sonderzeichen und Umlaute sind nicht erlaubt. Die einzige Ausnahme ist das "_" Zeichen (Unterstrich/Underscore). | ||
FALSCH: Archäologie RICHTIG: archaeologie | FALSCH: Archäologie RICHTIG: archaeologie | FALSCH: Psychologie-Hirnforschung RICHTIG: psychologie_hirnforschung | ||
FALSCH: Psychologie-Hirnforschung RICHTIG: psychologie_hirnforschung | |||
<div class="page-break"></div> | <div class="page-break"></div> | ||
Zeile 265: | Zeile 286: | ||
<div class="page-break"></div> | <div class="page-break"></div> | ||
== | ==Anzeigen-Containermodell== | ||
Die Positionierung der Platzhaltercontainer der Anzeigen in der Publisher Seite erfolgt nach dem im Voraus abgestimmten Vertaggungsplan. | |||
Die eigentliche Integration der Container sollte dem folgenden Muster gemäß geschehen. | |||
<syntaxhighlight lang='html'> | |||
=== | <div class="iqdcontainer" data-placement="pos_[N U M M E R]" data-device="[D E V I C E T Y P E]"></div> | ||
</syntaxhighlight> | |||
Zur richtigen Identifizierung aller Platzhalter müssen folgende Informationen allen Platzhalter Div-Containern mitgegeben werden: | |||
# Die Klasse "'''iqdcontainer'''". Durch diese Klasse werden alle Divs Werbeplatzhalter gekennzeichnet. | |||
# Das Data Attribute "'''data-placement'''". Über dieses Data-Attribut können die jeweiligen Positionen in der Seite eindeutig erfasst werden. | |||
# Das Data Attribute "'''data-device'''". Über dieses Data-Attribut wird gekennzeichnet, ob der Werbeplatz für die Desktop, Mobile oder Tablet Werbeausspielung gedacht ist. Mögliche Werte: '''desktop | tablet | mobile''' | |||
=== | ===SonderPositionen=== | ||
====Header und Footer==== | |||
Alle Positionen im Footer und Header bekommen keine Zahl in "data-placement", sondern jeweils "pos_header" oder "pos_footer", wodurch sie eindeutig bestimmt sind. | |||
<syntaxhighlight lang='html'> | <syntaxhighlight lang='html'> | ||
=== | <div class="iqdcontainer" data-placement="pos_header" data-device="[D E V I C E T Y P E]"></div> | ||
<div class="iqdcontainer" data-placement="pos_footer" data-device="[D E V I C E T Y P E]"></div> | |||
</syntaxhighlight> | </syntaxhighlight> | ||
====AdController.finalize(..) | ==Anzeigenplatzierungen Signalfunktionen== | ||
===AdController.finalize(..)=== | |||
Die Web-Seite signalisiert dem AdController mit dem AdController.finalize-Aufruf, dass die Render-Phase abgeschlossen werden kann, da keine weiteren Anzeigen-Anforderungen von der Seite implementiert sind. In Einzelfällen kann es dazu kommen, dass die geplante AdController-Konfiguration für die aktuelle Seite von den tatsächlich implementierten Anzeigeplatzierungen abweicht. In diesem Fall werden die Abweichungen durch den AdController evaluiert, abgefangen und bei Bedarf protokolliert. Abweichungen können immer dann Auftreten, wenn für das betroffene Angebot keine spezifische $handle-Zuordnung geplant wurde. Das kann auch ein durch iq digital gewünschtes Szenario sein. | Die Web-Seite signalisiert dem AdController mit dem AdController.finalize-Aufruf, dass die Render-Phase abgeschlossen werden kann, da keine weiteren Anzeigen-Anforderungen von der Seite implementiert sind. In Einzelfällen kann es dazu kommen, dass die geplante AdController-Konfiguration für die aktuelle Seite von den tatsächlich implementierten Anzeigeplatzierungen abweicht. In diesem Fall werden die Abweichungen durch den AdController evaluiert, abgefangen und bei Bedarf protokolliert. Abweichungen können immer dann Auftreten, wenn für das betroffene Angebot keine spezifische $handle-Zuordnung geplant wurde. Das kann auch ein durch iq digital gewünschtes Szenario sein. | ||
Zeile 336: | Zeile 330: | ||
<div class="page-break"></div> | <div class="page-break"></div> | ||
===IQDComplete() - Page-Load Signal=== | |||
Sobald alle Inhalte auf der Seite (auch verzögert dynamisch geladener Content), die zur Höhenberechnung der Seite beitragen, geladen worden sind, soll ein Signal an iq digital gesendet werden: | Sobald alle Inhalte auf der Seite (auch verzögert dynamisch geladener Content), die zur Höhenberechnung der Seite beitragen, geladen worden sind, soll ein Signal an iq digital gesendet werden: |