Einbau des Google Mobile Ads SDK: Unterschied zwischen den Versionen
| (45 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
Diese Dokumentation dient dazu den Einbau des Google Mobile Ads SDK (GMA SDK) und die Werbeintegration der iq digital zu erklären. Sie geht dabei auf notwendige und wichtige Eigenheiten ein und versucht übliche Missverständnisse aufzuklären. | |||
Die Dokumentation beginnt dabei mit dem GMA SDK und allgemeinen Informationen, welche für alle Werbeformen gelten, die in der App laufen sollen. Darauf folgen Werbeform spezifische Erklärungen und zum Abschluss werden werbeform spezifische Events erklärt, welche die App berücksichtigen muss. | |||
==Offizielle Dokumentation zum Google Mobile Ads SDK== | ==Offizielle Dokumentation zum Google Mobile Ads SDK== | ||
Das Google Mobile Ads SDK (GMA SDK) bringt alles mit, was für eine Werbeausspielung in nativen Apps benötigt wird. | Das Google Mobile Ads SDK (GMA SDK) bringt alles mit, was für eine Werbeausspielung in nativen Apps benötigt wird. | ||
| Zeile 5: | Zeile 9: | ||
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started] | [https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started] | ||
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK | [https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started] | ||
===Download des Google Mobile Ads SDK=== | ===Download des Google Mobile Ads SDK=== | ||
| Zeile 55: | Zeile 59: | ||
:;plattform:Das Betriebsystem, also ''ios'' oder ''android'' | :;plattform:Das Betriebsystem, also ''ios'' oder ''android'' | ||
:;gerätetyp:Der Gerätetyp, also '''phone''' oder ''tablet'' | :;gerätetyp:Der Gerätetyp, also '''phone''' oder ''tablet'' | ||
;level2:Dies ist die Bezeichnung einer Rubrik der App, z.B. ''politik'' | ;level2:Dies ist die Bezeichnung einer Rubrik der App oder der Startseite, z.B. ''politik'', ''openingpage'' | ||
;level3 (usw.):Dies ist die Bezeichnung für eine Unterrubrik, z.B. im Falle von ''politik'' als level2 wäre ''ausland'' eine Unterrubrik für level3. Level4 und höher sind weitere tiefere Verzweigungen der App, diese werden im Normalfall nicht | ;level3 (usw.):Dies ist die Bezeichnung für eine Unterrubrik, z.B. im Falle von ''politik'' als level2 wäre ''ausland'' eine Unterrubrik für level3. Level4 und höher sind weitere tiefere Verzweigungen der App, diese werden im Normalfall nicht als Adunits angelegt. Solche Seiten würden dann über das übergeordnete level3 vermarktet werden. Beispiel: Eine Seite ''politik/ausland/usa'' ist zu speziell, um sie einzeln zu vermarkte. In so einem Fall ist es sinnvoll, dass sie nur bis level3, also als ''politik/ausland'', vertaggt wird. | ||
;seitentyp:In Apps mit Banner-Anzeigen (z.B. News Apps) bezeichnet ''seitentyp'' die unterschiedlichen Seitentypen, also ob es sich z.B. um eine Übersichts-, Artikel- oder Bildergalerieseite handelt. Übliche Werte dafür sind ''homepage'', ''index'', ''artikel'', ''bildgal''. In Apps mit Fullscreen-Anzeigen (z.B. epaper oder Zeitungs Apps) werden mit ''seitentyp'' die unterschiedlichen Anzeigeplätze innerhalb der Rubrik gemeint, also ob es sich z.B. erste, zweite oder dritte Swipe Anzeige handelt. Übliche Werte sind | ;seitentyp:In Apps mit Banner-Anzeigen (z.B. News Apps) bezeichnet ''seitentyp'' die unterschiedlichen Seitentypen, also ob es sich z.B. um eine Übersichts-, Artikel- oder Bildergalerieseite handelt. Übliche Werte dafür sind ''homepage'', ''index'', ''artikel'', ''bildgal''. In Apps mit Fullscreen-Anzeigen (z.B. epaper oder Zeitungs Apps) werden mit ''seitentyp'' die unterschiedlichen Anzeigeplätze innerhalb der Rubrik gemeint, also ob es sich z.B. erste, zweite oder dritte Swipe Anzeige handelt. Übliche Werte sind ''swipe_1'', ''swipe_2'', ''swipe_3'' usw. | ||
====Beispiel für die fiktive Rheinischer Kurier News App mit Banner-Anzeigen:==== | ====Beispiel für die fiktive Rheinischer Kurier News App mit Banner-Anzeigen:==== | ||
| Zeile 72: | Zeile 76: | ||
*/183/Rheinischer_Kurier_epaper_app_ios_tablet | */183/Rheinischer_Kurier_epaper_app_ios_tablet | ||
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad | */183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad | ||
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage | */183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1 | ||
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1 | */183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1 | ||
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2 | */183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2 | ||
| Zeile 112: | Zeile 116: | ||
;doc:Die Bezeichnung des Seitentyps. Gültige Werte sind homepage, index, artikel, bildgal | ;doc:Die Bezeichnung des Seitentyps. Gültige Werte sind homepage, index, artikel, bildgal | ||
;iqadtype:Die Angabe der Plattform. Gültige Werte sind online, mew, app, amp | ;iqadtype:Die Angabe der Plattform. Gültige Werte sind online, mew, app, amp | ||
;appver:Die Bezeichnung der Appversions-Nummer | ;appver:Die Bezeichnung der Appversions-Nummer. Beispiel: Version 4.01 sollte dann appver=4_01 sein. Es sollte eine sinnvolle Bezeichnung sein, damit im Problemfall eine bestimmte Appversion von der Vermarktung ausgeschlossen werden kann. | ||
Angaben welche Keywords für welche Platzierung verwendet werden sollen, finden sich in der creative_sizes_and_keywords.xlsc Tabelle, die von der iq digital zu Projektstart zur Verfügung gestellt wird. | Angaben welche Keywords für welche Platzierung verwendet werden sollen, finden sich in der creative_sizes_and_keywords.xlsc Tabelle, die von der iq digital zu Projektstart zur Verfügung gestellt wird. | ||
| Zeile 119: | Zeile 123: | ||
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting | *https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting | ||
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting | *https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting | ||
===Content-Url Parameter im Adrequest=== | |||
Damit programmatische Partner (z.B. Adexchange, Headerbidding oder Backfill) möglichst hoch um eine Werbeplatzierung bieten, muss dieser App-Werbeplatzierung mitgeteilt werden, zu welcher stationären Webseite sie tatsächlich gehört. Dies geschieht über den content-url Parameter im Adrequest. Hier ist als Wert die URL der Webseite zu übergeben, die möglichst genau zu dem Inhalt in der App passt. Beispiel: Ein App-Artikel sollte im content-url Parameter auf seinen stationären Webartikel verlinken, eine App Startseite auf die Homepage usw. | |||
Das GMA SDK besitzt dazu eine setContentUrl-Funktion. | |||
Dies wird hier genauer beschrieben: | |||
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url | |||
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url | |||
===Politische Werbung in nativen Apps=== | |||
Politische Kampagnen benötigen vom Benutzer einen Consent. Damit der Adserver dies korrekt berücksichtigen kann, benötigt er eine Information durch die App. Der genaue Workflow funktioniert wie folgt: | |||
====Workflow==== | |||
#Benutzer entscheidet in der CMP, ob er Consent für poltische Werbung erteilt | |||
#Die App wertet den Consent aus und prüft, ob für politische Werbung Consent erteilt worden ist | |||
#Wurde Consent erteilt, fügt die App bei jedem Adrequest das Keyword '''''political_ad''''' zu den '''''kw''''' Keywords hinzu (siehe [[#Keywords (Anhängen von Key-Value-Paaren)]]). | |||
#Der Adserver sieht das Keyword '''''political_ad''''' im Adrequest und hat jetzt die Möglichkeit eine politische Kampagne, die auf das Keyword getargetet ist, auszuliefern (Dies ist aber kein Zwang, er kann auch andere Kampagnen ausliefern) | |||
#Wird vom Adserver eine politische Kampagne ausgespielt, wird ein Creative an die App ausgeliefert, welches eine zusätzlich Einstellung im Template trägt. Dies führt dazu, dass das Creative der App mitteilt, dass sich in dem betroffenen Werbeslot tatsächlich eine politische Kampagne befindet und die App darauf mit Wechsel der Anzeigenkennzeichnung reagieren sollte. Die Mitteilung erfolgt über ein '''''political_ad'''''-Event an die App (siehe [[#Dokumentation der iq digital App Events]]) | |||
#Die App empfängt das '''''political_ad'''''-Event und kann darauf reagieren. Die iqdigital empfiehlt, dass die Anzeigenkennzeichnung über dem betroffenen Werbeslot sich ändert zu '''''Politische Anzeige''''' und es einen Link auf die sogenannte Political Ad Transparency Url zu der Kampagne gibt (welche im Event übergeben wird). '''Wichtig:''' Die Verantwortlichkeit, ob und wie durch die App auf das '''''political_ad'''''-Event reagiert wird, liegt beim Publisher und der App. | |||
====Aufgaben der App (Aufgaben des Publishers)==== | |||
*Die App wertet den Consent String aus und prüft, ob der Benutzer Consent für politische Werbung gegeben hat | |||
*Im Falle von Consent für politische Werbung fügt die App das Keyword '''''political_ad''''' dem CustomTargeting hinzu (zum Key '''''kw''''') | |||
*Wenn die App ein '''''political_ad'''''-Event durch ein Creative erhält, sollte sie darauf reagieren, zum Beispiel wie oben beschrieben die Anzeigenkennzeichnung abändern auf '''''Politische Anzeige'''''. Wenn im Event zusätzlich als data-String eine URL übergeben wird, sollte neben Anzeigenkennzeichnung '''''Politische Anzeige''''' ein Link mit der URL und dem Text '''''(mehr dazu)''''' erscheinen. Ein Klick auf den Link öffnet dann die Url, wo der Benutzer weiterführende Informationen zur Art der Kampagne erhält. | |||
====Aufgaben des Werbetemplates==== | |||
*Im Adserver muss eine politische Kampagne entsprechend konfiguriert werden. Dies geschieht über Einstellungen im Werbetemplate. Dabei wird markiert, dass das Creative zu einer politischen Kampagne gehört und die PoliticalAdTransparencyUrl eingestellt (für den ''(mehr dazu)'' Link) | |||
*Das Werbetemplate wertet intern aus, ob es eine politische Anzeige ist | |||
*Im Fall einer politischen Anzeige sendet es ein Event an die App mit Key '''''political_ad''''' und der eingestellten PoliticalAdTransparencyUrl als "data"-String. | |||
====Beispiel ==== | |||
Angefügt ist ein Beispiel einer Testkampagne, welche als politische Anzeige markiert worden ist. | |||
[[Datei:Political_Ad_Testkampagne.png|800px|thumbnail|Darstellung einer politischen Kampagne aus dem Web (rechts im Bild)]] | |||
====Testschaltung==== | |||
Im Debug Easteregg können folgende folgendes Keyword (Komma separiert) eingestellt werden: | |||
<pre>iqdtests,political_ad_test</pre> | |||
Damit läuft auf iqadtile3 und/oder iqadtile4 ein oranges Test Ad mit dem Text "POLITICAL AD Test 320x320". Dies erscheint allerdings nur, wenn die App gemäß der Anleitung für politische Werbung das Keyword political_ad nach Auswertung des Consents übermittelt. | |||
===Debugging=== | ===Debugging=== | ||
| Zeile 148: | Zeile 189: | ||
Die iq digital steht für Fragen und Kommentare gerne zur Verfügung. Sollten wir einmal nicht weiterhelfen können, ist es uns möglich einen Entwickler von Google als Ansprechpartner in die Diskussion mit einzubeziehen. | Die iq digital steht für Fragen und Kommentare gerne zur Verfügung. Sollten wir einmal nicht weiterhelfen können, ist es uns möglich einen Entwickler von Google als Ansprechpartner in die Diskussion mit einzubeziehen. | ||
====Tim Lohmann (Mobile Developer Ad Technology)==== | ====Mary Habibi (Web Developer)==== | ||
;E-Mail:mary.habibi@iqdigital.de | |||
====Tim Lohmann (Senior Mobile Developer Ad Technology)==== | |||
;E-Mail:tim.lohmann@iqdigital.de | ;E-Mail:tim.lohmann@iqdigital.de | ||
| Zeile 297: | Zeile 340: | ||
==Dokumentation der iq digital App Events== | ==Dokumentation der iq digital App Events== | ||
Die App Events bestehen aus dem Namen und einem "data"-String | Die Werbetemplates der iq digital senden in bestimmten Situationen Events an die App. Die App muss auf diese Events reagieren und gemäß der folgenden Spezifikation den Werbecontainer verändern. Die App Events bestehen dabei immer aus dem Namen und einem "data"-String. | ||
===Wichtige Links in der GMA SDK Dokumentation=== | |||
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events] | |||
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events] | |||
===setsize – Event=== | ===setsize – Event=== | ||
| Zeile 303: | Zeile 350: | ||
Der "data"-String hat das Format '''"width:height"''' für eine sofortige Änderung der Größe. | Der "data"-String hat das Format '''"width:height"''' für eine sofortige Änderung der Größe. | ||
====Parameter==== | |||
Die Parameter werden mit einem Doppelpunkt von einander getrennt. | Die Parameter werden mit einem Doppelpunkt von einander getrennt. | ||
;width:Die neue Breite des Adviews in Pixel (Device-Independent-Pixel) als ganze Zahl. | ;width:Die neue Breite des Adviews in Pixel (Device-Independent-Pixel) als ganze Zahl. | ||
;height:Die neue Höhe des Adviews in Pixel (Device-Independent-Pixel) als ganze Zahl. | ;height:Die neue Höhe des Adviews in Pixel (Device-Independent-Pixel) als ganze Zahl. | ||
{{Warnung|text=Ausnahme: Für eine Anpassung auf die maximal verfügbare Breite oder Höhe wird der Wert '''max''' verwendet.}} | {{Warnung|text=Ausnahme: Für eine Anpassung auf die maximal verfügbare Breite oder Höhe wird der Wert '''max''' verwendet. Mit maximaler verfügbare Breite bzw. Höhe ist im Normalfall die Displaybreite bzw. -Höhe gemeint. Sollte eine App hier zwingende Abweichungen haben, wie einen notwendigen Rand, muss dies unbedingt '''frühzeitig mit iq digital''' besprochen werden.}} | ||
Beispielaufrufe: | ====Beispielaufrufe:==== | ||
;<nowiki>"setsize","320:80"</nowiki>:Adview bekommt die neue Größe 320x80 Pixel | ;<nowiki>"setsize","320:80"</nowiki>:Adview bekommt die neue Größe 320x80 Pixel | ||
;<nowiki>"setsize","320:240"</nowiki>:Adview bekommt die neue Größe 320x240 Pixel | ;<nowiki>"setsize","320:240"</nowiki>:Adview bekommt die neue Größe 320x240 Pixel | ||
| Zeile 318: | Zeile 365: | ||
Das noad-Event wird von den Werbetemplates der iq digital aufgerufen, um der App zu signalisieren, dass für die Platzierung keine Buchung vorliegt und die App die Werbeplatzierung '''und die zugehörige Anzeigenkennzeichnung''' entfernen soll. | Das noad-Event wird von den Werbetemplates der iq digital aufgerufen, um der App zu signalisieren, dass für die Platzierung keine Buchung vorliegt und die App die Werbeplatzierung '''und die zugehörige Anzeigenkennzeichnung''' entfernen soll. | ||
Der "data"-String hat für dieses Event keine Bedeutung und kann ignoriert werden. | Der "data"-String hat für dieses Event keine Bedeutung und kann ignoriert werden. Da das AppEventListener Interface von Google eine @NonNull Annotation für data hat, wird beim noad-Event einfach der Wert "noad" für data übergeben, da der leere String von Google als null umgewandelt wird. | ||
===policial_ad - Event=== | |||
Das policial_ad-Event wird von den Werbetemplates der iq digital aufgerufen, um der App zu signalisieren, dass auf dieser Platzierung eine Politische Kampagen existiert und sie darauf reagieren soll (siehe [[#Politische Werbung in nativen Apps]]). | |||
Der "data"-String enthält die PolticialAdTransparencyUrl, sofern sie in der Kampagne im Adserver definiert wurde. | |||
====Beispielaufruf:==== | |||
;<nowiki>"policial_ad","https://www.diesisteinekampagne.de/transparency.html"</nowiki>: Die App sollte gemäß der Empfehlung "Politische Anzeige [https://www.diesisteinekampagne.de/transparency.html (mehr dazu)]" als Anzeigenkennzeichnung für die Platzierung benutzen. | |||
[[Kategorie:Ad Technology]][[Kategorie:APP]] | [[Kategorie:Ad Technology]][[Kategorie:APP]] | ||
[[en:Integration of the Google Mobile Ads SDK]] | [[en:Integration of the Google Mobile Ads SDK]] | ||