Adcontroller: Unterschied zwischen den Versionen

Die Seite wurde neu angelegt: „==Implementierung AdController-Deployment (API + Konfiguration)== ===Allgemeine Informationen=== Der AdController stellt in Form eines Script-Deployments ein…“
 
Keine Bearbeitungszusammenfassung
 
(28 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 7: Zeile 7:
Die Implementierung des Script-Deployments soll für die optimierte Bereitstellung der Dienstekonfiguration sowie Steuerbarkeit der prozessualen Code-Ausführung im <head>-Tag der Seite erfolgen. Das Script funktioniert zu 100% asynchron und verwendet keinen blockierenden Script-Code. Kann aus technischen Gründen nicht auf das <head>-Tag zugegriffen werden, ist eine Implementierung im Dokument-body noch vor dem erstem AdRequest zu prüfen (bitte stimmen Sie sich in diesem Fall gesondert mit iq digital ab). Die Initialisierung des AdControllers (AC) soll frühstmöglich erfolgen und ist Voraussetzung für die Anzeigeaufrufe (AdController.render-Aufrufe) zur Anzeigenanforderung. Sollte das nicht möglich sein bzw. Advertising-Technologien in Abhängigkeit von eintretenden Events (z.B. nach Page-Load) vorausgesetzt sein, stimmen Sie sich bitte gesondert mit iq digital ab.
Die Implementierung des Script-Deployments soll für die optimierte Bereitstellung der Dienstekonfiguration sowie Steuerbarkeit der prozessualen Code-Ausführung im <head>-Tag der Seite erfolgen. Das Script funktioniert zu 100% asynchron und verwendet keinen blockierenden Script-Code. Kann aus technischen Gründen nicht auf das <head>-Tag zugegriffen werden, ist eine Implementierung im Dokument-body noch vor dem erstem AdRequest zu prüfen (bitte stimmen Sie sich in diesem Fall gesondert mit iq digital ab). Die Initialisierung des AdControllers (AC) soll frühstmöglich erfolgen und ist Voraussetzung für die Anzeigeaufrufe (AdController.render-Aufrufe) zur Anzeigenanforderung. Sollte das nicht möglich sein bzw. Advertising-Technologien in Abhängigkeit von eintretenden Events (z.B. nach Page-Load) vorausgesetzt sein, stimmen Sie sich bitte gesondert mit iq digital ab.


Diese Dokumentation geht vorab davon aus, dass es sich bei Ihrem Angebot um eine klassische Webeanwendung handelt, die aus mehreren untereinander verlinkten HTML-Dokumenten besteht. D.h. bei initialem Aufruf einer Content-Seite sowie Navigation zu anderen Seiten wird auch immer ein Browser-Refresh ausgeführt. Sollten Sie im Rahmen einer "Single-Page-Webanwendung" ein davon abweichendes Konzept implementieren, wenden Sie sich bitte an iq digital, da in diesem Fall ein anderes als das hier beschriebene Vorgehen zur Implementierung des AdControllers erforderlich wird.
Es sollte im Voraus geklärt werden, ob es sich bei Ihrem Angebot um eine klassische Webeanwendung handelt, die aus mehreren untereinander verlinkten HTML-Dokumenten besteht (d.h. bei initialem Aufruf einer Content-Seite sowie Navigation zu anderen Seiten wird auch immer ein Browser-Refresh ausgeführt). Sollten Sie im Rahmen einer "Single-Page-Webanwendung" ein davon abweichendes Konzept implementieren, sollten Sie zusätzlich die Schritte im Abschnitt [[#Single_Page_Applikation_(Kein_Pageload)| Single Page Applikation (Kein Pageload)]] befolgen.


Die Voraussetzung zum Browser-Refresh gilt nicht für integrierte Umfelder, die redaktionelle Elemente derselben Seite event- getriggert asynchron nachladen (z.B. Bildergalerien ohne Page-Refresh). Der AdController bietet zu diesem Zweck eine Callback- Funktion zum Nachladen der Anzeigenpositionen an. Der Publisher verantwortet die Event-Bindung zum Triggern des Callback nach gemeinsamer Absprache mit iq digital. Mehr dazu unter "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]]).


Es gibt 2 Varianten für die Implementierung des AdControllers auf Ihren Seiten:
<div class="page-break"></div>
===Hosting & Einbindung AdController===


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)
**Hosting und Abruf des AC-Deployment vom iq-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  
*Abruf des AC-Script-Deployments vom Web-Server des Seitenbetreibers (empfohlen)
**Alternativ zum Hosting und 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.


===Caching AdController===
===Caching AdController===
Zeile 30: Zeile 33:
<p>Der Wert für das Makro <b>[cdn_partnersite_Folgt_durch_iq]</b> wird von iq zur Verfügung gestellt.</p>
<p>Der Wert für das Makro <b>[cdn_partnersite_Folgt_durch_iq]</b> wird von iq zur Verfügung gestellt.</p>
</i>
</i>
====Einbindung auf einer nicht-reponsive Seite====


<syntaxhighlight lang='html'>
<syntaxhighlight lang='html'>
Zeile 41: Zeile 46:


     var iqd_mode = (function () {
     var iqd_mode = (function () {
        var dm = window.location.href.toLowerCase();
      let mode = 'live';
        return (dm.indexOf('iqdeployment=') > 1) ? dm.split('iqdeployment=')[1].split('&')[0] : 'live';
      const currentUrlSearchParams = new URLSearchParams(window.location.search);
 
      if (currentUrlSearchParams.has('iqdeployment')) {
        mode = currentUrlSearchParams.get('iqdeployment').replace(/\W/g, '');
      }
 
      return mode;
     })();
     })();


Zeile 51: Zeile 62:


</script>
</script>
</syntaxhighlight>
<div class="page-break"></div>
====Einbindung auf einer responsive Seite (Beispiel Implementierung)====
<syntaxhighlight lang='html'>
<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>
</syntaxhighlight>


====AdController proxy====
<syntaxhighlight lang='html'>
<script>
<script>
     (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 97: 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 110: Zeile 190:
         level3: "",
         level3: "",
         level4: "",
         level4: "",
        isWrapperApp: [true,false],
         keywords: "[Erfolgt_mit_Abstimmung_iq]",
         keywords: "[Erfolgt_mit_Abstimmung_iq]",
         tma: "[Erfolgt_mit_Abstimmung_iq]",
         tma: "[Erfolgt_mit_Abstimmung_iq]",
         platform: "[desktop | tablet | mobile]"
         platform: "[desktop | tablet | mobile]",
        userData: {
          hashedEmail: "[Hashed Email siehe Erläuterung unten]"
        }
     };
     };
</script>
</script>
Zeile 126: Zeile 210:


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 'Außenpoltik', dann wäre den Wert für level2:'politik' und für level3:'aussenpolitik'
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====
 
Anhand von diesem Wert sollte die Information an uns übermittelt werden, ob es sich bei der Ausspielung um eine Wrapper App handelt oder nicht. Möglich Werte hierzu sind true oder false.


====Schlüssel: keywords====
====Schlüssel: keywords====
Zeile 140: Zeile 230:
Hier sind folgende Werte möglich: desktop, tablet oder mobile
Hier sind folgende Werte möglich: desktop, tablet oder mobile
Je nachdem auf welchen Device der User unterwegs ist sollte der entsprechende Wert übergeben werden.
Je nachdem auf welchen Device der User unterwegs ist sollte der entsprechende Wert übergeben werden.
====Schlüssel: userData====
"userData" ist das Sammelobjekt für alle nötigen UserInformationen sowohl im  Rahmen von Clean Room Cases als auch unserer ID-Lösungen.
=====Schlüssel: userData:hashedEmail=====
Vorherige Normalisierung und Übergabe der via SHA256 erstellten Hashes der E-Mail Adressen über Publisher-CMS-/Mandantenobjekt (AdController) nach User Anmeldung/ Newsletter Registrierung.
<syntaxhighlight lang='javascript'>
//Beispiel eines SHA256 Hashes
const userData:{
        hashedEmail: "21bd991f8b25a57075dd2489b4eebda1a5d956bbf52f961fe5289c6d5a0a2b5c"
}
</syntaxhighlight>
'''Normalisierung''':
Vor dem Hashing der E-Mail-Adresse Normalisierung der Zeichenfolge, indem „überflüssige“ Zeichen entfernt werden:
# Entfernen führender und nachgestellter Leerzeichen
# Alle ASCII-Zeichen in Kleinbuchstaben umwandeln
# Entfernen von "." (ASCII-Code 46) aus dem Benutzernamen der E-Mail-Adresse
  à z.B. jane.smith@gmail.com wird normalisiert zu janesmith@gmail.com
# Entfernen von "+" (ASCII-Code 43) und alle nachfolgenden Zeichen aus dem Benutzernamen der E-Mail-  Adresse
  à  z.B. janesmith+test@gmail.com wird normalisiert zu janesmith@gmail.com


===Zeichenlimitierung===
===Zeichenlimitierung===
Zeile 145: Zeile 263:
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 200: Zeile 317:


<div class="page-break"></div>
<div class="page-break"></div>
==Anzeigenplatzierungen==


===Signale & Anzeigestruktur===
==Anzeigen-Containermodell==


====AdController.render(..)====
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.


Nach Initialisierung des AdControllers ist dieser bereit für das Absetzen einer Anzeigenanforderung an den AdServer. Auslöser einer Anzeigenanforderung ist die jeweilige Anzeigenplatzierung mit entsprechender AdController.render-Methode. In der Render-Phase des AdControllers werden die Level-Informationen des CMS-Mandanten-Objects an den AdRequest-URL-Builder des AdControllers übergeben und mit weiteren Konfigurationsparametern des Deployments zu einem AdServer-konformen Anzeigen-Request zusammengeführt und versendet.
<syntaxhighlight lang='html'>


Welche Anzeigenplatzierungen für das jeweilige Layout Ihrer Website umzusetzen ist, ist im Vorfeld mit iq digital hinsichtlich Vermarktungsmöglichkeiten zu besprechen. Die Anzeigenplatzierung ist durch ein eindeutiges DOM-Element mit exemplarischer id=iqadtileT I L E N U M B E R in Ihrem HTML-MarkUp zu implementieren. Der übergebene Positionsschlüssel innerhalb des AdCongroller.render-Aufrufs bewirkt eine asynchrone Einbindung via DOM-Insertion der gelieferten Anzeige im Zielcontainer
<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>


Bitte fügen Sie keinen weitere DOM oder Script-Bestandteile innerhalb dieser Anzeigencontainer ein. Die Anzeigen-Kennzeichnung der Werbeplatzierungen erfolgt optimalerweise durch iq digital. Gerne besprechen wir diesen Punkt gemeinsam mit Ihnen.
</syntaxhighlight>


====TopBanner Konstrukt====
Zur richtigen Identifizierung aller Platzhalter müssen folgende Informationen allen Platzhalter Div-Containern mitgegeben werden:


Anzeigenplatzierung TopBanner Konstrukt, beinhaltet die erste Position iqadtile1 und beide Sky Postionen (bitte 1:1 genauso implementieren)
# 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'>
<!-- please use this construct for the top positions (iqadtile1), the sky right part (iqadtile2) & the left sky part (iqadtile20) -->
<div id="iqd_mainAd">
    <div id="iqd_align_Ad">
        <div id="iqd_topAd">
            <div id="iqadtile1">
                <script>
                    AdController.render('iqadtile1');
                </script>
            </div>
        </div>
        <div id="iqd_leftAd">
            <div id="iqadtile20">
                <script>
                    AdController.render('iqadtile20');
                </script>
            </div>
        </div>
        <div id="iqd_rightAd">
            <div id="iqadtile2">
                <script>
                    AdController.render('iqadtile2');
                </script>
            </div>
        </div>
    </div>
</div>
</syntaxhighlight>


====weitere Anzeigepositionen====
<div class="iqdcontainer" data-placement="pos_header" data-device="[D E V I C E T Y P E]"></div>


Alle weitere Platzierungen nach folgender Muster umsetzen
<div class="iqdcontainer" data-placement="pos_footer" data-device="[D E V I C E T Y P E]"></div>


<syntaxhighlight lang='html'>
<!-- please use this pattern for all other positions -->
<div id="iqadtileT I L E N U M B E R">
    <script>
        if (typeof AdController !== 'undefined') {
          AdController.render('iqadtileT I L E N U M B E R');
        }
    </script>
</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 271: Zeile 361:


<div class="page-break"></div>
<div class="page-break"></div>
====IQDComplete() - Page-Load Signal====
===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:
Zeile 292: Zeile 382:
Ziel ist die Sicherstellung einer realen, dem LIVE-Betrieb entsprechenden Umsetzung des AdControllers auf einem parallelen System, welches LIVE gestellt wird, wenn das finale SetUp und Testing von beiden Seiten abgeschlossen wurde.
Ziel ist die Sicherstellung einer realen, dem LIVE-Betrieb entsprechenden Umsetzung des AdControllers auf einem parallelen System, welches LIVE gestellt wird, wenn das finale SetUp und Testing von beiden Seiten abgeschlossen wurde.


Die Bereitstellung des AdControllers für die Web-Seiten wird über verschiedene Kanäle erfolgen. Änderungen und weitere Entwicklungen im Rahmen von Konfigurationsanpassungen oder Technologieerweiterung für eine Seite erfolgen bei iq digital über ein Preview-Deployment. Die derzeitige Einbindung des AdControllers sieht bereits einen dynamischen Switch zwischen LIVE- und PRELIVE- Version des AdControllers vor, die auf Clientseite mit einer GET-Parameter-Erweiterung in der URL gesteuert werden kann
Die Bereitstellung des AdControllers für die Web-Seiten wird über verschiedene Kanäle erfolgen. Änderungen und weitere Entwicklungen im Rahmen von Konfigurationsanpassungen oder Technologieerweiterung für eine Seite erfolgen bei iq digital über ein Preview-Deployment. Die derzeitige Einbindung des AdControllers sieht bereits einen dynamischen Switch zwischen LIVE- und PRELIVE- Version des AdControllers vor, die auf Clientseite mit einer GET-Parameter-Erweiterung in der URL gesteuert werden kann "https://www.domain.de?iqdeployment=prelive".
"http://www.domain.de?iqdeployment=prelive".
 
<b>Die CMP, die auf die Liveseite verwendet wird, sollte außerdem auch auf die Testseite implementiert sein.</b>


==Fluide/Responsive Webanwendungen==
==Fluide/Responsive Webanwendungen==
Zeile 302: Zeile 393:
Entsprechende Anforderungen und Konzepte sind bereits im Vermarktungsportfolio von iq digital im Einsatz, gerne Leisten wir Hilfestellung im Rahmen bereits aktiver Implementierungen.
Entsprechende Anforderungen und Konzepte sind bereits im Vermarktungsportfolio von iq digital im Einsatz, gerne Leisten wir Hilfestellung im Rahmen bereits aktiver Implementierungen.


==Callback- Funktion zum Nachladen der Anzeigenpositionen==
==Single Page Applikation (Kein Pageload)==
 
Der Mandant muss im Falle einer SPA Implementierung beim Seitennavigieren dafür sorgen, dass:
 
* cmsObject muss neu gesetzt werden
* AdController muss reinitialisiert wird
* Render Funktionen müssen erneut aufgerufen werden
* eine postMessage() Nachricht an uns geschickt wird ([[#Callback-Funktion_zum_Nachladen_der_Anzeigenpositionen| siehe Abschnitt Callback-Funktion zum Nachladen der Anzeigenpositionen]])
 
 
==Callback-Funktion zum Nachladen der Anzeigenpositionen==


Folgende postMessage muss an iq gesendet werden, sobald dies mit iq schon abgestimmt wurde, um ein Nachladen der Anzeigen anzustoßen:
Folgende postMessage muss an iq gesendet werden, sobald dies mit iq schon abgestimmt wurde, um ein Nachladen der Anzeigen anzustoßen:
Zeile 311: Zeile 412:
</script>
</script>
</syntaxhighlight>
</syntaxhighlight>
[[Kategorie:Adcontroller]][[Kategorie:Ad Technology]]
[[en:Adcontroller]]