<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://docs.iqd-ao.de/en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tlohmann</id>
	<title>Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://docs.iqd-ao.de/en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tlohmann"/>
	<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Special:Contributions/Tlohmann"/>
	<updated>2026-04-30T07:38:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=111</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=111"/>
		<updated>2026-02-18T10:27:21Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* Political advertising in native apps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Political advertising in native apps===&lt;br /&gt;
Political campaigns require consent from the user. In order for the ad server to take this into account correctly, it needs information from the app. The exact workflow works as follows:&lt;br /&gt;
&lt;br /&gt;
====Workflow====&lt;br /&gt;
#The user decides in the CMP whether to give consent for political advertising&lt;br /&gt;
#The app evaluates the consent and checks whether consent has been given for political advertising&lt;br /&gt;
#If consent has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to the &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039; keywords for each ad request (see [[#Keywords (attachment of key-value pairs)]]).&lt;br /&gt;
#The ad server sees the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; in the ad request and now has the option of delivering a political campaign targeted to that keyword (however, this is not mandatory; it can also deliver other campaigns).&lt;br /&gt;
#When an ad server plays a political campaign, a creative is delivered to the app that contains an additional setting in the template. This causes the creative to inform the app that the advertising slot in question actually contains a political campaign and that the app should respond by changing the ad label. The message is sent to the app via a political_ad event (see [[#Documentation of the iq digital app events]]).&lt;br /&gt;
#The app receives the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event and can respond to it. iqdigital recommends that the ad label above the affected ad slot be changed to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039; and that there be a link to the Political Ad Transparency URL for the campaign (which is passed in the event). &#039;&#039;&#039;Important&#039;&#039;&#039;: The responsibility for whether and how the app responds to the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event lies with the publisher and the app.&lt;br /&gt;
&lt;br /&gt;
====App tasks (publisher tasks)====&lt;br /&gt;
*The app evaluates the consent string and checks whether the user has given consent for political advertising.&lt;br /&gt;
*If consent for political advertising has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to CustomTargeting (to key &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039;).&lt;br /&gt;
*When the app receives a &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event through a creative, it should respond to it, for example by changing the ad label to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;, as described above. If a URL is also passed as a data-String in the event, a link with the URL and the text &#039;&#039;&#039;&#039;&#039;(mehr dazu)&#039;&#039;&#039;&#039;&#039; should appear next to the ad label &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;. Clicking on the link then opens the URL, where the user can find further information about the type of campaign.&lt;br /&gt;
&lt;br /&gt;
====Tasks of the advertising template====&lt;br /&gt;
*A political campaign must be configured accordingly in the ad server. This is done via settings in the advertising template. This involves marking that the creative belongs to a political campaign and setting the PoliticalAdTransparencyUrl (for the &amp;quot;(mehr dazu)&amp;quot; link).&lt;br /&gt;
*The advertising template internally evaluates whether it is a political ad.&lt;br /&gt;
*In the case of a political advertisement, it sends an event to the app with the key political_ad and the set PoliticalAdTransparencyUrl as the &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
Attached is an example of a test campaign that has been marked as a political ad.&lt;br /&gt;
[[File:Political_Ad_Testkampagne.png|800px|thumbnail|Display of a political campaign from the web (right side of the image)]]&lt;br /&gt;
&lt;br /&gt;
====Test placement====&lt;br /&gt;
The following keywords (separated by commas) can be set in the debug Easter egg:&lt;br /&gt;
&amp;lt;pre&amp;gt;iqdtests,political_ad_test&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will run an orange test ad on iqadtile1, iqadtile3 and/or iqadtile4 with the text &amp;quot;POLITICAL AD Test 320x320.&amp;quot; However, this will only appear if the app transmits the keyword political_ad after evaluating consent in accordance with the instructions for political advertising.&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
&lt;br /&gt;
===policial_ad event===&lt;br /&gt;
The policial_ad event is called by iq digital&#039;s advertising templates to signal to the app that a political campaign exists on this placement and that it should respond to it (see [[#Political advertising in native apps]]).&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string contains the PolticialAdTransparencyUrl, provided it has been defined in the campaign in the ad server.&lt;br /&gt;
&lt;br /&gt;
====Example call:====&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;policial_ad&amp;quot;,&amp;quot;https://www.diesisteinekampagne.de/transparency.html&amp;quot;&amp;lt;/nowiki&amp;gt;:The app should use &amp;quot;Politische Anzeige [https://www.diesisteinekampagne.de/transparency.html (mehr dazu)]&amp;quot; as the ad label for the placement, as recommended&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=110</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=110"/>
		<updated>2026-02-18T10:26:35Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* policial_ad event */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Political advertising in native apps===&lt;br /&gt;
Political campaigns require consent from the user. In order for the ad server to take this into account correctly, it needs information from the app. The exact workflow works as follows:&lt;br /&gt;
&lt;br /&gt;
====Workflow====&lt;br /&gt;
#The user decides in the CMP whether to give consent for political advertising&lt;br /&gt;
#The app evaluates the consent and checks whether consent has been given for political advertising&lt;br /&gt;
#If consent has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to the &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039; keywords for each ad request (see [[#Keywords (attachment of key-value pairs)]]).&lt;br /&gt;
#The ad server sees the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; in the ad request and now has the option of delivering a political campaign targeted to that keyword (however, this is not mandatory; it can also deliver other campaigns).&lt;br /&gt;
#When an ad server plays a political campaign, a creative is delivered to the app that contains an additional setting in the template. This causes the creative to inform the app that the advertising slot in question actually contains a political campaign and that the app should respond by changing the ad label. The message is sent to the app via a political_ad event (see [[#Documentation of the iq digital app events]]).&lt;br /&gt;
#The app receives the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event and can respond to it. iqdigital recommends that the ad label above the affected ad slot be changed to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039; and that there be a link to the Political Ad Transparency URL for the campaign (which is passed in the event). &#039;&#039;&#039;Important&#039;&#039;&#039;: The responsibility for whether and how the app responds to the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event lies with the publisher and the app.&lt;br /&gt;
&lt;br /&gt;
====App tasks (publisher tasks)====&lt;br /&gt;
*The app evaluates the consent string and checks whether the user has given consent for political advertising.&lt;br /&gt;
*If consent for political advertising has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to CustomTargeting (to key &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039;).&lt;br /&gt;
*When the app receives a &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event through a creative, it should respond to it, for example by changing the ad label to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;, as described above. If a URL is also passed as a data-String in the event, a link with the URL and the text &#039;&#039;&#039;&#039;&#039;(more info)&#039;&#039;&#039;&#039;&#039; should appear next to the ad label &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;. Clicking on the link then opens the URL, where the user can find further information about the type of campaign.&lt;br /&gt;
&lt;br /&gt;
====Tasks of the advertising template====&lt;br /&gt;
*A political campaign must be configured accordingly in the ad server. This is done via settings in the advertising template. This involves marking that the creative belongs to a political campaign and setting the PoliticalAdTransparencyUrl (for the &amp;quot;(more info)&amp;quot; link).&lt;br /&gt;
*The advertising template internally evaluates whether it is a political ad.&lt;br /&gt;
*In the case of a political advertisement, it sends an event to the app with the key political_ad and the set PoliticalAdTransparencyUrl as the &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
Attached is an example of a test campaign that has been marked as a political ad.&lt;br /&gt;
[[File:Political_Ad_Testkampagne.png|800px|thumbnail|Display of a political campaign from the web (right side of the image)]]&lt;br /&gt;
&lt;br /&gt;
====Test placement====&lt;br /&gt;
The following keywords (separated by commas) can be set in the debug Easter egg:&lt;br /&gt;
&amp;lt;pre&amp;gt;iqdtests,political_ad_test&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will run an orange test ad on iqadtile1, iqadtile3 and/or iqadtile4 with the text &amp;quot;POLITICAL AD Test 320x320.&amp;quot; However, this will only appear if the app transmits the keyword political_ad after evaluating consent in accordance with the instructions for political advertising.&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
&lt;br /&gt;
===policial_ad event===&lt;br /&gt;
The policial_ad event is called by iq digital&#039;s advertising templates to signal to the app that a political campaign exists on this placement and that it should respond to it (see [[#Political advertising in native apps]]).&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string contains the PolticialAdTransparencyUrl, provided it has been defined in the campaign in the ad server.&lt;br /&gt;
&lt;br /&gt;
====Example call:====&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;policial_ad&amp;quot;,&amp;quot;https://www.diesisteinekampagne.de/transparency.html&amp;quot;&amp;lt;/nowiki&amp;gt;:The app should use &amp;quot;Politische Anzeige [https://www.diesisteinekampagne.de/transparency.html (mehr dazu)]&amp;quot; as the ad label for the placement, as recommended&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=109</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=109"/>
		<updated>2026-02-18T10:25:53Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* Documentation of the iq digital app events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Political advertising in native apps===&lt;br /&gt;
Political campaigns require consent from the user. In order for the ad server to take this into account correctly, it needs information from the app. The exact workflow works as follows:&lt;br /&gt;
&lt;br /&gt;
====Workflow====&lt;br /&gt;
#The user decides in the CMP whether to give consent for political advertising&lt;br /&gt;
#The app evaluates the consent and checks whether consent has been given for political advertising&lt;br /&gt;
#If consent has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to the &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039; keywords for each ad request (see [[#Keywords (attachment of key-value pairs)]]).&lt;br /&gt;
#The ad server sees the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; in the ad request and now has the option of delivering a political campaign targeted to that keyword (however, this is not mandatory; it can also deliver other campaigns).&lt;br /&gt;
#When an ad server plays a political campaign, a creative is delivered to the app that contains an additional setting in the template. This causes the creative to inform the app that the advertising slot in question actually contains a political campaign and that the app should respond by changing the ad label. The message is sent to the app via a political_ad event (see [[#Documentation of the iq digital app events]]).&lt;br /&gt;
#The app receives the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event and can respond to it. iqdigital recommends that the ad label above the affected ad slot be changed to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039; and that there be a link to the Political Ad Transparency URL for the campaign (which is passed in the event). &#039;&#039;&#039;Important&#039;&#039;&#039;: The responsibility for whether and how the app responds to the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event lies with the publisher and the app.&lt;br /&gt;
&lt;br /&gt;
====App tasks (publisher tasks)====&lt;br /&gt;
*The app evaluates the consent string and checks whether the user has given consent for political advertising.&lt;br /&gt;
*If consent for political advertising has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to CustomTargeting (to key &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039;).&lt;br /&gt;
*When the app receives a &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event through a creative, it should respond to it, for example by changing the ad label to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;, as described above. If a URL is also passed as a data-String in the event, a link with the URL and the text &#039;&#039;&#039;&#039;&#039;(more info)&#039;&#039;&#039;&#039;&#039; should appear next to the ad label &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;. Clicking on the link then opens the URL, where the user can find further information about the type of campaign.&lt;br /&gt;
&lt;br /&gt;
====Tasks of the advertising template====&lt;br /&gt;
*A political campaign must be configured accordingly in the ad server. This is done via settings in the advertising template. This involves marking that the creative belongs to a political campaign and setting the PoliticalAdTransparencyUrl (for the &amp;quot;(more info)&amp;quot; link).&lt;br /&gt;
*The advertising template internally evaluates whether it is a political ad.&lt;br /&gt;
*In the case of a political advertisement, it sends an event to the app with the key political_ad and the set PoliticalAdTransparencyUrl as the &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
Attached is an example of a test campaign that has been marked as a political ad.&lt;br /&gt;
[[File:Political_Ad_Testkampagne.png|800px|thumbnail|Display of a political campaign from the web (right side of the image)]]&lt;br /&gt;
&lt;br /&gt;
====Test placement====&lt;br /&gt;
The following keywords (separated by commas) can be set in the debug Easter egg:&lt;br /&gt;
&amp;lt;pre&amp;gt;iqdtests,political_ad_test&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will run an orange test ad on iqadtile1, iqadtile3 and/or iqadtile4 with the text &amp;quot;POLITICAL AD Test 320x320.&amp;quot; However, this will only appear if the app transmits the keyword political_ad after evaluating consent in accordance with the instructions for political advertising.&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
&lt;br /&gt;
===policial_ad event===&lt;br /&gt;
The policial_ad event is called by iq digital&#039;s advertising templates to signal to the app that a political campaign exists on this placement and that it should respond to it (see #Political advertising in native apps).&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string contains the PolticialAdTransparencyUrl, provided it has been defined in the campaign in the ad server.&lt;br /&gt;
&lt;br /&gt;
====Example call:====&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;policial_ad&amp;quot;,&amp;quot;https://www.diesisteinekampagne.de/transparency.html&amp;quot;&amp;lt;/nowiki&amp;gt;:The app should use &amp;quot;Politische Anzeige [https://www.diesisteinekampagne.de/transparency.html (mehr dazu)]&amp;quot; as the ad label for the placement, as recommended&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=108</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=108"/>
		<updated>2026-02-18T10:22:14Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* App tasks (publisher tasks) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Political advertising in native apps===&lt;br /&gt;
Political campaigns require consent from the user. In order for the ad server to take this into account correctly, it needs information from the app. The exact workflow works as follows:&lt;br /&gt;
&lt;br /&gt;
====Workflow====&lt;br /&gt;
#The user decides in the CMP whether to give consent for political advertising&lt;br /&gt;
#The app evaluates the consent and checks whether consent has been given for political advertising&lt;br /&gt;
#If consent has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to the &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039; keywords for each ad request (see [[#Keywords (attachment of key-value pairs)]]).&lt;br /&gt;
#The ad server sees the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; in the ad request and now has the option of delivering a political campaign targeted to that keyword (however, this is not mandatory; it can also deliver other campaigns).&lt;br /&gt;
#When an ad server plays a political campaign, a creative is delivered to the app that contains an additional setting in the template. This causes the creative to inform the app that the advertising slot in question actually contains a political campaign and that the app should respond by changing the ad label. The message is sent to the app via a political_ad event (see [[#Documentation of the iq digital app events]]).&lt;br /&gt;
#The app receives the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event and can respond to it. iqdigital recommends that the ad label above the affected ad slot be changed to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039; and that there be a link to the Political Ad Transparency URL for the campaign (which is passed in the event). &#039;&#039;&#039;Important&#039;&#039;&#039;: The responsibility for whether and how the app responds to the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event lies with the publisher and the app.&lt;br /&gt;
&lt;br /&gt;
====App tasks (publisher tasks)====&lt;br /&gt;
*The app evaluates the consent string and checks whether the user has given consent for political advertising.&lt;br /&gt;
*If consent for political advertising has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to CustomTargeting (to key &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039;).&lt;br /&gt;
*When the app receives a &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event through a creative, it should respond to it, for example by changing the ad label to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;, as described above. If a URL is also passed as a data-String in the event, a link with the URL and the text &#039;&#039;&#039;&#039;&#039;(more info)&#039;&#039;&#039;&#039;&#039; should appear next to the ad label &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;. Clicking on the link then opens the URL, where the user can find further information about the type of campaign.&lt;br /&gt;
&lt;br /&gt;
====Tasks of the advertising template====&lt;br /&gt;
*A political campaign must be configured accordingly in the ad server. This is done via settings in the advertising template. This involves marking that the creative belongs to a political campaign and setting the PoliticalAdTransparencyUrl (for the &amp;quot;(more info)&amp;quot; link).&lt;br /&gt;
*The advertising template internally evaluates whether it is a political ad.&lt;br /&gt;
*In the case of a political advertisement, it sends an event to the app with the key political_ad and the set PoliticalAdTransparencyUrl as the &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
Attached is an example of a test campaign that has been marked as a political ad.&lt;br /&gt;
[[File:Political_Ad_Testkampagne.png|800px|thumbnail|Display of a political campaign from the web (right side of the image)]]&lt;br /&gt;
&lt;br /&gt;
====Test placement====&lt;br /&gt;
The following keywords (separated by commas) can be set in the debug Easter egg:&lt;br /&gt;
&amp;lt;pre&amp;gt;iqdtests,political_ad_test&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will run an orange test ad on iqadtile1, iqadtile3 and/or iqadtile4 with the text &amp;quot;POLITICAL AD Test 320x320.&amp;quot; However, this will only appear if the app transmits the keyword political_ad after evaluating consent in accordance with the instructions for political advertising.&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=107</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=107"/>
		<updated>2026-02-18T10:19:40Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* Test placement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Political advertising in native apps===&lt;br /&gt;
Political campaigns require consent from the user. In order for the ad server to take this into account correctly, it needs information from the app. The exact workflow works as follows:&lt;br /&gt;
&lt;br /&gt;
====Workflow====&lt;br /&gt;
#The user decides in the CMP whether to give consent for political advertising&lt;br /&gt;
#The app evaluates the consent and checks whether consent has been given for political advertising&lt;br /&gt;
#If consent has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to the &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039; keywords for each ad request (see [[#Keywords (attachment of key-value pairs)]]).&lt;br /&gt;
#The ad server sees the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; in the ad request and now has the option of delivering a political campaign targeted to that keyword (however, this is not mandatory; it can also deliver other campaigns).&lt;br /&gt;
#When an ad server plays a political campaign, a creative is delivered to the app that contains an additional setting in the template. This causes the creative to inform the app that the advertising slot in question actually contains a political campaign and that the app should respond by changing the ad label. The message is sent to the app via a political_ad event (see [[#Documentation of the iq digital app events]]).&lt;br /&gt;
#The app receives the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event and can respond to it. iqdigital recommends that the ad label above the affected ad slot be changed to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039; and that there be a link to the Political Ad Transparency URL for the campaign (which is passed in the event). &#039;&#039;&#039;Important&#039;&#039;&#039;: The responsibility for whether and how the app responds to the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event lies with the publisher and the app.&lt;br /&gt;
&lt;br /&gt;
====App tasks (publisher tasks)====&lt;br /&gt;
*The app evaluates the consent string and checks whether the user has given consent for political advertising.&lt;br /&gt;
*If consent for political advertising has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to CustomTargeting (to key &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039;).&lt;br /&gt;
*When the app receives a &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event through a creative, it should respond to it, for example by changing the ad label to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;, as described above. If a URL is also passed as a value in the event, a link with the URL and the text &#039;&#039;&#039;&#039;&#039;(more info)&#039;&#039;&#039;&#039;&#039; should appear next to the ad label &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;. Clicking on the link then opens the URL, where the user can find further information about the type of campaign.&lt;br /&gt;
&lt;br /&gt;
====Tasks of the advertising template====&lt;br /&gt;
*A political campaign must be configured accordingly in the ad server. This is done via settings in the advertising template. This involves marking that the creative belongs to a political campaign and setting the PoliticalAdTransparencyUrl (for the &amp;quot;(more info)&amp;quot; link).&lt;br /&gt;
*The advertising template internally evaluates whether it is a political ad.&lt;br /&gt;
*In the case of a political advertisement, it sends an event to the app with the key political_ad and the set PoliticalAdTransparencyUrl as the &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
Attached is an example of a test campaign that has been marked as a political ad.&lt;br /&gt;
[[File:Political_Ad_Testkampagne.png|800px|thumbnail|Display of a political campaign from the web (right side of the image)]]&lt;br /&gt;
&lt;br /&gt;
====Test placement====&lt;br /&gt;
The following keywords (separated by commas) can be set in the debug Easter egg:&lt;br /&gt;
&amp;lt;pre&amp;gt;iqdtests,political_ad_test&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will run an orange test ad on iqadtile1, iqadtile3 and/or iqadtile4 with the text &amp;quot;POLITICAL AD Test 320x320.&amp;quot; However, this will only appear if the app transmits the keyword political_ad after evaluating consent in accordance with the instructions for political advertising.&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=106</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=106"/>
		<updated>2026-02-18T10:18:39Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* App tasks (publisher tasks) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Political advertising in native apps===&lt;br /&gt;
Political campaigns require consent from the user. In order for the ad server to take this into account correctly, it needs information from the app. The exact workflow works as follows:&lt;br /&gt;
&lt;br /&gt;
====Workflow====&lt;br /&gt;
#The user decides in the CMP whether to give consent for political advertising&lt;br /&gt;
#The app evaluates the consent and checks whether consent has been given for political advertising&lt;br /&gt;
#If consent has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to the &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039; keywords for each ad request (see [[#Keywords (attachment of key-value pairs)]]).&lt;br /&gt;
#The ad server sees the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; in the ad request and now has the option of delivering a political campaign targeted to that keyword (however, this is not mandatory; it can also deliver other campaigns).&lt;br /&gt;
#When an ad server plays a political campaign, a creative is delivered to the app that contains an additional setting in the template. This causes the creative to inform the app that the advertising slot in question actually contains a political campaign and that the app should respond by changing the ad label. The message is sent to the app via a political_ad event (see [[#Documentation of the iq digital app events]]).&lt;br /&gt;
#The app receives the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event and can respond to it. iqdigital recommends that the ad label above the affected ad slot be changed to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039; and that there be a link to the Political Ad Transparency URL for the campaign (which is passed in the event). &#039;&#039;&#039;Important&#039;&#039;&#039;: The responsibility for whether and how the app responds to the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event lies with the publisher and the app.&lt;br /&gt;
&lt;br /&gt;
====App tasks (publisher tasks)====&lt;br /&gt;
*The app evaluates the consent string and checks whether the user has given consent for political advertising.&lt;br /&gt;
*If consent for political advertising has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to CustomTargeting (to key &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039;).&lt;br /&gt;
*When the app receives a &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event through a creative, it should respond to it, for example by changing the ad label to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;, as described above. If a URL is also passed as a value in the event, a link with the URL and the text &#039;&#039;&#039;&#039;&#039;(more info)&#039;&#039;&#039;&#039;&#039; should appear next to the ad label &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;. Clicking on the link then opens the URL, where the user can find further information about the type of campaign.&lt;br /&gt;
&lt;br /&gt;
====Tasks of the advertising template====&lt;br /&gt;
*A political campaign must be configured accordingly in the ad server. This is done via settings in the advertising template. This involves marking that the creative belongs to a political campaign and setting the PoliticalAdTransparencyUrl (for the &amp;quot;(more info)&amp;quot; link).&lt;br /&gt;
*The advertising template internally evaluates whether it is a political ad.&lt;br /&gt;
*In the case of a political advertisement, it sends an event to the app with the key political_ad and the set PoliticalAdTransparencyUrl as the &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
Attached is an example of a test campaign that has been marked as a political ad.&lt;br /&gt;
[[File:Political_Ad_Testkampagne.png|800px|thumbnail|Display of a political campaign from the web (right side of the image)]]&lt;br /&gt;
&lt;br /&gt;
====Test placement====&lt;br /&gt;
The following keywords (separated by commas) can be set in the debug Easter egg:&lt;br /&gt;
&lt;br /&gt;
This will run an orange test ad on iqadtile1, iqadtile3 and/or iqadtile4 with the text &amp;quot;POLITICAL AD Test 320x320.&amp;quot; However, this will only appear if the app transmits the keyword political_ad after evaluating consent in accordance with the instructions for political advertising.&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=105</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=105"/>
		<updated>2026-02-18T10:18:16Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* Political advertising in native apps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Political advertising in native apps===&lt;br /&gt;
Political campaigns require consent from the user. In order for the ad server to take this into account correctly, it needs information from the app. The exact workflow works as follows:&lt;br /&gt;
&lt;br /&gt;
====Workflow====&lt;br /&gt;
#The user decides in the CMP whether to give consent for political advertising&lt;br /&gt;
#The app evaluates the consent and checks whether consent has been given for political advertising&lt;br /&gt;
#If consent has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to the &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039; keywords for each ad request (see [[#Keywords (attachment of key-value pairs)]]).&lt;br /&gt;
#The ad server sees the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; in the ad request and now has the option of delivering a political campaign targeted to that keyword (however, this is not mandatory; it can also deliver other campaigns).&lt;br /&gt;
#When an ad server plays a political campaign, a creative is delivered to the app that contains an additional setting in the template. This causes the creative to inform the app that the advertising slot in question actually contains a political campaign and that the app should respond by changing the ad label. The message is sent to the app via a political_ad event (see [[#Documentation of the iq digital app events]]).&lt;br /&gt;
#The app receives the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event and can respond to it. iqdigital recommends that the ad label above the affected ad slot be changed to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039; and that there be a link to the Political Ad Transparency URL for the campaign (which is passed in the event). &#039;&#039;&#039;Important&#039;&#039;&#039;: The responsibility for whether and how the app responds to the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event lies with the publisher and the app.&lt;br /&gt;
&lt;br /&gt;
====App tasks (publisher tasks)====&lt;br /&gt;
*The app evaluates the consent string and checks whether the user has given consent for political advertising.&lt;br /&gt;
*If consent for political advertising has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to CustomTargeting (to key &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039;).&lt;br /&gt;
*When the app receives a &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event through a creative, it should respond to it, for example by changing the ad label to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;, as described above. If a URL is also passed as a value in the event, a link with the URL and the text &#039;&#039;&#039;&#039;&#039;(more info)&amp;quot; should appear next to the ad label &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;. Clicking on the link then opens the URL, where the user can find further information about the type of campaign.&lt;br /&gt;
&lt;br /&gt;
====Tasks of the advertising template====&lt;br /&gt;
*A political campaign must be configured accordingly in the ad server. This is done via settings in the advertising template. This involves marking that the creative belongs to a political campaign and setting the PoliticalAdTransparencyUrl (for the &amp;quot;(more info)&amp;quot; link).&lt;br /&gt;
*The advertising template internally evaluates whether it is a political ad.&lt;br /&gt;
*In the case of a political advertisement, it sends an event to the app with the key political_ad and the set PoliticalAdTransparencyUrl as the &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
Attached is an example of a test campaign that has been marked as a political ad.&lt;br /&gt;
[[File:Political_Ad_Testkampagne.png|800px|thumbnail|Display of a political campaign from the web (right side of the image)]]&lt;br /&gt;
&lt;br /&gt;
====Test placement====&lt;br /&gt;
The following keywords (separated by commas) can be set in the debug Easter egg:&lt;br /&gt;
&lt;br /&gt;
This will run an orange test ad on iqadtile1, iqadtile3 and/or iqadtile4 with the text &amp;quot;POLITICAL AD Test 320x320.&amp;quot; However, this will only appear if the app transmits the keyword political_ad after evaluating consent in accordance with the instructions for political advertising.&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=104</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=104"/>
		<updated>2026-02-18T10:17:42Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* Political advertising in native apps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Political advertising in native apps===&lt;br /&gt;
Political campaigns require consent from the user. In order for the ad server to take this into account correctly, it needs information from the app. The exact workflow works as follows:&lt;br /&gt;
&lt;br /&gt;
====Workflow====&lt;br /&gt;
#The user decides in the CMP whether to give consent for political advertising&lt;br /&gt;
#The app evaluates the consent and checks whether consent has been given for political advertising&lt;br /&gt;
#If consent has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to the &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039; keywords for each ad request (see #[[Keywords (attachment of key-value pairs)]]).&lt;br /&gt;
#The ad server sees the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; in the ad request and now has the option of delivering a political campaign targeted to that keyword (however, this is not mandatory; it can also deliver other campaigns).&lt;br /&gt;
#When an ad server plays a political campaign, a creative is delivered to the app that contains an additional setting in the template. This causes the creative to inform the app that the advertising slot in question actually contains a political campaign and that the app should respond by changing the ad label. The message is sent to the app via a political_ad event (see [[#Documentation of the iq digital app events]]).&lt;br /&gt;
#The app receives the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event and can respond to it. iqdigital recommends that the ad label above the affected ad slot be changed to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039; and that there be a link to the Political Ad Transparency URL for the campaign (which is passed in the event). &#039;&#039;&#039;Important&#039;&#039;&#039;: The responsibility for whether and how the app responds to the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event lies with the publisher and the app.&lt;br /&gt;
&lt;br /&gt;
====App tasks (publisher tasks)====&lt;br /&gt;
*The app evaluates the consent string and checks whether the user has given consent for political advertising.&lt;br /&gt;
*If consent for political advertising has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to CustomTargeting (to key &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039;).&lt;br /&gt;
*When the app receives a &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event through a creative, it should respond to it, for example by changing the ad label to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;, as described above. If a URL is also passed as a value in the event, a link with the URL and the text &#039;&#039;&#039;&#039;&#039;(more info)&amp;quot; should appear next to the ad label &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;. Clicking on the link then opens the URL, where the user can find further information about the type of campaign.&lt;br /&gt;
&lt;br /&gt;
====Tasks of the advertising template====&lt;br /&gt;
*A political campaign must be configured accordingly in the ad server. This is done via settings in the advertising template. This involves marking that the creative belongs to a political campaign and setting the PoliticalAdTransparencyUrl (for the &amp;quot;(more info)&amp;quot; link).&lt;br /&gt;
*The advertising template internally evaluates whether it is a political ad.&lt;br /&gt;
*In the case of a political advertisement, it sends an event to the app with the key political_ad and the set PoliticalAdTransparencyUrl as the &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
Attached is an example of a test campaign that has been marked as a political ad.&lt;br /&gt;
[[File:Political_Ad_Testkampagne.png|800px|thumbnail|Display of a political campaign from the web (right side of the image)]]&lt;br /&gt;
&lt;br /&gt;
====Test placement====&lt;br /&gt;
The following keywords (separated by commas) can be set in the debug Easter egg:&lt;br /&gt;
&lt;br /&gt;
This will run an orange test ad on iqadtile1, iqadtile3 and/or iqadtile4 with the text &amp;quot;POLITICAL AD Test 320x320.&amp;quot; However, this will only appear if the app transmits the keyword political_ad after evaluating consent in accordance with the instructions for political advertising.&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=103</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=103"/>
		<updated>2026-02-18T10:16:50Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Political advertising in native apps===&lt;br /&gt;
Political campaigns require consent from the user. In order for the ad server to take this into account correctly, it needs information from the app. The exact workflow works as follows:&lt;br /&gt;
&lt;br /&gt;
====Workflow====&lt;br /&gt;
#The user decides in the CMP whether to give consent for political advertising&lt;br /&gt;
#The app evaluates the consent and checks whether consent has been given for political advertising&lt;br /&gt;
#If consent has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to the &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039; keywords for each ad request (see #Keywords (Appending Key-Value Pairs)).&lt;br /&gt;
#The ad server sees the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; in the ad request and now has the option of delivering a political campaign targeted to that keyword (however, this is not mandatory; it can also deliver other campaigns).&lt;br /&gt;
#When an ad server plays a political campaign, a creative is delivered to the app that contains an additional setting in the template. This causes the creative to inform the app that the advertising slot in question actually contains a political campaign and that the app should respond by changing the ad label. The message is sent to the app via a political_ad event (see [[#Documentation of the iq digital app events]]).&lt;br /&gt;
#The app receives the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event and can respond to it. iqdigital recommends that the ad label above the affected ad slot be changed to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039; and that there be a link to the Political Ad Transparency URL for the campaign (which is passed in the event). &#039;&#039;&#039;Important&#039;&#039;&#039;: The responsibility for whether and how the app responds to the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event lies with the publisher and the app.&lt;br /&gt;
&lt;br /&gt;
====App tasks (publisher tasks)====&lt;br /&gt;
*The app evaluates the consent string and checks whether the user has given consent for political advertising.&lt;br /&gt;
*If consent for political advertising has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to CustomTargeting (to key &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039;).&lt;br /&gt;
*When the app receives a &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event through a creative, it should respond to it, for example by changing the ad label to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;, as described above. If a URL is also passed as a value in the event, a link with the URL and the text &#039;&#039;&#039;&#039;&#039;(more info)&amp;quot; should appear next to the ad label &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;. Clicking on the link then opens the URL, where the user can find further information about the type of campaign.&lt;br /&gt;
&lt;br /&gt;
====Tasks of the advertising template====&lt;br /&gt;
*A political campaign must be configured accordingly in the ad server. This is done via settings in the advertising template. This involves marking that the creative belongs to a political campaign and setting the PoliticalAdTransparencyUrl (for the &amp;quot;(more info)&amp;quot; link).&lt;br /&gt;
*The advertising template internally evaluates whether it is a political ad.&lt;br /&gt;
*In the case of a political advertisement, it sends an event to the app with the key political_ad and the set PoliticalAdTransparencyUrl as the &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
Attached is an example of a test campaign that has been marked as a political ad.&lt;br /&gt;
[[File:Political_Ad_Testkampagne.png|800px|thumbnail|Display of a political campaign from the web (right side of the image)]]&lt;br /&gt;
&lt;br /&gt;
====Test placement====&lt;br /&gt;
The following keywords (separated by commas) can be set in the debug Easter egg:&lt;br /&gt;
&lt;br /&gt;
This will run an orange test ad on iqadtile1, iqadtile3 and/or iqadtile4 with the text &amp;quot;POLITICAL AD Test 320x320.&amp;quot; However, this will only appear if the app transmits the keyword political_ad after evaluating consent in accordance with the instructions for political advertising.&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=102</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=102"/>
		<updated>2026-02-18T10:16:19Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* Political advertising in native apps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Political advertising in native apps===&lt;br /&gt;
Political campaigns require consent from the user. In order for the ad server to take this into account correctly, it needs information from the app. The exact workflow works as follows:&lt;br /&gt;
&lt;br /&gt;
====Workflow====&lt;br /&gt;
#The user decides in the CMP whether to give consent for political advertising&lt;br /&gt;
#The app evaluates the consent and checks whether consent has been given for political advertising&lt;br /&gt;
#If consent has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to the &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039; keywords for each ad request (see #Keywords (Appending Key-Value Pairs)).&lt;br /&gt;
#The ad server sees the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; in the ad request and now has the option of delivering a political campaign targeted to that keyword (however, this is not mandatory; it can also deliver other campaigns).&lt;br /&gt;
#When an ad server plays a political campaign, a creative is delivered to the app that contains an additional setting in the template. This causes the creative to inform the app that the advertising slot in question actually contains a political campaign and that the app should respond by changing the ad label. The message is sent to the app via a political_ad event (see [[#Documentation of the iq digital app events]]).&lt;br /&gt;
#The app receives the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event and can respond to it. iqdigital recommends that the ad label above the affected ad slot be changed to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039; and that there be a link to the Political Ad Transparency URL for the campaign (which is passed in the event). &#039;&#039;&#039;Important&#039;&#039;&#039;: The responsibility for whether and how the app responds to the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event lies with the publisher and the app.&lt;br /&gt;
&lt;br /&gt;
===App tasks (publisher tasks)===&lt;br /&gt;
*The app evaluates the consent string and checks whether the user has given consent for political advertising.&lt;br /&gt;
*If consent for political advertising has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to CustomTargeting (to key &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039;).&lt;br /&gt;
*When the app receives a &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event through a creative, it should respond to it, for example by changing the ad label to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;, as described above. If a URL is also passed as a value in the event, a link with the URL and the text &#039;&#039;&#039;&#039;&#039;(more info)&amp;quot; should appear next to the ad label &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;. Clicking on the link then opens the URL, where the user can find further information about the type of campaign.&lt;br /&gt;
&lt;br /&gt;
===Tasks of the advertising template===&lt;br /&gt;
*A political campaign must be configured accordingly in the ad server. This is done via settings in the advertising template. This involves marking that the creative belongs to a political campaign and setting the PoliticalAdTransparencyUrl (for the &amp;quot;(more info)&amp;quot; link).&lt;br /&gt;
*The advertising template internally evaluates whether it is a political ad.&lt;br /&gt;
*In the case of a political advertisement, it sends an event to the app with the key political_ad and the set PoliticalAdTransparencyUrl as the &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
Attached is an example of a test campaign that has been marked as a political ad.&lt;br /&gt;
[[File:Political_Ad_Testkampagne.png|800px|thumbnail|Display of a political campaign from the web (right side of the image)]]&lt;br /&gt;
&lt;br /&gt;
====Test placement====&lt;br /&gt;
The following keywords (separated by commas) can be set in the debug Easter egg:&lt;br /&gt;
&lt;br /&gt;
This will run an orange test ad on iqadtile1, iqadtile3 and/or iqadtile4 with the text &amp;quot;POLITICAL AD Test 320x320.&amp;quot; However, this will only appear if the app transmits the keyword political_ad after evaluating consent in accordance with the instructions for political advertising.&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=101</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=101"/>
		<updated>2026-02-18T10:15:31Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Political advertising in native apps===&lt;br /&gt;
Political campaigns require consent from the user. In order for the ad server to take this into account correctly, it needs information from the app. The exact workflow works as follows:&lt;br /&gt;
&lt;br /&gt;
====Workflow====&lt;br /&gt;
#The user decides in the CMP whether to give consent for political advertising&lt;br /&gt;
#The app evaluates the consent and checks whether consent has been given for political advertising&lt;br /&gt;
#If consent has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to the &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039; keywords for each ad request (see #Keywords (Appending Key-Value Pairs)).&lt;br /&gt;
#The ad server sees the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; in the ad request and now has the option of delivering a political campaign targeted to that keyword (however, this is not mandatory; it can also deliver other campaigns).&lt;br /&gt;
#When an ad server plays a political campaign, a creative is delivered to the app that contains an additional setting in the template. This causes the creative to inform the app that the advertising slot in question actually contains a political campaign and that the app should respond by changing the ad label. The message is sent to the app via a political_ad event (see [[#Documentation of iq digital app events]]).&lt;br /&gt;
#The app receives the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event and can respond to it. iqdigital recommends that the ad label above the affected ad slot be changed to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039; and that there be a link to the Political Ad Transparency URL for the campaign (which is passed in the event). &#039;&#039;&#039;Important&#039;&#039;&#039;: The responsibility for whether and how the app responds to the &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event lies with the publisher and the app.&lt;br /&gt;
&lt;br /&gt;
===App tasks (publisher tasks)===&lt;br /&gt;
*The app evaluates the consent string and checks whether the user has given consent for political advertising.&lt;br /&gt;
*If consent for political advertising has been given, the app adds the keyword &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; to CustomTargeting (to key &#039;&#039;&#039;&#039;&#039;kw&#039;&#039;&#039;&#039;&#039;).&lt;br /&gt;
*When the app receives a &#039;&#039;&#039;&#039;&#039;political_ad&#039;&#039;&#039;&#039;&#039; event through a creative, it should respond to it, for example by changing the ad label to &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;, as described above. If a URL is also passed as a value in the event, a link with the URL and the text &#039;&#039;&#039;&#039;&#039;(more info)&amp;quot; should appear next to the ad label &#039;&#039;&#039;&#039;&#039;Politische Anzeige&#039;&#039;&#039;&#039;&#039;. Clicking on the link then opens the URL, where the user can find further information about the type of campaign.&lt;br /&gt;
&lt;br /&gt;
===Tasks of the advertising template===&lt;br /&gt;
*A political campaign must be configured accordingly in the ad server. This is done via settings in the advertising template. This involves marking that the creative belongs to a political campaign and setting the PoliticalAdTransparencyUrl (for the &amp;quot;(more info)&amp;quot; link).&lt;br /&gt;
*The advertising template internally evaluates whether it is a political ad.&lt;br /&gt;
*In the case of a political advertisement, it sends an event to the app with the key political_ad and the set PoliticalAdTransparencyUrl as the &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
Attached is an example of a test campaign that has been marked as a political ad.&lt;br /&gt;
[[File:Political_Ad_Testkampagne.png|800px|thumbnail|Display of a political campaign from the web (right side of the image)]]&lt;br /&gt;
&lt;br /&gt;
====Test placement====&lt;br /&gt;
The following keywords (separated by commas) can be set in the debug Easter egg:&lt;br /&gt;
&lt;br /&gt;
This will run an orange test ad on iqadtile1, iqadtile3 and/or iqadtile4 with the text &amp;quot;POLITICAL AD Test 320x320.&amp;quot; However, this will only appear if the app transmits the keyword political_ad after evaluating consent in accordance with the instructions for political advertising.&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=98</id>
		<title>Prebid Mobile SDK in Apps</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=98"/>
		<updated>2026-02-11T13:21:01Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* Step 3 - Create BannerAdUnits per placement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The Prebid Mobile SDK is used to integrate various HeaderBidding providers into an app, which then bid on the available ad placements during initial page load. The winning bid is then passed to the Google Mobile Ads SDK (GMA SDK) to the ad server, which compares the bid with other bookings available there and delivers the most appropriate booking.&lt;br /&gt;
&lt;br /&gt;
Note: The implementation guide uses code snippets for Android as examples and assumes that the Google Mobile Ads SDK is already integrated into the app.&lt;br /&gt;
Basic documentation of Prebid Mobile can be found here:&lt;br /&gt;
*General overview: https://docs.prebid.org/prebid-mobile/prebid-mobile.html&lt;br /&gt;
*iOS: https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html&lt;br /&gt;
*Android: https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html&lt;br /&gt;
&lt;br /&gt;
===Required documents===&lt;br /&gt;
*This documentation&lt;br /&gt;
*Excel sheet with account ID and config IDs for each iqadtile&lt;br /&gt;
&lt;br /&gt;
==Step 1 - Integrate Prebid Mobile SDK==&lt;br /&gt;
*iOS: https://github.com/prebid/prebid-mobile-ios&lt;br /&gt;
*Android: https://github.com/prebid/prebid-mobile-android&lt;br /&gt;
&lt;br /&gt;
==Step 2 - Initial global configuration==&lt;br /&gt;
At the beginning, the endpoint and account ID must be set in the SDK and placed in an initialization method&lt;br /&gt;
&lt;br /&gt;
*Prebid Server Account ID: &#039;&#039;&#039;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039;, the ID is different for each app, but is the same for all placements within the app. The ID can be found in the Excel sheet.&lt;br /&gt;
*Prebid Server Url: &#039;&#039;&#039;https://client-pbs.relevant-digital.com/openrtb2/auction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PrebidMobile.setPrebidServerAccountId(&amp;quot;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.setCustomStatusEndpoint(&amp;quot;https://client-pbs.relevant-digital.com/s  &lt;br /&gt;
tatus&amp;quot;)  &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.initializeSdk(  &lt;br /&gt;
    applicationContext,  &lt;br /&gt;
    &amp;quot;https://client-pbs.relevant-digital.com/openrtb2/auction&amp;quot;) { status -&amp;gt;  &lt;br /&gt;
        if (status == InitializationStatus.SUCCEEDED) {  &lt;br /&gt;
            Log.d(TAG, &amp;quot;SDK initialized successfully!&amp;quot;)  &lt;br /&gt;
        } else {  &lt;br /&gt;
            Log.e(TAG, &amp;quot;SDK initialization error: $status\\  &lt;br /&gt;
            ${status.description}&amp;quot;)  &lt;br /&gt;
        }  &lt;br /&gt;
    }&lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 3 - Create BannerAdUnits per placement==&lt;br /&gt;
For each ad placement (iqadtile), a BannerAdUnit must be created and configured:&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Config Id&#039;&#039;&#039;, this is different for each iqadtile within an app and is provided in the Excel sheet by iqdigital.&lt;br /&gt;
#The sizes that have been defined for the iqadtile must also be communicated to the BannerAdUnit. (Important: normally more than one size must be passed, they often differ from iqadtile to iqadtile)&lt;br /&gt;
&lt;br /&gt;
==Step 4 - Global configurations for BannerAdUnits==&lt;br /&gt;
These apply equally to all BannerAdUnits&lt;br /&gt;
&lt;br /&gt;
===OMID===&lt;br /&gt;
OMID tells the Headerbidding partners which OpenMeasurement SDK is being used. The GMA SDK has the OpenMeasurementSDK built in, which is why the IDs for Google must be specified here:&lt;br /&gt;
&lt;br /&gt;
====iOS:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;afma-sdk-i-v12.11.0&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Android:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;253830000.253830000&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setOmidPartnerVersion(&amp;quot;253830000.253830000&amp;quot;);  &lt;br /&gt;
TargetingParams.setOmidPartnerName(&amp;quot;Google&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Banner API===&lt;br /&gt;
The Headerbidding partners must be informed which APIs are available. In the case of the GMA SDK, the following values are valid:&lt;br /&gt;
&lt;br /&gt;
MRAID 1 to 3, OMID 1&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
val parameters = BannerParameters()  &lt;br /&gt;
parameters.api = listOf(Signals.Api.MRAID_3, Signals.Api.OMID_1,  &lt;br /&gt;
Signals.Api.MRAID_2, Signals.Api.MRAID_1)  &lt;br /&gt;
adUnit?.bannerParameters = parameters &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Display Manager===&lt;br /&gt;
The Headerbidding partners should be informed which DisplayManager and which version is being used.&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setGlobalOrtbConfig(  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
        {  &lt;br /&gt;
            &amp;quot;displaymanager&amp;quot;: &amp;quot;Google&amp;quot;,  &lt;br /&gt;
            &amp;quot;displaymanagerver&amp;quot;: &amp;quot;${MobileAds.getVersion()}&amp;quot;,  &lt;br /&gt;
            &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
                &amp;quot;myext&amp;quot;: {  &lt;br /&gt;
                    &amp;quot;test&amp;quot;: 1  &lt;br /&gt;
                }  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 5 - iqadtile/page-specific configurations for BannerAdUnits==&lt;br /&gt;
These differ depending on the iqadtile or page.&lt;br /&gt;
&lt;br /&gt;
===GPID===&lt;br /&gt;
The GPID is there to tell certain Headerbidding partners which placement they are bidding on and is therefore very important. The absence of this information leads to worse bids!&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;gpid&#039;&#039;&#039; corresponds to the AdUnit used for the iqadtile, e.g. /183/FAZ_app_android_phone/homepage&lt;br /&gt;
*&#039;&#039;&#039;pbadslot&#039;&#039;&#039; is a combination of AdUnit, the character &#039;#&#039; and the iqadtile, example /183/FAZ_app_android_phone/homepage#iqadtile3&lt;br /&gt;
*&#039;&#039;&#039;relevant_slotInstance&#039;&#039;&#039; is the number of the iqadtile, example 3 for iqadtile3&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adUnit?.impOrtbConfig = &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
    {  &lt;br /&gt;
        &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
            &amp;quot;gpid&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage&amp;quot;  &lt;br /&gt;
            &amp;quot;data&amp;quot;: {  &lt;br /&gt;
                &amp;quot;pbadslot&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage#iqadtile3&amp;quot;  &lt;br /&gt;
                &amp;quot;relevant_slotInstance&amp;quot;: &amp;quot;3&amp;quot; // optional extra to RY analytics  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    }  &lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Appendix: How Prebid Mobile SDK and GMA SDK work==&lt;br /&gt;
[[Datei:Prebid SDK.png|800px]]&lt;br /&gt;
#The Prebid Mobile SDK sends a request to Prebid Server&lt;br /&gt;
#Prebid Server returns a bid if available&lt;br /&gt;
#The ad request to Google Ad Manager is supplemented with the Prebid parameters&lt;br /&gt;
#Google Ad Manager checks the request and delivers advertising&lt;br /&gt;
#The app displays the advertising&lt;br /&gt;
&lt;br /&gt;
Important note: An ad request with the GMA SDK always occurs, even if the Prebid Mobile SDK has no bids. Prebid bids supplement the ad request, but they are not a necessary condition.&lt;br /&gt;
&lt;br /&gt;
==Important Links==&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/prebid-mobile.html Getting Started]&lt;br /&gt;
*[https://docs.prebid.org/prebid-server/use-cases/pbs-sdk.html#prebid-sdk-calls-prebid-server Prebid SDK Workflow]&lt;br /&gt;
&lt;br /&gt;
===iOS===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html Code Integration]&lt;br /&gt;
&lt;br /&gt;
===Android===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html Code Integration]&lt;br /&gt;
[[de:Prebid Mobile SDK in Apps]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=97</id>
		<title>Prebid Mobile SDK in Apps</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=97"/>
		<updated>2026-02-11T13:20:18Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* Step 2 - Initial global configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The Prebid Mobile SDK is used to integrate various HeaderBidding providers into an app, which then bid on the available ad placements during initial page load. The winning bid is then passed to the Google Mobile Ads SDK (GMA SDK) to the ad server, which compares the bid with other bookings available there and delivers the most appropriate booking.&lt;br /&gt;
&lt;br /&gt;
Note: The implementation guide uses code snippets for Android as examples and assumes that the Google Mobile Ads SDK is already integrated into the app.&lt;br /&gt;
Basic documentation of Prebid Mobile can be found here:&lt;br /&gt;
*General overview: https://docs.prebid.org/prebid-mobile/prebid-mobile.html&lt;br /&gt;
*iOS: https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html&lt;br /&gt;
*Android: https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html&lt;br /&gt;
&lt;br /&gt;
===Required documents===&lt;br /&gt;
*This documentation&lt;br /&gt;
*Excel sheet with account ID and config IDs for each iqadtile&lt;br /&gt;
&lt;br /&gt;
==Step 1 - Integrate Prebid Mobile SDK==&lt;br /&gt;
*iOS: https://github.com/prebid/prebid-mobile-ios&lt;br /&gt;
*Android: https://github.com/prebid/prebid-mobile-android&lt;br /&gt;
&lt;br /&gt;
==Step 2 - Initial global configuration==&lt;br /&gt;
At the beginning, the endpoint and account ID must be set in the SDK and placed in an initialization method&lt;br /&gt;
&lt;br /&gt;
*Prebid Server Account ID: &#039;&#039;&#039;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039;, the ID is different for each app, but is the same for all placements within the app. The ID can be found in the Excel sheet.&lt;br /&gt;
*Prebid Server Url: &#039;&#039;&#039;https://client-pbs.relevant-digital.com/openrtb2/auction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PrebidMobile.setPrebidServerAccountId(&amp;quot;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.setCustomStatusEndpoint(&amp;quot;https://client-pbs.relevant-digital.com/s  &lt;br /&gt;
tatus&amp;quot;)  &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.initializeSdk(  &lt;br /&gt;
    applicationContext,  &lt;br /&gt;
    &amp;quot;https://client-pbs.relevant-digital.com/openrtb2/auction&amp;quot;) { status -&amp;gt;  &lt;br /&gt;
        if (status == InitializationStatus.SUCCEEDED) {  &lt;br /&gt;
            Log.d(TAG, &amp;quot;SDK initialized successfully!&amp;quot;)  &lt;br /&gt;
        } else {  &lt;br /&gt;
            Log.e(TAG, &amp;quot;SDK initialization error: $status\\  &lt;br /&gt;
            ${status.description}&amp;quot;)  &lt;br /&gt;
        }  &lt;br /&gt;
    }&lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 3 - Create BannerAdUnits per placement==&lt;br /&gt;
For each ad placement (iqadtile), a BannerAdUnit must be created and configured:&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Config Id&#039;&#039;&#039;, this is different for each iqadtile and will be provided in a table by iqdigital&lt;br /&gt;
#The sizes that have been defined for the iqadtile must also be communicated to the BannerAdUnit. (Important: normally more than one size must be passed, they often differ from iqadtile to iqadtile)&lt;br /&gt;
&lt;br /&gt;
==Step 4 - Global configurations for BannerAdUnits==&lt;br /&gt;
These apply equally to all BannerAdUnits&lt;br /&gt;
&lt;br /&gt;
===OMID===&lt;br /&gt;
OMID tells the Headerbidding partners which OpenMeasurement SDK is being used. The GMA SDK has the OpenMeasurementSDK built in, which is why the IDs for Google must be specified here:&lt;br /&gt;
&lt;br /&gt;
====iOS:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;afma-sdk-i-v12.11.0&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Android:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;253830000.253830000&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setOmidPartnerVersion(&amp;quot;253830000.253830000&amp;quot;);  &lt;br /&gt;
TargetingParams.setOmidPartnerName(&amp;quot;Google&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Banner API===&lt;br /&gt;
The Headerbidding partners must be informed which APIs are available. In the case of the GMA SDK, the following values are valid:&lt;br /&gt;
&lt;br /&gt;
MRAID 1 to 3, OMID 1&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
val parameters = BannerParameters()  &lt;br /&gt;
parameters.api = listOf(Signals.Api.MRAID_3, Signals.Api.OMID_1,  &lt;br /&gt;
Signals.Api.MRAID_2, Signals.Api.MRAID_1)  &lt;br /&gt;
adUnit?.bannerParameters = parameters &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Display Manager===&lt;br /&gt;
The Headerbidding partners should be informed which DisplayManager and which version is being used.&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setGlobalOrtbConfig(  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
        {  &lt;br /&gt;
            &amp;quot;displaymanager&amp;quot;: &amp;quot;Google&amp;quot;,  &lt;br /&gt;
            &amp;quot;displaymanagerver&amp;quot;: &amp;quot;${MobileAds.getVersion()}&amp;quot;,  &lt;br /&gt;
            &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
                &amp;quot;myext&amp;quot;: {  &lt;br /&gt;
                    &amp;quot;test&amp;quot;: 1  &lt;br /&gt;
                }  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 5 - iqadtile/page-specific configurations for BannerAdUnits==&lt;br /&gt;
These differ depending on the iqadtile or page.&lt;br /&gt;
&lt;br /&gt;
===GPID===&lt;br /&gt;
The GPID is there to tell certain Headerbidding partners which placement they are bidding on and is therefore very important. The absence of this information leads to worse bids!&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;gpid&#039;&#039;&#039; corresponds to the AdUnit used for the iqadtile, e.g. /183/FAZ_app_android_phone/homepage&lt;br /&gt;
*&#039;&#039;&#039;pbadslot&#039;&#039;&#039; is a combination of AdUnit, the character &#039;#&#039; and the iqadtile, example /183/FAZ_app_android_phone/homepage#iqadtile3&lt;br /&gt;
*&#039;&#039;&#039;relevant_slotInstance&#039;&#039;&#039; is the number of the iqadtile, example 3 for iqadtile3&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adUnit?.impOrtbConfig = &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
    {  &lt;br /&gt;
        &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
            &amp;quot;gpid&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage&amp;quot;  &lt;br /&gt;
            &amp;quot;data&amp;quot;: {  &lt;br /&gt;
                &amp;quot;pbadslot&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage#iqadtile3&amp;quot;  &lt;br /&gt;
                &amp;quot;relevant_slotInstance&amp;quot;: &amp;quot;3&amp;quot; // optional extra to RY analytics  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    }  &lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Appendix: How Prebid Mobile SDK and GMA SDK work==&lt;br /&gt;
[[Datei:Prebid SDK.png|800px]]&lt;br /&gt;
#The Prebid Mobile SDK sends a request to Prebid Server&lt;br /&gt;
#Prebid Server returns a bid if available&lt;br /&gt;
#The ad request to Google Ad Manager is supplemented with the Prebid parameters&lt;br /&gt;
#Google Ad Manager checks the request and delivers advertising&lt;br /&gt;
#The app displays the advertising&lt;br /&gt;
&lt;br /&gt;
Important note: An ad request with the GMA SDK always occurs, even if the Prebid Mobile SDK has no bids. Prebid bids supplement the ad request, but they are not a necessary condition.&lt;br /&gt;
&lt;br /&gt;
==Important Links==&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/prebid-mobile.html Getting Started]&lt;br /&gt;
*[https://docs.prebid.org/prebid-server/use-cases/pbs-sdk.html#prebid-sdk-calls-prebid-server Prebid SDK Workflow]&lt;br /&gt;
&lt;br /&gt;
===iOS===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html Code Integration]&lt;br /&gt;
&lt;br /&gt;
===Android===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html Code Integration]&lt;br /&gt;
[[de:Prebid Mobile SDK in Apps]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=96</id>
		<title>Prebid Mobile SDK in Apps</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=96"/>
		<updated>2026-02-11T13:20:06Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* Step 2 - Initial global configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The Prebid Mobile SDK is used to integrate various HeaderBidding providers into an app, which then bid on the available ad placements during initial page load. The winning bid is then passed to the Google Mobile Ads SDK (GMA SDK) to the ad server, which compares the bid with other bookings available there and delivers the most appropriate booking.&lt;br /&gt;
&lt;br /&gt;
Note: The implementation guide uses code snippets for Android as examples and assumes that the Google Mobile Ads SDK is already integrated into the app.&lt;br /&gt;
Basic documentation of Prebid Mobile can be found here:&lt;br /&gt;
*General overview: https://docs.prebid.org/prebid-mobile/prebid-mobile.html&lt;br /&gt;
*iOS: https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html&lt;br /&gt;
*Android: https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html&lt;br /&gt;
&lt;br /&gt;
===Required documents===&lt;br /&gt;
*This documentation&lt;br /&gt;
*Excel sheet with account ID and config IDs for each iqadtile&lt;br /&gt;
&lt;br /&gt;
==Step 1 - Integrate Prebid Mobile SDK==&lt;br /&gt;
*iOS: https://github.com/prebid/prebid-mobile-ios&lt;br /&gt;
*Android: https://github.com/prebid/prebid-mobile-android&lt;br /&gt;
&lt;br /&gt;
==Step 2 - Initial global configuration==&lt;br /&gt;
At the beginning, the endpoint and account ID must be set in the SDK and placed in an initialization method&lt;br /&gt;
&lt;br /&gt;
*Prebid Server Account ID: &#039;&#039;&#039;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039;, tThe ID is different for each app, but is the same for all placements within the app. The ID can be found in the Excel sheet.&lt;br /&gt;
*Prebid Server Url: &#039;&#039;&#039;https://client-pbs.relevant-digital.com/openrtb2/auction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PrebidMobile.setPrebidServerAccountId(&amp;quot;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.setCustomStatusEndpoint(&amp;quot;https://client-pbs.relevant-digital.com/s  &lt;br /&gt;
tatus&amp;quot;)  &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.initializeSdk(  &lt;br /&gt;
    applicationContext,  &lt;br /&gt;
    &amp;quot;https://client-pbs.relevant-digital.com/openrtb2/auction&amp;quot;) { status -&amp;gt;  &lt;br /&gt;
        if (status == InitializationStatus.SUCCEEDED) {  &lt;br /&gt;
            Log.d(TAG, &amp;quot;SDK initialized successfully!&amp;quot;)  &lt;br /&gt;
        } else {  &lt;br /&gt;
            Log.e(TAG, &amp;quot;SDK initialization error: $status\\  &lt;br /&gt;
            ${status.description}&amp;quot;)  &lt;br /&gt;
        }  &lt;br /&gt;
    }&lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 3 - Create BannerAdUnits per placement==&lt;br /&gt;
For each ad placement (iqadtile), a BannerAdUnit must be created and configured:&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Config Id&#039;&#039;&#039;, this is different for each iqadtile and will be provided in a table by iqdigital&lt;br /&gt;
#The sizes that have been defined for the iqadtile must also be communicated to the BannerAdUnit. (Important: normally more than one size must be passed, they often differ from iqadtile to iqadtile)&lt;br /&gt;
&lt;br /&gt;
==Step 4 - Global configurations for BannerAdUnits==&lt;br /&gt;
These apply equally to all BannerAdUnits&lt;br /&gt;
&lt;br /&gt;
===OMID===&lt;br /&gt;
OMID tells the Headerbidding partners which OpenMeasurement SDK is being used. The GMA SDK has the OpenMeasurementSDK built in, which is why the IDs for Google must be specified here:&lt;br /&gt;
&lt;br /&gt;
====iOS:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;afma-sdk-i-v12.11.0&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Android:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;253830000.253830000&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setOmidPartnerVersion(&amp;quot;253830000.253830000&amp;quot;);  &lt;br /&gt;
TargetingParams.setOmidPartnerName(&amp;quot;Google&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Banner API===&lt;br /&gt;
The Headerbidding partners must be informed which APIs are available. In the case of the GMA SDK, the following values are valid:&lt;br /&gt;
&lt;br /&gt;
MRAID 1 to 3, OMID 1&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
val parameters = BannerParameters()  &lt;br /&gt;
parameters.api = listOf(Signals.Api.MRAID_3, Signals.Api.OMID_1,  &lt;br /&gt;
Signals.Api.MRAID_2, Signals.Api.MRAID_1)  &lt;br /&gt;
adUnit?.bannerParameters = parameters &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Display Manager===&lt;br /&gt;
The Headerbidding partners should be informed which DisplayManager and which version is being used.&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setGlobalOrtbConfig(  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
        {  &lt;br /&gt;
            &amp;quot;displaymanager&amp;quot;: &amp;quot;Google&amp;quot;,  &lt;br /&gt;
            &amp;quot;displaymanagerver&amp;quot;: &amp;quot;${MobileAds.getVersion()}&amp;quot;,  &lt;br /&gt;
            &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
                &amp;quot;myext&amp;quot;: {  &lt;br /&gt;
                    &amp;quot;test&amp;quot;: 1  &lt;br /&gt;
                }  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 5 - iqadtile/page-specific configurations for BannerAdUnits==&lt;br /&gt;
These differ depending on the iqadtile or page.&lt;br /&gt;
&lt;br /&gt;
===GPID===&lt;br /&gt;
The GPID is there to tell certain Headerbidding partners which placement they are bidding on and is therefore very important. The absence of this information leads to worse bids!&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;gpid&#039;&#039;&#039; corresponds to the AdUnit used for the iqadtile, e.g. /183/FAZ_app_android_phone/homepage&lt;br /&gt;
*&#039;&#039;&#039;pbadslot&#039;&#039;&#039; is a combination of AdUnit, the character &#039;#&#039; and the iqadtile, example /183/FAZ_app_android_phone/homepage#iqadtile3&lt;br /&gt;
*&#039;&#039;&#039;relevant_slotInstance&#039;&#039;&#039; is the number of the iqadtile, example 3 for iqadtile3&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adUnit?.impOrtbConfig = &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
    {  &lt;br /&gt;
        &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
            &amp;quot;gpid&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage&amp;quot;  &lt;br /&gt;
            &amp;quot;data&amp;quot;: {  &lt;br /&gt;
                &amp;quot;pbadslot&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage#iqadtile3&amp;quot;  &lt;br /&gt;
                &amp;quot;relevant_slotInstance&amp;quot;: &amp;quot;3&amp;quot; // optional extra to RY analytics  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    }  &lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Appendix: How Prebid Mobile SDK and GMA SDK work==&lt;br /&gt;
[[Datei:Prebid SDK.png|800px]]&lt;br /&gt;
#The Prebid Mobile SDK sends a request to Prebid Server&lt;br /&gt;
#Prebid Server returns a bid if available&lt;br /&gt;
#The ad request to Google Ad Manager is supplemented with the Prebid parameters&lt;br /&gt;
#Google Ad Manager checks the request and delivers advertising&lt;br /&gt;
#The app displays the advertising&lt;br /&gt;
&lt;br /&gt;
Important note: An ad request with the GMA SDK always occurs, even if the Prebid Mobile SDK has no bids. Prebid bids supplement the ad request, but they are not a necessary condition.&lt;br /&gt;
&lt;br /&gt;
==Important Links==&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/prebid-mobile.html Getting Started]&lt;br /&gt;
*[https://docs.prebid.org/prebid-server/use-cases/pbs-sdk.html#prebid-sdk-calls-prebid-server Prebid SDK Workflow]&lt;br /&gt;
&lt;br /&gt;
===iOS===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html Code Integration]&lt;br /&gt;
&lt;br /&gt;
===Android===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html Code Integration]&lt;br /&gt;
[[de:Prebid Mobile SDK in Apps]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=95</id>
		<title>Prebid Mobile SDK in Apps</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=95"/>
		<updated>2026-02-11T13:19:44Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* Step 2 - Initial global configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The Prebid Mobile SDK is used to integrate various HeaderBidding providers into an app, which then bid on the available ad placements during initial page load. The winning bid is then passed to the Google Mobile Ads SDK (GMA SDK) to the ad server, which compares the bid with other bookings available there and delivers the most appropriate booking.&lt;br /&gt;
&lt;br /&gt;
Note: The implementation guide uses code snippets for Android as examples and assumes that the Google Mobile Ads SDK is already integrated into the app.&lt;br /&gt;
Basic documentation of Prebid Mobile can be found here:&lt;br /&gt;
*General overview: https://docs.prebid.org/prebid-mobile/prebid-mobile.html&lt;br /&gt;
*iOS: https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html&lt;br /&gt;
*Android: https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html&lt;br /&gt;
&lt;br /&gt;
===Required documents===&lt;br /&gt;
*This documentation&lt;br /&gt;
*Excel sheet with account ID and config IDs for each iqadtile&lt;br /&gt;
&lt;br /&gt;
==Step 1 - Integrate Prebid Mobile SDK==&lt;br /&gt;
*iOS: https://github.com/prebid/prebid-mobile-ios&lt;br /&gt;
*Android: https://github.com/prebid/prebid-mobile-android&lt;br /&gt;
&lt;br /&gt;
==Step 2 - Initial global configuration==&lt;br /&gt;
At the beginning, the endpoint and account ID must be set in the SDK and placed in an initialization method&lt;br /&gt;
&lt;br /&gt;
*Prebid Server Account ID: &#039;&#039;&#039;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039;. The ID is different for each app, but is the same for all placements within the app. The ID can be found in the Excel sheet.*Prebid Server Url: &#039;&#039;&#039;https://client-pbs.relevant-digital.com/openrtb2/auction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PrebidMobile.setPrebidServerAccountId(&amp;quot;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.setCustomStatusEndpoint(&amp;quot;https://client-pbs.relevant-digital.com/s  &lt;br /&gt;
tatus&amp;quot;)  &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.initializeSdk(  &lt;br /&gt;
    applicationContext,  &lt;br /&gt;
    &amp;quot;https://client-pbs.relevant-digital.com/openrtb2/auction&amp;quot;) { status -&amp;gt;  &lt;br /&gt;
        if (status == InitializationStatus.SUCCEEDED) {  &lt;br /&gt;
            Log.d(TAG, &amp;quot;SDK initialized successfully!&amp;quot;)  &lt;br /&gt;
        } else {  &lt;br /&gt;
            Log.e(TAG, &amp;quot;SDK initialization error: $status\\  &lt;br /&gt;
            ${status.description}&amp;quot;)  &lt;br /&gt;
        }  &lt;br /&gt;
    }&lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 3 - Create BannerAdUnits per placement==&lt;br /&gt;
For each ad placement (iqadtile), a BannerAdUnit must be created and configured:&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Config Id&#039;&#039;&#039;, this is different for each iqadtile and will be provided in a table by iqdigital&lt;br /&gt;
#The sizes that have been defined for the iqadtile must also be communicated to the BannerAdUnit. (Important: normally more than one size must be passed, they often differ from iqadtile to iqadtile)&lt;br /&gt;
&lt;br /&gt;
==Step 4 - Global configurations for BannerAdUnits==&lt;br /&gt;
These apply equally to all BannerAdUnits&lt;br /&gt;
&lt;br /&gt;
===OMID===&lt;br /&gt;
OMID tells the Headerbidding partners which OpenMeasurement SDK is being used. The GMA SDK has the OpenMeasurementSDK built in, which is why the IDs for Google must be specified here:&lt;br /&gt;
&lt;br /&gt;
====iOS:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;afma-sdk-i-v12.11.0&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Android:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;253830000.253830000&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setOmidPartnerVersion(&amp;quot;253830000.253830000&amp;quot;);  &lt;br /&gt;
TargetingParams.setOmidPartnerName(&amp;quot;Google&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Banner API===&lt;br /&gt;
The Headerbidding partners must be informed which APIs are available. In the case of the GMA SDK, the following values are valid:&lt;br /&gt;
&lt;br /&gt;
MRAID 1 to 3, OMID 1&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
val parameters = BannerParameters()  &lt;br /&gt;
parameters.api = listOf(Signals.Api.MRAID_3, Signals.Api.OMID_1,  &lt;br /&gt;
Signals.Api.MRAID_2, Signals.Api.MRAID_1)  &lt;br /&gt;
adUnit?.bannerParameters = parameters &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Display Manager===&lt;br /&gt;
The Headerbidding partners should be informed which DisplayManager and which version is being used.&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setGlobalOrtbConfig(  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
        {  &lt;br /&gt;
            &amp;quot;displaymanager&amp;quot;: &amp;quot;Google&amp;quot;,  &lt;br /&gt;
            &amp;quot;displaymanagerver&amp;quot;: &amp;quot;${MobileAds.getVersion()}&amp;quot;,  &lt;br /&gt;
            &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
                &amp;quot;myext&amp;quot;: {  &lt;br /&gt;
                    &amp;quot;test&amp;quot;: 1  &lt;br /&gt;
                }  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 5 - iqadtile/page-specific configurations for BannerAdUnits==&lt;br /&gt;
These differ depending on the iqadtile or page.&lt;br /&gt;
&lt;br /&gt;
===GPID===&lt;br /&gt;
The GPID is there to tell certain Headerbidding partners which placement they are bidding on and is therefore very important. The absence of this information leads to worse bids!&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;gpid&#039;&#039;&#039; corresponds to the AdUnit used for the iqadtile, e.g. /183/FAZ_app_android_phone/homepage&lt;br /&gt;
*&#039;&#039;&#039;pbadslot&#039;&#039;&#039; is a combination of AdUnit, the character &#039;#&#039; and the iqadtile, example /183/FAZ_app_android_phone/homepage#iqadtile3&lt;br /&gt;
*&#039;&#039;&#039;relevant_slotInstance&#039;&#039;&#039; is the number of the iqadtile, example 3 for iqadtile3&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adUnit?.impOrtbConfig = &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
    {  &lt;br /&gt;
        &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
            &amp;quot;gpid&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage&amp;quot;  &lt;br /&gt;
            &amp;quot;data&amp;quot;: {  &lt;br /&gt;
                &amp;quot;pbadslot&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage#iqadtile3&amp;quot;  &lt;br /&gt;
                &amp;quot;relevant_slotInstance&amp;quot;: &amp;quot;3&amp;quot; // optional extra to RY analytics  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    }  &lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Appendix: How Prebid Mobile SDK and GMA SDK work==&lt;br /&gt;
[[Datei:Prebid SDK.png|800px]]&lt;br /&gt;
#The Prebid Mobile SDK sends a request to Prebid Server&lt;br /&gt;
#Prebid Server returns a bid if available&lt;br /&gt;
#The ad request to Google Ad Manager is supplemented with the Prebid parameters&lt;br /&gt;
#Google Ad Manager checks the request and delivers advertising&lt;br /&gt;
#The app displays the advertising&lt;br /&gt;
&lt;br /&gt;
Important note: An ad request with the GMA SDK always occurs, even if the Prebid Mobile SDK has no bids. Prebid bids supplement the ad request, but they are not a necessary condition.&lt;br /&gt;
&lt;br /&gt;
==Important Links==&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/prebid-mobile.html Getting Started]&lt;br /&gt;
*[https://docs.prebid.org/prebid-server/use-cases/pbs-sdk.html#prebid-sdk-calls-prebid-server Prebid SDK Workflow]&lt;br /&gt;
&lt;br /&gt;
===iOS===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html Code Integration]&lt;br /&gt;
&lt;br /&gt;
===Android===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html Code Integration]&lt;br /&gt;
[[de:Prebid Mobile SDK in Apps]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=94</id>
		<title>Prebid Mobile SDK in Apps</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=94"/>
		<updated>2026-02-11T13:18:52Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The Prebid Mobile SDK is used to integrate various HeaderBidding providers into an app, which then bid on the available ad placements during initial page load. The winning bid is then passed to the Google Mobile Ads SDK (GMA SDK) to the ad server, which compares the bid with other bookings available there and delivers the most appropriate booking.&lt;br /&gt;
&lt;br /&gt;
Note: The implementation guide uses code snippets for Android as examples and assumes that the Google Mobile Ads SDK is already integrated into the app.&lt;br /&gt;
Basic documentation of Prebid Mobile can be found here:&lt;br /&gt;
*General overview: https://docs.prebid.org/prebid-mobile/prebid-mobile.html&lt;br /&gt;
*iOS: https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html&lt;br /&gt;
*Android: https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html&lt;br /&gt;
&lt;br /&gt;
===Required documents===&lt;br /&gt;
*This documentation&lt;br /&gt;
*Excel sheet with account ID and config IDs for each iqadtile&lt;br /&gt;
&lt;br /&gt;
==Step 1 - Integrate Prebid Mobile SDK==&lt;br /&gt;
*iOS: https://github.com/prebid/prebid-mobile-ios&lt;br /&gt;
*Android: https://github.com/prebid/prebid-mobile-android&lt;br /&gt;
&lt;br /&gt;
==Step 2 - Initial global configuration==&lt;br /&gt;
At the beginning, the endpoint and account ID must be set in the SDK and placed in an initialization method&lt;br /&gt;
&lt;br /&gt;
*Prebid Server Account Id: &#039;&#039;&#039;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Prebid Server Url: &#039;&#039;&#039;https://client-pbs.relevant-digital.com/openrtb2/auction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PrebidMobile.setPrebidServerAccountId(&amp;quot;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.setCustomStatusEndpoint(&amp;quot;https://client-pbs.relevant-digital.com/s  &lt;br /&gt;
tatus&amp;quot;)  &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.initializeSdk(  &lt;br /&gt;
    applicationContext,  &lt;br /&gt;
    &amp;quot;https://client-pbs.relevant-digital.com/openrtb2/auction&amp;quot;) { status -&amp;gt;  &lt;br /&gt;
        if (status == InitializationStatus.SUCCEEDED) {  &lt;br /&gt;
            Log.d(TAG, &amp;quot;SDK initialized successfully!&amp;quot;)  &lt;br /&gt;
        } else {  &lt;br /&gt;
            Log.e(TAG, &amp;quot;SDK initialization error: $status\\  &lt;br /&gt;
            ${status.description}&amp;quot;)  &lt;br /&gt;
        }  &lt;br /&gt;
    }&lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 3 - Create BannerAdUnits per placement==&lt;br /&gt;
For each ad placement (iqadtile), a BannerAdUnit must be created and configured:&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Config Id&#039;&#039;&#039;, this is different for each iqadtile and will be provided in a table by iqdigital&lt;br /&gt;
#The sizes that have been defined for the iqadtile must also be communicated to the BannerAdUnit. (Important: normally more than one size must be passed, they often differ from iqadtile to iqadtile)&lt;br /&gt;
&lt;br /&gt;
==Step 4 - Global configurations for BannerAdUnits==&lt;br /&gt;
These apply equally to all BannerAdUnits&lt;br /&gt;
&lt;br /&gt;
===OMID===&lt;br /&gt;
OMID tells the Headerbidding partners which OpenMeasurement SDK is being used. The GMA SDK has the OpenMeasurementSDK built in, which is why the IDs for Google must be specified here:&lt;br /&gt;
&lt;br /&gt;
====iOS:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;afma-sdk-i-v12.11.0&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Android:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;253830000.253830000&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setOmidPartnerVersion(&amp;quot;253830000.253830000&amp;quot;);  &lt;br /&gt;
TargetingParams.setOmidPartnerName(&amp;quot;Google&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Banner API===&lt;br /&gt;
The Headerbidding partners must be informed which APIs are available. In the case of the GMA SDK, the following values are valid:&lt;br /&gt;
&lt;br /&gt;
MRAID 1 to 3, OMID 1&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
val parameters = BannerParameters()  &lt;br /&gt;
parameters.api = listOf(Signals.Api.MRAID_3, Signals.Api.OMID_1,  &lt;br /&gt;
Signals.Api.MRAID_2, Signals.Api.MRAID_1)  &lt;br /&gt;
adUnit?.bannerParameters = parameters &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Display Manager===&lt;br /&gt;
The Headerbidding partners should be informed which DisplayManager and which version is being used.&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setGlobalOrtbConfig(  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
        {  &lt;br /&gt;
            &amp;quot;displaymanager&amp;quot;: &amp;quot;Google&amp;quot;,  &lt;br /&gt;
            &amp;quot;displaymanagerver&amp;quot;: &amp;quot;${MobileAds.getVersion()}&amp;quot;,  &lt;br /&gt;
            &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
                &amp;quot;myext&amp;quot;: {  &lt;br /&gt;
                    &amp;quot;test&amp;quot;: 1  &lt;br /&gt;
                }  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 5 - iqadtile/page-specific configurations for BannerAdUnits==&lt;br /&gt;
These differ depending on the iqadtile or page.&lt;br /&gt;
&lt;br /&gt;
===GPID===&lt;br /&gt;
The GPID is there to tell certain Headerbidding partners which placement they are bidding on and is therefore very important. The absence of this information leads to worse bids!&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;gpid&#039;&#039;&#039; corresponds to the AdUnit used for the iqadtile, e.g. /183/FAZ_app_android_phone/homepage&lt;br /&gt;
*&#039;&#039;&#039;pbadslot&#039;&#039;&#039; is a combination of AdUnit, the character &#039;#&#039; and the iqadtile, example /183/FAZ_app_android_phone/homepage#iqadtile3&lt;br /&gt;
*&#039;&#039;&#039;relevant_slotInstance&#039;&#039;&#039; is the number of the iqadtile, example 3 for iqadtile3&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adUnit?.impOrtbConfig = &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
    {  &lt;br /&gt;
        &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
            &amp;quot;gpid&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage&amp;quot;  &lt;br /&gt;
            &amp;quot;data&amp;quot;: {  &lt;br /&gt;
                &amp;quot;pbadslot&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage#iqadtile3&amp;quot;  &lt;br /&gt;
                &amp;quot;relevant_slotInstance&amp;quot;: &amp;quot;3&amp;quot; // optional extra to RY analytics  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    }  &lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Appendix: How Prebid Mobile SDK and GMA SDK work==&lt;br /&gt;
[[Datei:Prebid SDK.png|800px]]&lt;br /&gt;
#The Prebid Mobile SDK sends a request to Prebid Server&lt;br /&gt;
#Prebid Server returns a bid if available&lt;br /&gt;
#The ad request to Google Ad Manager is supplemented with the Prebid parameters&lt;br /&gt;
#Google Ad Manager checks the request and delivers advertising&lt;br /&gt;
#The app displays the advertising&lt;br /&gt;
&lt;br /&gt;
Important note: An ad request with the GMA SDK always occurs, even if the Prebid Mobile SDK has no bids. Prebid bids supplement the ad request, but they are not a necessary condition.&lt;br /&gt;
&lt;br /&gt;
==Important Links==&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/prebid-mobile.html Getting Started]&lt;br /&gt;
*[https://docs.prebid.org/prebid-server/use-cases/pbs-sdk.html#prebid-sdk-calls-prebid-server Prebid SDK Workflow]&lt;br /&gt;
&lt;br /&gt;
===iOS===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html Code Integration]&lt;br /&gt;
&lt;br /&gt;
===Android===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html Code Integration]&lt;br /&gt;
[[de:Prebid Mobile SDK in Apps]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=93</id>
		<title>Prebid Mobile SDK in Apps</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=93"/>
		<updated>2026-02-06T08:14:55Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* GPID */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The Prebid Mobile SDK is used to integrate various HeaderBidding providers into an app, which then bid on the available ad placements during initial page load. The winning bid is then passed to the Google Mobile Ads SDK (GMA SDK) to the ad server, which compares the bid with other bookings available there and delivers the most appropriate booking.&lt;br /&gt;
&lt;br /&gt;
Note: The implementation guide uses code snippets for Android as examples and assumes that the Google Mobile Ads SDK is already integrated into the app.&lt;br /&gt;
Basic documentation of Prebid Mobile can be found here:&lt;br /&gt;
*General overview: https://docs.prebid.org/prebid-mobile/prebid-mobile.html&lt;br /&gt;
*iOS: https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html&lt;br /&gt;
*Android: https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html&lt;br /&gt;
&lt;br /&gt;
==Step 1 - Integrate Prebid Mobile SDK==&lt;br /&gt;
*iOS: https://github.com/prebid/prebid-mobile-ios&lt;br /&gt;
*Android: https://github.com/prebid/prebid-mobile-android&lt;br /&gt;
&lt;br /&gt;
==Step 2 - Initial global configuration==&lt;br /&gt;
At the beginning, the endpoint and account ID must be set in the SDK and placed in an initialization method&lt;br /&gt;
&lt;br /&gt;
*Prebid Server Account Id: &#039;&#039;&#039;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Prebid Server Url: &#039;&#039;&#039;https://client-pbs.relevant-digital.com/openrtb2/auction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PrebidMobile.setPrebidServerAccountId(&amp;quot;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.setCustomStatusEndpoint(&amp;quot;https://client-pbs.relevant-digital.com/s  &lt;br /&gt;
tatus&amp;quot;)  &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.initializeSdk(  &lt;br /&gt;
    applicationContext,  &lt;br /&gt;
    &amp;quot;https://client-pbs.relevant-digital.com/openrtb2/auction&amp;quot;) { status -&amp;gt;  &lt;br /&gt;
        if (status == InitializationStatus.SUCCEEDED) {  &lt;br /&gt;
            Log.d(TAG, &amp;quot;SDK initialized successfully!&amp;quot;)  &lt;br /&gt;
        } else {  &lt;br /&gt;
            Log.e(TAG, &amp;quot;SDK initialization error: $status\\  &lt;br /&gt;
            ${status.description}&amp;quot;)  &lt;br /&gt;
        }  &lt;br /&gt;
    }&lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 3 - Create BannerAdUnits per placement==&lt;br /&gt;
For each ad placement (iqadtile), a BannerAdUnit must be created and configured:&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Config Id&#039;&#039;&#039;, this is different for each iqadtile and will be provided in a table by iqdigital&lt;br /&gt;
#The sizes that have been defined for the iqadtile must also be communicated to the BannerAdUnit. (Important: normally more than one size must be passed, they often differ from iqadtile to iqadtile)&lt;br /&gt;
&lt;br /&gt;
==Step 4 - Global configurations for BannerAdUnits==&lt;br /&gt;
These apply equally to all BannerAdUnits&lt;br /&gt;
&lt;br /&gt;
===OMID===&lt;br /&gt;
OMID tells the Headerbidding partners which OpenMeasurement SDK is being used. The GMA SDK has the OpenMeasurementSDK built in, which is why the IDs for Google must be specified here:&lt;br /&gt;
&lt;br /&gt;
====iOS:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;afma-sdk-i-v12.11.0&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Android:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;253830000.253830000&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setOmidPartnerVersion(&amp;quot;253830000.253830000&amp;quot;);  &lt;br /&gt;
TargetingParams.setOmidPartnerName(&amp;quot;Google&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Banner API===&lt;br /&gt;
The Headerbidding partners must be informed which APIs are available. In the case of the GMA SDK, the following values are valid:&lt;br /&gt;
&lt;br /&gt;
MRAID 1 to 3, OMID 1&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
val parameters = BannerParameters()  &lt;br /&gt;
parameters.api = listOf(Signals.Api.MRAID_3, Signals.Api.OMID_1,  &lt;br /&gt;
Signals.Api.MRAID_2, Signals.Api.MRAID_1)  &lt;br /&gt;
adUnit?.bannerParameters = parameters &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Display Manager===&lt;br /&gt;
The Headerbidding partners should be informed which DisplayManager and which version is being used.&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setGlobalOrtbConfig(  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
        {  &lt;br /&gt;
            &amp;quot;displaymanager&amp;quot;: &amp;quot;Google&amp;quot;,  &lt;br /&gt;
            &amp;quot;displaymanagerver&amp;quot;: &amp;quot;${MobileAds.getVersion()}&amp;quot;,  &lt;br /&gt;
            &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
                &amp;quot;myext&amp;quot;: {  &lt;br /&gt;
                    &amp;quot;test&amp;quot;: 1  &lt;br /&gt;
                }  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 5 - iqadtile/page-specific configurations for BannerAdUnits==&lt;br /&gt;
These differ depending on the iqadtile or page.&lt;br /&gt;
&lt;br /&gt;
===GPID===&lt;br /&gt;
The GPID is there to tell certain Headerbidding partners which placement they are bidding on and is therefore very important. The absence of this information leads to worse bids!&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;gpid&#039;&#039;&#039; corresponds to the AdUnit used for the iqadtile, e.g. /183/FAZ_app_android_phone/homepage&lt;br /&gt;
*&#039;&#039;&#039;pbadslot&#039;&#039;&#039; is a combination of AdUnit, the character &#039;#&#039; and the iqadtile, example /183/FAZ_app_android_phone/homepage#iqadtile3&lt;br /&gt;
*&#039;&#039;&#039;relevant_slotInstance&#039;&#039;&#039; is the number of the iqadtile, example 3 for iqadtile3&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adUnit?.impOrtbConfig = &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
    {  &lt;br /&gt;
        &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
            &amp;quot;gpid&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage&amp;quot;  &lt;br /&gt;
            &amp;quot;data&amp;quot;: {  &lt;br /&gt;
                &amp;quot;pbadslot&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage#iqadtile3&amp;quot;  &lt;br /&gt;
                &amp;quot;relevant_slotInstance&amp;quot;: &amp;quot;3&amp;quot; // optional extra to RY analytics  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    }  &lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Appendix: How Prebid Mobile SDK and GMA SDK work==&lt;br /&gt;
[[Datei:Prebid SDK.png|800px]]&lt;br /&gt;
#The Prebid Mobile SDK sends a request to Prebid Server&lt;br /&gt;
#Prebid Server returns a bid if available&lt;br /&gt;
#The ad request to Google Ad Manager is supplemented with the Prebid parameters&lt;br /&gt;
#Google Ad Manager checks the request and delivers advertising&lt;br /&gt;
#The app displays the advertising&lt;br /&gt;
&lt;br /&gt;
Important note: An ad request with the GMA SDK always occurs, even if the Prebid Mobile SDK has no bids. Prebid bids supplement the ad request, but they are not a necessary condition.&lt;br /&gt;
&lt;br /&gt;
==Important Links==&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/prebid-mobile.html Getting Started]&lt;br /&gt;
*[https://docs.prebid.org/prebid-server/use-cases/pbs-sdk.html#prebid-sdk-calls-prebid-server Prebid SDK Workflow]&lt;br /&gt;
&lt;br /&gt;
===iOS===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html Code Integration]&lt;br /&gt;
&lt;br /&gt;
===Android===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html Code Integration]&lt;br /&gt;
[[de:Prebid Mobile SDK in Apps]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=92</id>
		<title>Prebid Mobile SDK in Apps</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=92"/>
		<updated>2026-01-30T10:33:53Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The Prebid Mobile SDK is used to integrate various HeaderBidding providers into an app, which then bid on the available ad placements during initial page load. The winning bid is then passed to the Google Mobile Ads SDK (GMA SDK) to the ad server, which compares the bid with other bookings available there and delivers the most appropriate booking.&lt;br /&gt;
&lt;br /&gt;
Note: The implementation guide uses code snippets for Android as examples and assumes that the Google Mobile Ads SDK is already integrated into the app.&lt;br /&gt;
Basic documentation of Prebid Mobile can be found here:&lt;br /&gt;
*General overview: https://docs.prebid.org/prebid-mobile/prebid-mobile.html&lt;br /&gt;
*iOS: https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html&lt;br /&gt;
*Android: https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html&lt;br /&gt;
&lt;br /&gt;
==Step 1 - Integrate Prebid Mobile SDK==&lt;br /&gt;
*iOS: https://github.com/prebid/prebid-mobile-ios&lt;br /&gt;
*Android: https://github.com/prebid/prebid-mobile-android&lt;br /&gt;
&lt;br /&gt;
==Step 2 - Initial global configuration==&lt;br /&gt;
At the beginning, the endpoint and account ID must be set in the SDK and placed in an initialization method&lt;br /&gt;
&lt;br /&gt;
*Prebid Server Account Id: &#039;&#039;&#039;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Prebid Server Url: &#039;&#039;&#039;https://client-pbs.relevant-digital.com/openrtb2/auction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PrebidMobile.setPrebidServerAccountId(&amp;quot;&amp;lt;&amp;lt;&amp;lt;PREBID_SERVER_ACCOUNT_ID&amp;gt;&amp;gt;&amp;gt;&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.setCustomStatusEndpoint(&amp;quot;https://client-pbs.relevant-digital.com/s  &lt;br /&gt;
tatus&amp;quot;)  &lt;br /&gt;
&lt;br /&gt;
PrebidMobile.initializeSdk(  &lt;br /&gt;
    applicationContext,  &lt;br /&gt;
    &amp;quot;https://client-pbs.relevant-digital.com/openrtb2/auction&amp;quot;) { status -&amp;gt;  &lt;br /&gt;
        if (status == InitializationStatus.SUCCEEDED) {  &lt;br /&gt;
            Log.d(TAG, &amp;quot;SDK initialized successfully!&amp;quot;)  &lt;br /&gt;
        } else {  &lt;br /&gt;
            Log.e(TAG, &amp;quot;SDK initialization error: $status\\  &lt;br /&gt;
            ${status.description}&amp;quot;)  &lt;br /&gt;
        }  &lt;br /&gt;
    }&lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 3 - Create BannerAdUnits per placement==&lt;br /&gt;
For each ad placement (iqadtile), a BannerAdUnit must be created and configured:&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Config Id&#039;&#039;&#039;, this is different for each iqadtile and will be provided in a table by iqdigital&lt;br /&gt;
#The sizes that have been defined for the iqadtile must also be communicated to the BannerAdUnit. (Important: normally more than one size must be passed, they often differ from iqadtile to iqadtile)&lt;br /&gt;
&lt;br /&gt;
==Step 4 - Global configurations for BannerAdUnits==&lt;br /&gt;
These apply equally to all BannerAdUnits&lt;br /&gt;
&lt;br /&gt;
===OMID===&lt;br /&gt;
OMID tells the Headerbidding partners which OpenMeasurement SDK is being used. The GMA SDK has the OpenMeasurementSDK built in, which is why the IDs for Google must be specified here:&lt;br /&gt;
&lt;br /&gt;
====iOS:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;afma-sdk-i-v12.11.0&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Android:====&lt;br /&gt;
*OmidPartnerVersion: &#039;&#039;&#039;253830000.253830000&#039;&#039;&#039;&lt;br /&gt;
*OmidPartnerName: &#039;&#039;&#039;Google&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setOmidPartnerVersion(&amp;quot;253830000.253830000&amp;quot;);  &lt;br /&gt;
TargetingParams.setOmidPartnerName(&amp;quot;Google&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Banner API===&lt;br /&gt;
The Headerbidding partners must be informed which APIs are available. In the case of the GMA SDK, the following values are valid:&lt;br /&gt;
&lt;br /&gt;
MRAID 1 to 3, OMID 1&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
val parameters = BannerParameters()  &lt;br /&gt;
parameters.api = listOf(Signals.Api.MRAID_3, Signals.Api.OMID_1,  &lt;br /&gt;
Signals.Api.MRAID_2, Signals.Api.MRAID_1)  &lt;br /&gt;
adUnit?.bannerParameters = parameters &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Display Manager===&lt;br /&gt;
The Headerbidding partners should be informed which DisplayManager and which version is being used.&lt;br /&gt;
&lt;br /&gt;
====Example:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TargetingParams.setGlobalOrtbConfig(  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
        {  &lt;br /&gt;
            &amp;quot;displaymanager&amp;quot;: &amp;quot;Google&amp;quot;,  &lt;br /&gt;
            &amp;quot;displaymanagerver&amp;quot;: &amp;quot;${MobileAds.getVersion()}&amp;quot;,  &lt;br /&gt;
            &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
                &amp;quot;myext&amp;quot;: {  &lt;br /&gt;
                    &amp;quot;test&amp;quot;: 1  &lt;br /&gt;
                }  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 5 - iqadtile/page-specific configurations for BannerAdUnits==&lt;br /&gt;
These differ depending on the iqadtile or page.&lt;br /&gt;
&lt;br /&gt;
===GPID===&lt;br /&gt;
The GPID is there to tell certain Headerbidding partners which placement they are bidding on and is therefore very important. The absence of this information leads to worse bids!&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;gpid&#039;&#039;&#039; corresponds to the AdUnit used for the iqadtile, e.g. /183/FAZ_app_android_phone/homepage&lt;br /&gt;
*&#039;&#039;&#039;pbadslot&#039;&#039;&#039; is a combination of AdUnit and iqadtile, example /183/FAZ_app_android_phone/homepage#iqadtile3&lt;br /&gt;
*&#039;&#039;&#039;relevant_slotInstance&#039;&#039;&#039; is the number of the iqadtile, example 3 for iqadtile3&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adUnit?.impOrtbConfig = &amp;quot;&amp;quot;&amp;quot;  &lt;br /&gt;
    {  &lt;br /&gt;
        &amp;quot;ext&amp;quot;: {  &lt;br /&gt;
            &amp;quot;gpid&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage&amp;quot;  &lt;br /&gt;
            &amp;quot;data&amp;quot;: {  &lt;br /&gt;
                &amp;quot;pbadslot&amp;quot;:&amp;quot;/183/FAZ_app_android_phone/homepage#iqadtile3&amp;quot;  &lt;br /&gt;
                &amp;quot;relevant_slotInstance&amp;quot;: &amp;quot;3&amp;quot; // optional extra to RY analytics  &lt;br /&gt;
            }  &lt;br /&gt;
        }  &lt;br /&gt;
    }  &lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;.trimIndent()  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Appendix: How Prebid Mobile SDK and GMA SDK work==&lt;br /&gt;
[[Datei:Prebid SDK.png|800px]]&lt;br /&gt;
#The Prebid Mobile SDK sends a request to Prebid Server&lt;br /&gt;
#Prebid Server returns a bid if available&lt;br /&gt;
#The ad request to Google Ad Manager is supplemented with the Prebid parameters&lt;br /&gt;
#Google Ad Manager checks the request and delivers advertising&lt;br /&gt;
#The app displays the advertising&lt;br /&gt;
&lt;br /&gt;
Important note: An ad request with the GMA SDK always occurs, even if the Prebid Mobile SDK has no bids. Prebid bids supplement the ad request, but they are not a necessary condition.&lt;br /&gt;
&lt;br /&gt;
==Important Links==&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/prebid-mobile.html Getting Started]&lt;br /&gt;
*[https://docs.prebid.org/prebid-server/use-cases/pbs-sdk.html#prebid-sdk-calls-prebid-server Prebid SDK Workflow]&lt;br /&gt;
&lt;br /&gt;
===iOS===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html Code Integration]&lt;br /&gt;
&lt;br /&gt;
===Android===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html Code Integration]&lt;br /&gt;
[[de:Prebid Mobile SDK in Apps]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Main_Page&amp;diff=88</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Main_Page&amp;diff=88"/>
		<updated>2025-05-26T14:52:14Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;div class=&amp;quot;mainpage&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mainheader&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&#039;&#039;&#039;iq digital media marketing gmbh&#039;&#039;&#039;&amp;lt;br /&amp;gt;Documentation&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;chapter&amp;quot;&amp;gt;&lt;br /&gt;
{{:Ad Technology}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[de:Hauptseite]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=87</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=87"/>
		<updated>2025-05-26T14:51:57Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=86</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=86"/>
		<updated>2025-05-26T14:51:44Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]][[Kategorie:TEST]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Main_Page&amp;diff=85</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Main_Page&amp;diff=85"/>
		<updated>2025-05-22T12:11:33Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:2px solid #ff6600;background-color:#fff7e6;width:300px;padding:10px;margin-bottom:20px;&amp;quot;&amp;gt;&amp;lt;h2&amp;gt;Maintenance work on 05/26/2025&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;In the period from 4-8pm it may be that the website is not available.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mainpage&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mainheader&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&#039;&#039;&#039;iq digital media marketing gmbh&#039;&#039;&#039;&amp;lt;br /&amp;gt;Documentation&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;chapter&amp;quot;&amp;gt;&lt;br /&gt;
{{:Ad Technology}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[de:Hauptseite]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=84</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=84"/>
		<updated>2025-04-25T06:33:59Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app or the homepage, e.g. &#039;&#039;politik&#039;&#039;, &#039;&#039;openingpage&#039;&#039;&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=80</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=80"/>
		<updated>2023-09-20T13:41:36Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: /* Content-Url parameter in the adrequest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app, e.g. politik (politics)&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are openingpage, swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Content-Url parameter in the adrequest===&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=79</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=79"/>
		<updated>2023-09-20T13:41:19Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app, e.g. politik (politics)&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are openingpage, swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
==Content-Url parameter in the adrequest==&lt;br /&gt;
In order for programmatic partners (e.g. Adexchange, Headerbidding or Backfill) to bid as high as possible for an ad placement, this app ad placement must be told which stationary website it actually belongs to. This is done via the content-url parameter in the adrequest. The URL of the web page that matches the content in the app as closely as possible must be passed here as the value. Example: An app article should link to its stationary web article in the content-url parameter, an app home page to the home page, etc. The GMA SDK has a setContentUrl function for this purpose. This is described in more detail here:&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting?hl=de#content_url&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting?hl=de#content_url&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=78</id>
		<title>Prebid Mobile SDK in Apps</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=78"/>
		<updated>2023-07-28T07:49:50Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The Prebid Mobile SDK serves to integrate different header bidding providers in one app, and these providers can then make initial bids for the available ad positions on a page when the page is called. The winning bid is then forwarded via the Google Mobile Ads SDK to the ad server, which compares the bid with other bookings that are present there and serves the most suitable booking.&lt;br /&gt;
&lt;br /&gt;
==Integration and mode of operation==&lt;br /&gt;
[[Datei:Prebid SDK.png|800px]]&lt;br /&gt;
#Integrate the Prebid Mobile SDK&lt;br /&gt;
::iOS: https://github.com/prebid/prebid-mobile-ios&lt;br /&gt;
::Android: https://github.com/prebid/prebid-mobile-android&lt;br /&gt;
#Create the banner ad unit with all sizes and additional sizes that are to be included in the prebid request (the PREBID_SERVER_CONFIGURATION_ID is taken from a separate table and assigned to the corresponding position (Note for Ad Technology iq digital: The PREBID_SERVER_CONFIGURATION_ID of a placement is the &amp;quot;Targeting ID&amp;quot; in Prebid Server Premioum by Xandr)).&lt;br /&gt;
#The Prebid Mobile SDK sends a request to the prebid server.&lt;br /&gt;
#The prebid server sends back an offer (if present).&lt;br /&gt;
#The ad request to Google Ad Manager is supplemented by the prebid parameters.&lt;br /&gt;
#Google Ad Manager reviews the request and serves the ad.&lt;br /&gt;
#The app displays the ad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Android example===&lt;br /&gt;
The example on the page shows that man wohl einen DFP PublisherAdView (??) and then generates the prebid banner ad unit. This is then given the prebid server request ID assigned to the banner ad unit and defines a size. Additional sizes are transmitted to the object using the add additional size method. Here, all the sizes should be transmitted that are also normally part of the ad request for the position.&lt;br /&gt;
&lt;br /&gt;
The bids are then connected using fetchDemand. The result codes are defined here: http://prebid.org/prebid-mobile/pbm- api/android/pbm-api-result-codes-android.html&lt;br /&gt;
In general, however, an ad request should always occur, regardless of whether bids are contained or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Important configurations==&lt;br /&gt;
In our case, the Prebid Mobile SDK works together with Prebid Server Premium and therefore needs a few adjustments:&lt;br /&gt;
&lt;br /&gt;
===Set Host===&lt;br /&gt;
Prebid Server Premium must be configured as a custom host. This is done in Android like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host custom = Host.CUSTOM;&lt;br /&gt;
custom.setHostUrl(&amp;quot;https://ib.adnxs.com/openrtb2/prebid&amp;quot;);&lt;br /&gt;
PrebidMobile.setPrebidServerHost(custom);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[https://docs.prebid.org/prebid-mobile/pbm-api/android/prebidmobile-object-android.html#sethost Anleitung Android Custom Host]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://docs.prebid.org/prebid-mobile/pbm-api/ios/prebidmobile-object-ios.html Anleitung iOS Custom Host]&lt;br /&gt;
&lt;br /&gt;
===Set Account ID===&lt;br /&gt;
Our account ID must also be set.&lt;br /&gt;
&amp;lt;pre&amp;gt;PrebidMobile.setPrebidServerAccountId(&amp;quot;6975&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Important Links==&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/prebid-mobile.html Getting Started]&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/prebid-mobile-pbs.html#developers---using-the-sdk Developers using the SDK] &lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/privacy-regulation.html Privacy Regulation]&lt;br /&gt;
*[https://docs.prebid.org/prebid-server/use-cases/pbs-sdk.html#prebid-sdk-calls-prebid-server Prebid SDK Workflow]&lt;br /&gt;
&lt;br /&gt;
===iOS===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html Code Integration]&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/ios/pbm-banneradunit-ios.html Banner Adunit]&lt;br /&gt;
&lt;br /&gt;
===Android===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html Code Integration]&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/android/pbm-banneradunit-android.html Banner Adunit]&lt;br /&gt;
[[de:Prebid Mobile SDK in Apps]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=MediaWiki:Mobile.css&amp;diff=70</id>
		<title>MediaWiki:Mobile.css</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=MediaWiki:Mobile.css&amp;diff=70"/>
		<updated>2022-12-08T08:44:38Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Das folgende CSS wird für alle Nutzer der mobilen Ansicht geladen. */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.mainheader {&lt;br /&gt;
background-color: #a2a9b1;&lt;br /&gt;
color:#FFFFFF;&lt;br /&gt;
text-align:left;&lt;br /&gt;
font-size:25px;&lt;br /&gt;
width:100%;&lt;br /&gt;
padding-left:5px;&lt;br /&gt;
height:120px;&lt;br /&gt;
padding-top:30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainheader .title {&lt;br /&gt;
height:30px;&lt;br /&gt;
line-height:30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.bold {&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 300;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Light&#039;), local(&#039;Rajdhani-Light&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 400;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Regular&#039;), local(&#039;Rajdhani-Regular&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Medium&#039;), local(&#039;Rajdhani-Medium&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani SemiBold&#039;), local(&#039;Rajdhani-SemiBold&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Bold&#039;), local(&#039;Rajdhani-Bold&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
*   { &lt;br /&gt;
    font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
    font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pre-content h1, .content h1, .content h2, .content h3, .mw-body h1, .mw-body-content h1, .mw-body-content h2, .mw-body-content h3 {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
.content h3, .mw-body-content h3 {&lt;br /&gt;
text-decoration:underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p, p *, li, li * {&lt;br /&gt;
font-family: Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
.branding-box a span {&lt;br /&gt;
    background-image: url(/de/resources/assets/iq-digital.png?53da3);&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    background-size: 100px auto;&lt;br /&gt;
    background-position: left center;&lt;br /&gt;
    padding-left:100px;&lt;br /&gt;
height:32px;&lt;br /&gt;
float:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.header .branding-box {&lt;br /&gt;
width:90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.minerva-header .branding-box a &amp;gt; * {&lt;br /&gt;
    float: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.header {&lt;br /&gt;
    white-space:normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a {&lt;br /&gt;
color:#ee7f00;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a:visited {&lt;br /&gt;
color:#ee7f00;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox {&lt;br /&gt;
  position:relative;&lt;br /&gt;
  width:320px;&lt;br /&gt;
  margin: 16px auto 16px auto;&lt;br /&gt;
box-sizing:border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox *{&lt;br /&gt;
  box-sizing:border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .container{&lt;br /&gt;
  width:320px;&lt;br /&gt;
 padding:1em;&lt;br /&gt;
background-color:#ffeecc;&lt;br /&gt;
-webkit-border-radius: 5px;&lt;br /&gt;
-moz-border-radius: 5px;&lt;br /&gt;
border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .infos {&lt;br /&gt;
border-top: 1px solid black;&lt;br /&gt;
padding-top:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox span {&lt;br /&gt;
display:inline-block;&lt;br /&gt;
vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.specsBox .key {&lt;br /&gt;
width:33%;&lt;br /&gt;
text-align:left;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .value {&lt;br /&gt;
width:66%;&lt;br /&gt;
text-align:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .name {&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox h3 {&lt;br /&gt;
margin: 0 auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.content .specsBox ul {&lt;br /&gt;
padding-left:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement {&lt;br /&gt;
width:320px;&lt;br /&gt;
background-color: #fff1e6;&lt;br /&gt;
border-radius: 5px;&lt;br /&gt;
margin-right:5px;&lt;br /&gt;
margin-bottom: 10px;&lt;br /&gt;
padding-bottom:5px;&lt;br /&gt;
font-size:14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement *{&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement:last-of-type {&lt;br /&gt;
margin-bottom:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .titel{&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
font-size:120%;&lt;br /&gt;
text-align:center;&lt;br /&gt;
border-bottom: 2px solid #ffad66;&lt;br /&gt;
background-color: #ffe4cc;&lt;br /&gt;
padding: 5px 5px 0 5px;&lt;br /&gt;
border-top-left-radius:5px;&lt;br /&gt;
border-top-right-radius:5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .abmessung, .anlieferungselement .gewicht, .anlieferungselement .format, .anlieferungselement .alternative, .anlieferungselement .anmerkung, .anlieferungselement .abmessungExpandiert, .anlieferungselement .mandanten, .anlieferungselement .dauer, .anlieferungselement .seitenverhaeltnis{&lt;br /&gt;
padding-left: 5px;&lt;br /&gt;
padding-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .bezeichnung{&lt;br /&gt;
width:33%;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
padding-right:5px;&lt;br /&gt;
display:inline-block;&lt;br /&gt;
vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.anlieferungselement .wert{&lt;br /&gt;
width:67%;&lt;br /&gt;
display:inline-block;&lt;br /&gt;
}&lt;br /&gt;
.anlieferung_kombination {&lt;br /&gt;
display:flex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.horizontal {&lt;br /&gt;
align-content:center;&lt;br /&gt;
flex-direction:row;&lt;br /&gt;
border: 2px solid #ffad66;&lt;br /&gt;
flex-wrap:wrap;&lt;br /&gt;
justify-content:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.vertikal{&lt;br /&gt;
justify-content: center;&lt;br /&gt;
flex-direction:column;&lt;br /&gt;
align-content:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination &amp;gt; .container &amp;gt;  .anlieferung_kombination.vertikal{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination &amp;gt; .container &amp;gt; .anlieferung_kombination.horizontal{&lt;br /&gt;
flex:initial;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.horizontal &amp;gt; .anlieferungselement {&lt;br /&gt;
flex:none;&lt;br /&gt;
margin: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.horizontal &amp;gt; .zeichen{&lt;br /&gt;
flex:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination &amp;gt; .zeichen{&lt;br /&gt;
font-weight: bold;&lt;br /&gt;
font-size: 200%;&lt;br /&gt;
width: 100px;&lt;br /&gt;
text-align: center;&lt;br /&gt;
vertical-align:middle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.vertikal &amp;gt; .zeichen{&lt;br /&gt;
font-size:300%;&lt;br /&gt;
line-height:80px;&lt;br /&gt;
height:80px;&lt;br /&gt;
width:320px;&lt;br /&gt;
align-self:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.vertikal .header {&lt;br /&gt;
background-color: #ffe4cc;&lt;br /&gt;
width: 100%;&lt;br /&gt;
text-align: center;&lt;br /&gt;
border: 2px solid #ffad66;&lt;br /&gt;
border-bottom: none;&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination .header .bezeichnung{&lt;br /&gt;
font-size:200%;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
.anlieferung_kombination .header .text {&lt;br /&gt;
font-size:150%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.galerie {&lt;br /&gt;
margin-top:1em;&lt;br /&gt;
margin-bottom:1em;&lt;br /&gt;
text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .galerie .gallery {&lt;br /&gt;
margin:0;&lt;br /&gt;
padding:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainpage {&lt;br /&gt;
display:flex;&lt;br /&gt;
flex-wrap:wrap;&lt;br /&gt;
justify-content:center;&lt;br /&gt;
min-width:320px;&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainpage * {&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapter {&lt;br /&gt;
width:320px;&lt;br /&gt;
min-width:320px;&lt;br /&gt;
margin-right:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 352px) {&lt;br /&gt;
  .mainpage, .specsBox {&lt;br /&gt;
    margin-left:-16px;&lt;br /&gt;
    margin-right:-16px;&lt;br /&gt;
  }&lt;br /&gt;
  .chapter {&lt;br /&gt;
    width:320px;&lt;br /&gt;
    min-width:320px;&lt;br /&gt;
    margin-right:0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .mainheader {&lt;br /&gt;
    padding-top:15px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 370px) {&lt;br /&gt;
  .mainheader {&lt;br /&gt;
    padding-top:15px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 720px) {&lt;br /&gt;
  .mainpage {&lt;br /&gt;
    margin-left:-3.35em;&lt;br /&gt;
    margin-right:-3.35em;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .mainheader .title{&lt;br /&gt;
    text-align:left;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 672px) {&lt;br /&gt;
  .chapter {&lt;br /&gt;
    margin-right:0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .mainheader .title{&lt;br /&gt;
    text-align:left;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.kontakt{&lt;br /&gt;
    margin: 15px 20px 5px 0;&lt;br /&gt;
    width:250px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.kontakt_name{&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-size:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.kontakt_funktion{&lt;br /&gt;
    border-bottom: 1px solid black;&lt;br /&gt;
    font-size:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.included .specsBox .infos .anlieferung{&lt;br /&gt;
display:none;&lt;br /&gt;
}&lt;br /&gt;
.included .specsBox .infos.text{&lt;br /&gt;
padding-top:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.warnung::after {&lt;br /&gt;
 clear:both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.warnung::before {&lt;br /&gt;
 content: &amp;quot;Warnung&amp;quot;;&lt;br /&gt;
 background:url(/de/images/c/cb/Warning.png) no-repeat;&lt;br /&gt;
 background-position:center;&lt;br /&gt;
 background-size:24px auto;&lt;br /&gt;
 width:24px;&lt;br /&gt;
 height:24px;&lt;br /&gt;
line-height:24px;&lt;br /&gt;
 display:inline-block;&lt;br /&gt;
 color:rgba(0,0,0,0);&lt;br /&gt;
 float:left;&lt;br /&gt;
 margin-right:10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
div.warnung {&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 font-size:120%;&lt;br /&gt;
 color:#ff0000;&lt;br /&gt;
 float:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist {&lt;br /&gt;
  width:320px;&lt;br /&gt;
  border: 0.5px solid #a2a9b1;&lt;br /&gt;
  background-color: #f8f9fa;&lt;br /&gt;
  color: #222;&lt;br /&gt;
  margin: 1em auto;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
  font-size:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist .clheader {&lt;br /&gt;
  font-size:22px;&lt;br /&gt;
  background-color:#525050;&lt;br /&gt;
  color:#FFF;&lt;br /&gt;
  padding: 0.2em 0.4em;&lt;br /&gt;
  font-weight:bold;&lt;br /&gt;
  font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist ul {&lt;br /&gt;
  margin:0;&lt;br /&gt;
  padding:0;&lt;br /&gt;
  font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist li {&lt;br /&gt;
  list-style-type: none;&lt;br /&gt;
  list-style-image: none;&lt;br /&gt;
  padding: 0.2em 0.4em;&lt;br /&gt;
  margin:0;&lt;br /&gt;
  font-weight:bold;&lt;br /&gt;
  border-bottom: 0.5px solid #a2a9b1;&lt;br /&gt;
  line-height:1.6;&lt;br /&gt;
  font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
}&lt;br /&gt;
.chapterlist li *{&lt;br /&gt;
font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=MediaWiki:Common.css&amp;diff=69</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=MediaWiki:Common.css&amp;diff=69"/>
		<updated>2022-12-08T07:49:57Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Das folgende CSS wird für alle Benutzeroberflächen geladen. */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.bold {&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div#p-logo::after {&lt;br /&gt;
    content: &amp;quot;Dokumentation&amp;quot;;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color:#ef7f00;&lt;br /&gt;
margin-top:-30px;&lt;br /&gt;
margin-left:1.1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 300;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Light&#039;), local(&#039;Rajdhani-Light&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 400;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Regular&#039;), local(&#039;Rajdhani-Regular&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Medium&#039;), local(&#039;Rajdhani-Medium&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani SemiBold&#039;), local(&#039;Rajdhani-SemiBold&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Bold&#039;), local(&#039;Rajdhani-Bold&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*   { &lt;br /&gt;
    font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
    font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pre-content h1, .content h1, .content h2, .content h3, .mw-body h1, .mw-body-content h1, .mw-body-content h2, .mw-body-content h3 {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.content h3, .mw-body-content h3 {&lt;br /&gt;
text-decoration:underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p, p *, li, li * {&lt;br /&gt;
font-family: Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cb {&lt;br /&gt;
clear:both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.underline {&lt;br /&gt;
  text-decoration:underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blue {&lt;br /&gt;
  color:#0099ff;&lt;br /&gt;
}&lt;br /&gt;
.orange{&lt;br /&gt;
  color:#ef7f00;&lt;br /&gt;
}&lt;br /&gt;
.red{&lt;br /&gt;
  color:#ff0000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.standardtable {&lt;br /&gt;
  border: 1px solid black;&lt;br /&gt;
  border-collapse:collapse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.standardtable td, table.standardtable th{&lt;br /&gt;
  padding:5px;&lt;br /&gt;
  border: 1px solid black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ul.widegallery {&lt;br /&gt;
text-align:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a, #mw-panel .portal .body li a {&lt;br /&gt;
color:#ee7f00;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a:visited, #mw-panel .portal .body li a:visited {&lt;br /&gt;
color:#ee7f00;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox {&lt;br /&gt;
  position:relative;&lt;br /&gt;
  float:right;&lt;br /&gt;
  width:320px;&lt;br /&gt;
  margin: 16px 0 16px 16px;&lt;br /&gt;
box-sizing:border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox *{&lt;br /&gt;
  box-sizing:border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .container{&lt;br /&gt;
  width:320px;&lt;br /&gt;
  padding:1em;&lt;br /&gt;
  background-color:#ffeecc;&lt;br /&gt;
  -webkit-border-radius: 5px;&lt;br /&gt;
  -moz-border-radius: 5px;&lt;br /&gt;
  border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .infos {&lt;br /&gt;
border-top: 1px solid black;&lt;br /&gt;
padding-top:1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox span {&lt;br /&gt;
display:inline-block;&lt;br /&gt;
vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.specsBox .key {&lt;br /&gt;
width:33%;&lt;br /&gt;
text-align:left;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .value {&lt;br /&gt;
width:66%;&lt;br /&gt;
text-align:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .name {&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox h3 {&lt;br /&gt;
margin: 0 auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.content .specsBox ul {&lt;br /&gt;
padding-left:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement {&lt;br /&gt;
width:320px;&lt;br /&gt;
background-color: #fff1e6;&lt;br /&gt;
border-radius: 5px;&lt;br /&gt;
margin-right:5px;&lt;br /&gt;
margin-bottom: 10px;&lt;br /&gt;
padding-bottom:5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement *{&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement:last-of-type {&lt;br /&gt;
margin-bottom:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .titel{&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
font-size:120%;&lt;br /&gt;
text-align:center;&lt;br /&gt;
border-bottom: 2px solid #ffad66;&lt;br /&gt;
background-color: #ffe4cc;&lt;br /&gt;
padding: 5px 5px 0 5px;&lt;br /&gt;
border-top-left-radius:5px;&lt;br /&gt;
border-top-right-radius:5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .subtitel{&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
font-size:120%;&lt;br /&gt;
text-align:center;&lt;br /&gt;
border-bottom: 2px solid #ffad66;&lt;br /&gt;
background-color: #ffe4cc;&lt;br /&gt;
padding: 5px 5px 0 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .abmessung, .anlieferungselement .gewicht, .anlieferungselement .format, .anlieferungselement .alternative, .anlieferungselement .anmerkung, .anlieferungselement .abmessungExpandiert, .anlieferungselement .mandanten, .anlieferungselement .dauer, .anlieferungselement .seitenverhaeltnis{&lt;br /&gt;
padding-left: 5px;&lt;br /&gt;
padding-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .bezeichnung{&lt;br /&gt;
width:33%;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
padding-right:5px;&lt;br /&gt;
display:inline-block;&lt;br /&gt;
vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.anlieferungselement .wert{&lt;br /&gt;
width:67%;&lt;br /&gt;
display:inline-block;&lt;br /&gt;
}&lt;br /&gt;
.anlieferung_kombination {&lt;br /&gt;
display:flex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.horizontal {&lt;br /&gt;
align-content:center;&lt;br /&gt;
flex-direction:row;&lt;br /&gt;
border: 2px solid #ffad66;&lt;br /&gt;
flex-wrap:wrap;&lt;br /&gt;
justify-content:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.vertikal{&lt;br /&gt;
justify-content: center;&lt;br /&gt;
flex-direction:column;&lt;br /&gt;
align-content:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination &amp;gt; .container &amp;gt;  .anlieferung_kombination.vertikal{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination &amp;gt; .container &amp;gt; .anlieferung_kombination.horizontal{&lt;br /&gt;
flex:initial;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.horizontal &amp;gt; .anlieferungselement {&lt;br /&gt;
flex:none;&lt;br /&gt;
margin: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.horizontal &amp;gt; .zeichen{&lt;br /&gt;
flex:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination &amp;gt; .zeichen{&lt;br /&gt;
font-weight: bold;&lt;br /&gt;
font-size: 200%;&lt;br /&gt;
width: 100px;&lt;br /&gt;
text-align: center;&lt;br /&gt;
vertical-align:middle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.vertikal &amp;gt; .zeichen{&lt;br /&gt;
font-size:300%;&lt;br /&gt;
line-height:80px;&lt;br /&gt;
height:80px;&lt;br /&gt;
width:320px;&lt;br /&gt;
align-self:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.vertikal .header {&lt;br /&gt;
background-color: #ffe4cc;&lt;br /&gt;
width: 100%;&lt;br /&gt;
text-align: center;&lt;br /&gt;
border: 2px solid #ffad66;&lt;br /&gt;
border-bottom: none;&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination .header .bezeichnung{&lt;br /&gt;
font-size:200%;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
.anlieferung_kombination .header .text {&lt;br /&gt;
font-size:150%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.galerie {&lt;br /&gt;
margin-top:1em;&lt;br /&gt;
margin-bottom:1em;&lt;br /&gt;
text-align:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainpage {&lt;br /&gt;
display:flex;&lt;br /&gt;
flex-wrap:wrap;&lt;br /&gt;
justify-content:flex-start;&lt;br /&gt;
min-width:320px;&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainpage * {&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapter {&lt;br /&gt;
width:320px;&lt;br /&gt;
min-width:320px;&lt;br /&gt;
margin-right:1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.kontakt{&lt;br /&gt;
    margin: 15px 20px 5px 0;&lt;br /&gt;
    width:200px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.kontakt_name{&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-size:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.kontakt_funktion{&lt;br /&gt;
    border-bottom: 1px solid black;&lt;br /&gt;
    font-size:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.included .specsBox .infos .anlieferung{&lt;br /&gt;
display:none;&lt;br /&gt;
}&lt;br /&gt;
.included .specsBox .infos.text{&lt;br /&gt;
padding-top:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.warnung::after {&lt;br /&gt;
 clear:both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.warnung .icon {&lt;br /&gt;
 content: &amp;quot;Warnung&amp;quot;;&lt;br /&gt;
 background:url(/de/images/c/cb/Warning.png) no-repeat;&lt;br /&gt;
 background-position:center;&lt;br /&gt;
 background-size:24px auto;&lt;br /&gt;
 width:24px;&lt;br /&gt;
 height:24px;&lt;br /&gt;
line-height:24px;&lt;br /&gt;
 display:inline-block;&lt;br /&gt;
 color:rgba(0,0,0,0);&lt;br /&gt;
 float:left;&lt;br /&gt;
 margin-right:10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
div.warnung {&lt;br /&gt;
 background-color:#ffad99;&lt;br /&gt;
border:1px solid black;&lt;br /&gt;
float:left;&lt;br /&gt;
padding:5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-panel #p-Start.portal .body li {&lt;br /&gt;
font-size:20px;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist {&lt;br /&gt;
  width:320px;&lt;br /&gt;
  border: 0.5px solid #a2a9b1;&lt;br /&gt;
  background-color: #f8f9fa;&lt;br /&gt;
  color: #222;&lt;br /&gt;
  margin: 1em 0;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
  font-size:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist .clheader {&lt;br /&gt;
  font-size:22px;&lt;br /&gt;
  background-color:#525050;&lt;br /&gt;
  color:#FFF;&lt;br /&gt;
  padding: 0.2em 0.4em;&lt;br /&gt;
  font-weight:bold;&lt;br /&gt;
  font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist ul {&lt;br /&gt;
  margin:0;&lt;br /&gt;
  padding:0;&lt;br /&gt;
  font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist li {&lt;br /&gt;
  list-style-type: none;&lt;br /&gt;
  list-style-image: none;&lt;br /&gt;
  padding: 0.2em 0.4em;&lt;br /&gt;
  margin:0;&lt;br /&gt;
  font-weight:bold;&lt;br /&gt;
  border-bottom: 0.5px solid #a2a9b1;&lt;br /&gt;
  line-height:1.6;&lt;br /&gt;
  font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
}&lt;br /&gt;
.chapterlist li *{&lt;br /&gt;
font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainheader {&lt;br /&gt;
background-color: #a2a9b1;&lt;br /&gt;
color:#FFFFFF;&lt;br /&gt;
text-align:left;&lt;br /&gt;
font-size:60px;&lt;br /&gt;
width:100%;&lt;br /&gt;
padding-left:20px;&lt;br /&gt;
height:300px;&lt;br /&gt;
padding-top:70px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainheader .title {&lt;br /&gt;
height:80px;&lt;br /&gt;
line-height:80px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-highlight pre {&lt;br /&gt;
    font-family: &amp;quot;Courier New&amp;quot;, monospace;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sdkappinfo .wichtig {&lt;br /&gt;
background-color:#e6ffb3;&lt;br /&gt;
border:1px solid black;&lt;br /&gt;
padding:10px;&lt;br /&gt;
float:right;&lt;br /&gt;
margin-left:10px;&lt;br /&gt;
width:320px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sdkappinfo .wichtig .warnung {&lt;br /&gt;
width:300px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sdkappinfo .wichtig .warnung .text{&lt;br /&gt;
float:right;&lt;br /&gt;
width:85%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.keys {&lt;br /&gt;
background-color:rgb(235, 235, 235);&lt;br /&gt;
border: 1px solid lightgrey;&lt;br /&gt;
display:table;&lt;br /&gt;
margin:1em;&lt;br /&gt;
padding:1em;&lt;br /&gt;
border-radius:5px;&lt;br /&gt;
flex-wrap:wrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.keys .box {&lt;br /&gt;
display:inline-block;&lt;br /&gt;
width:40px;&lt;br /&gt;
height:40px;&lt;br /&gt;
line-height:40px;&lt;br /&gt;
vertical-align:middle;&lt;br /&gt;
text-align:center;&lt;br /&gt;
background-color:rgb(35, 35, 35);&lt;br /&gt;
border:1px solid black;&lt;br /&gt;
border-radius:5px;&lt;br /&gt;
margin:5px;&lt;br /&gt;
color:#FFFFFF;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
font-size:140%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.warning{&lt;br /&gt;
 border: 1px red solid;&lt;br /&gt;
 width: 100xp;&lt;br /&gt;
 height: auto;&lt;br /&gt;
 display: block;&lt;br /&gt;
 background: rgba(255,0,0,0.1);&lt;br /&gt;
}&lt;br /&gt;
div.warning h2{&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
    font-size: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
div.warning div.text{&lt;br /&gt;
 color:black;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
#p-logo a {&lt;br /&gt;
background-size: 100% auto;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=MediaWiki:Mobile.css&amp;diff=68</id>
		<title>MediaWiki:Mobile.css</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=MediaWiki:Mobile.css&amp;diff=68"/>
		<updated>2022-12-08T07:48:41Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Das folgende CSS wird für alle Nutzer der mobilen Ansicht geladen. */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.mainheader {&lt;br /&gt;
background-color: #a2a9b1;&lt;br /&gt;
color:#FFFFFF;&lt;br /&gt;
text-align:left;&lt;br /&gt;
font-size:25px;&lt;br /&gt;
width:100%;&lt;br /&gt;
padding-left:5px;&lt;br /&gt;
height:120px;&lt;br /&gt;
padding-top:30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainheader .title {&lt;br /&gt;
height:30px;&lt;br /&gt;
line-height:30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.bold {&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 300;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Light&#039;), local(&#039;Rajdhani-Light&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 400;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Regular&#039;), local(&#039;Rajdhani-Regular&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Medium&#039;), local(&#039;Rajdhani-Medium&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani SemiBold&#039;), local(&#039;Rajdhani-SemiBold&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Bold&#039;), local(&#039;Rajdhani-Bold&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
*   { &lt;br /&gt;
    font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
    font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pre-content h1, .content h1, .content h2, .content h3, .mw-body h1, .mw-body-content h1, .mw-body-content h2, .mw-body-content h3 {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
.content h3, .mw-body-content h3 {&lt;br /&gt;
text-decoration:underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p, p *, li, li * {&lt;br /&gt;
font-family: Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
.branding-box a span {&lt;br /&gt;
    background-image: url(/de/resources/assets/iq-digital.png?53da3);&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    background-size: 100px auto;&lt;br /&gt;
    background-position: left center;&lt;br /&gt;
    padding-left:100px;&lt;br /&gt;
height:32px;&lt;br /&gt;
float:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.header .branding-box {&lt;br /&gt;
width:90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.header {&lt;br /&gt;
    white-space:normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a {&lt;br /&gt;
color:#ee7f00;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a:visited {&lt;br /&gt;
color:#ee7f00;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox {&lt;br /&gt;
  position:relative;&lt;br /&gt;
  width:320px;&lt;br /&gt;
  margin: 16px auto 16px auto;&lt;br /&gt;
box-sizing:border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox *{&lt;br /&gt;
  box-sizing:border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .container{&lt;br /&gt;
  width:320px;&lt;br /&gt;
 padding:1em;&lt;br /&gt;
background-color:#ffeecc;&lt;br /&gt;
-webkit-border-radius: 5px;&lt;br /&gt;
-moz-border-radius: 5px;&lt;br /&gt;
border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .infos {&lt;br /&gt;
border-top: 1px solid black;&lt;br /&gt;
padding-top:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox span {&lt;br /&gt;
display:inline-block;&lt;br /&gt;
vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.specsBox .key {&lt;br /&gt;
width:33%;&lt;br /&gt;
text-align:left;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .value {&lt;br /&gt;
width:66%;&lt;br /&gt;
text-align:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .name {&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox h3 {&lt;br /&gt;
margin: 0 auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.content .specsBox ul {&lt;br /&gt;
padding-left:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement {&lt;br /&gt;
width:320px;&lt;br /&gt;
background-color: #fff1e6;&lt;br /&gt;
border-radius: 5px;&lt;br /&gt;
margin-right:5px;&lt;br /&gt;
margin-bottom: 10px;&lt;br /&gt;
padding-bottom:5px;&lt;br /&gt;
font-size:14px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement *{&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement:last-of-type {&lt;br /&gt;
margin-bottom:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .titel{&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
font-size:120%;&lt;br /&gt;
text-align:center;&lt;br /&gt;
border-bottom: 2px solid #ffad66;&lt;br /&gt;
background-color: #ffe4cc;&lt;br /&gt;
padding: 5px 5px 0 5px;&lt;br /&gt;
border-top-left-radius:5px;&lt;br /&gt;
border-top-right-radius:5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .abmessung, .anlieferungselement .gewicht, .anlieferungselement .format, .anlieferungselement .alternative, .anlieferungselement .anmerkung, .anlieferungselement .abmessungExpandiert, .anlieferungselement .mandanten, .anlieferungselement .dauer, .anlieferungselement .seitenverhaeltnis{&lt;br /&gt;
padding-left: 5px;&lt;br /&gt;
padding-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .bezeichnung{&lt;br /&gt;
width:33%;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
padding-right:5px;&lt;br /&gt;
display:inline-block;&lt;br /&gt;
vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.anlieferungselement .wert{&lt;br /&gt;
width:67%;&lt;br /&gt;
display:inline-block;&lt;br /&gt;
}&lt;br /&gt;
.anlieferung_kombination {&lt;br /&gt;
display:flex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.horizontal {&lt;br /&gt;
align-content:center;&lt;br /&gt;
flex-direction:row;&lt;br /&gt;
border: 2px solid #ffad66;&lt;br /&gt;
flex-wrap:wrap;&lt;br /&gt;
justify-content:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.vertikal{&lt;br /&gt;
justify-content: center;&lt;br /&gt;
flex-direction:column;&lt;br /&gt;
align-content:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination &amp;gt; .container &amp;gt;  .anlieferung_kombination.vertikal{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination &amp;gt; .container &amp;gt; .anlieferung_kombination.horizontal{&lt;br /&gt;
flex:initial;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.horizontal &amp;gt; .anlieferungselement {&lt;br /&gt;
flex:none;&lt;br /&gt;
margin: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.horizontal &amp;gt; .zeichen{&lt;br /&gt;
flex:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination &amp;gt; .zeichen{&lt;br /&gt;
font-weight: bold;&lt;br /&gt;
font-size: 200%;&lt;br /&gt;
width: 100px;&lt;br /&gt;
text-align: center;&lt;br /&gt;
vertical-align:middle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.vertikal &amp;gt; .zeichen{&lt;br /&gt;
font-size:300%;&lt;br /&gt;
line-height:80px;&lt;br /&gt;
height:80px;&lt;br /&gt;
width:320px;&lt;br /&gt;
align-self:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.vertikal .header {&lt;br /&gt;
background-color: #ffe4cc;&lt;br /&gt;
width: 100%;&lt;br /&gt;
text-align: center;&lt;br /&gt;
border: 2px solid #ffad66;&lt;br /&gt;
border-bottom: none;&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination .header .bezeichnung{&lt;br /&gt;
font-size:200%;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
.anlieferung_kombination .header .text {&lt;br /&gt;
font-size:150%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.galerie {&lt;br /&gt;
margin-top:1em;&lt;br /&gt;
margin-bottom:1em;&lt;br /&gt;
text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .galerie .gallery {&lt;br /&gt;
margin:0;&lt;br /&gt;
padding:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainpage {&lt;br /&gt;
display:flex;&lt;br /&gt;
flex-wrap:wrap;&lt;br /&gt;
justify-content:center;&lt;br /&gt;
min-width:320px;&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainpage * {&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapter {&lt;br /&gt;
width:320px;&lt;br /&gt;
min-width:320px;&lt;br /&gt;
margin-right:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 352px) {&lt;br /&gt;
  .mainpage, .specsBox {&lt;br /&gt;
    margin-left:-16px;&lt;br /&gt;
    margin-right:-16px;&lt;br /&gt;
  }&lt;br /&gt;
  .chapter {&lt;br /&gt;
    width:320px;&lt;br /&gt;
    min-width:320px;&lt;br /&gt;
    margin-right:0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .mainheader {&lt;br /&gt;
    padding-top:15px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 370px) {&lt;br /&gt;
  .mainheader {&lt;br /&gt;
    padding-top:15px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 720px) {&lt;br /&gt;
  .mainpage {&lt;br /&gt;
    margin-left:-3.35em;&lt;br /&gt;
    margin-right:-3.35em;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .mainheader .title{&lt;br /&gt;
    text-align:left;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 672px) {&lt;br /&gt;
  .chapter {&lt;br /&gt;
    margin-right:0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .mainheader .title{&lt;br /&gt;
    text-align:left;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.kontakt{&lt;br /&gt;
    margin: 15px 20px 5px 0;&lt;br /&gt;
    width:250px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.kontakt_name{&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-size:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.kontakt_funktion{&lt;br /&gt;
    border-bottom: 1px solid black;&lt;br /&gt;
    font-size:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.included .specsBox .infos .anlieferung{&lt;br /&gt;
display:none;&lt;br /&gt;
}&lt;br /&gt;
.included .specsBox .infos.text{&lt;br /&gt;
padding-top:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.warnung::after {&lt;br /&gt;
 clear:both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.warnung::before {&lt;br /&gt;
 content: &amp;quot;Warnung&amp;quot;;&lt;br /&gt;
 background:url(/de/images/c/cb/Warning.png) no-repeat;&lt;br /&gt;
 background-position:center;&lt;br /&gt;
 background-size:24px auto;&lt;br /&gt;
 width:24px;&lt;br /&gt;
 height:24px;&lt;br /&gt;
line-height:24px;&lt;br /&gt;
 display:inline-block;&lt;br /&gt;
 color:rgba(0,0,0,0);&lt;br /&gt;
 float:left;&lt;br /&gt;
 margin-right:10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
div.warnung {&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 font-size:120%;&lt;br /&gt;
 color:#ff0000;&lt;br /&gt;
 float:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist {&lt;br /&gt;
  width:320px;&lt;br /&gt;
  border: 0.5px solid #a2a9b1;&lt;br /&gt;
  background-color: #f8f9fa;&lt;br /&gt;
  color: #222;&lt;br /&gt;
  margin: 1em auto;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
  font-size:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist .clheader {&lt;br /&gt;
  font-size:22px;&lt;br /&gt;
  background-color:#525050;&lt;br /&gt;
  color:#FFF;&lt;br /&gt;
  padding: 0.2em 0.4em;&lt;br /&gt;
  font-weight:bold;&lt;br /&gt;
  font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist ul {&lt;br /&gt;
  margin:0;&lt;br /&gt;
  padding:0;&lt;br /&gt;
  font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist li {&lt;br /&gt;
  list-style-type: none;&lt;br /&gt;
  list-style-image: none;&lt;br /&gt;
  padding: 0.2em 0.4em;&lt;br /&gt;
  margin:0;&lt;br /&gt;
  font-weight:bold;&lt;br /&gt;
  border-bottom: 0.5px solid #a2a9b1;&lt;br /&gt;
  line-height:1.6;&lt;br /&gt;
  font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
}&lt;br /&gt;
.chapterlist li *{&lt;br /&gt;
font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=64</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=64"/>
		<updated>2022-08-17T10:41:37Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app, e.g. politik (politics)&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are openingpage, swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored. Since Google&#039;s AppEventListener interface has a @NonNull annotation for data, the noad event simply passes the value &amp;quot;noad&amp;quot; for data, since the empty string is converted as null by Google.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=63</id>
		<title>Integration of the Google Mobile Ads SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Integration_of_the_Google_Mobile_Ads_SDK&amp;diff=63"/>
		<updated>2022-08-17T10:40:25Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this documentation is to explain the integration of the Google Mobile Ads SDK (GMA SDK) and the ad integration process of iq digital. It outlines the necessary and important features of this process and attempts to clarify common misunderstandings.&lt;br /&gt;
&lt;br /&gt;
The documentation begins with the GMA SDK and general information that applies to all ad formats designed to run in the app. This is followed by ad format-specific explanations and, finally, an explanation of ad format-specific events that have to be taken into consideration by the app.&lt;br /&gt;
&lt;br /&gt;
==Official documentation for the Google Mobile Ads SDK==&lt;br /&gt;
The Google Mobile Ads SDK (GMA SDK) provides everything that is necessary for ad serving in native apps.&lt;br /&gt;
&lt;br /&gt;
===Getting Started with the Google Mobile Ads SDK===&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start GMA SDK iOS Getting Started]&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start GMA SDK Android Getting Started]&lt;br /&gt;
&lt;br /&gt;
===Downloading the Google Mobile Ads SDK===&lt;br /&gt;
====Android====&lt;br /&gt;
The GMA SDK is integrated in the Android play services and is therefore present on Android devices.&lt;br /&gt;
&lt;br /&gt;
====iOS====&lt;br /&gt;
The GMA SDK for iOS can be downloaded here:&lt;br /&gt;
[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/download Download iOS]&lt;br /&gt;
&lt;br /&gt;
===Ad-Manager vs. Admob===&lt;br /&gt;
There are two versions of the documentation for the Google Mobile Ads SDK: one for Ad-Manager users and one for Admob users. iq digital is an Ad-Manager client, which is why it is essential that the browser URL includes https://developers.google.com/ad-manager/.... The Admob documentation differs slightly from the Ad-Manager documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to the life cycle of ad serving with the GMA SDK==&lt;br /&gt;
The life cycle of ad serving is briefly explained here using the example of banner ad serving.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GMA_SDK.png|800px|thumbnail|Übersicht Workflow der Werbeausspielung mit GMA SDK]]&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
The ad request is compiled in the app and comprises multiple components. The following components are important for successful ad serving:&lt;br /&gt;
;Consent String:The app requires a valid consent from the user for ad serving. This requires not only multiple relevant purposes but also Vendor 755 Google Advertising Products (see below).&lt;br /&gt;
;Creative Sizes:In most cases, we use multisize ad requests. This means that the ad request contains multiple creative sizes and that the ad server then checks whether it can provide a creative for one of these sizes. Examples include 320x1, 320x53, 320x80, 320x106, 320x160 etc.&lt;br /&gt;
;Adunit:The ad unit is the address of the ad position. The ad server then knows on which page an ad is to be served. The ad unit is the same for all ad requests of a page request. Example: /183/Rheinischer_Kurier_ios_phone/homepage&lt;br /&gt;
;Keywords (optional):Keywords are key-value pairs and can enhance an ad position with additional information needed for targeted ad serving. The ad positions of iq digital all contain a specific designation via which keywords are provided to the ad server. Example: kw=iqadtile1,digtransfrom&amp;amp;tile=1&amp;amp;doc=homepage&lt;br /&gt;
&lt;br /&gt;
===Adserver Google Admanager 360===&lt;br /&gt;
If the ad server possesses a valid consent, a distribution algorithm checks whether one or more ad bookings are present for the ad unit, creative sizes and keywords. If this is the case, the ad server selects the best one for this purpose. If multiple bookings are equally important, the ad server selects one of them at random. Only in the case of a “no booking” would the ad server issue a no ad or no fill message, stating that no booking exists for the combination of ad unit, creative size and keywords.&lt;br /&gt;
&lt;br /&gt;
===Serving within the app===&lt;br /&gt;
The app loads the response of the ad server comprising the template code and the creative components. It should be noted that the ad container is upsized to the creative size of the served creative. In the case of fullscreen ads, this size must be retroactively adapted to the display viewport size (in other words, device-independent pixels) by the app. In the case of a banner ad, the app generally receives one or more setsize events following the loading process via the AppEventHandler to be integrated and has to adapt the ad container to the new size if the new size differs from the creative size.&lt;br /&gt;
&lt;br /&gt;
===Impression counting===&lt;br /&gt;
An impression count measuring that an ad has been viewed is automatically sent by the GMA SDK as soon as at least 1px is in the visible area of the display.&lt;br /&gt;
&lt;br /&gt;
==General informationen==&lt;br /&gt;
===Adunits (zoning)===&lt;br /&gt;
For the purpose of addressing the pages, Google Ad Manager uses ad units, which can take the following forms:&lt;br /&gt;
*/networkId/level1&lt;br /&gt;
*/networkId/level1/pagetype&lt;br /&gt;
*/networkId/level1/level2/pagetype&lt;br /&gt;
*/networkId/level1/level2/level3/pagetype&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
====Explanation of terms====&lt;br /&gt;
;networkId:The network ID of iq digital is always to be entered here: 183&lt;br /&gt;
;level1:This is the designation of the app in Google Ad Manager and is predefined by iq digital. The designation consists of &amp;lt;appname&amp;gt;_app_&amp;lt;platform&amp;gt;_&amp;lt;devicetype&amp;gt;.&lt;br /&gt;
:;appname:The name of the app&lt;br /&gt;
:;platform:The operating system, in other words &#039;&#039;ios&#039;&#039; or &#039;&#039;android&#039;&#039;&lt;br /&gt;
:;devicetype:The device type, in other words &#039;&#039;phone&#039;&#039; or &#039;&#039;tablet&#039;&#039;&lt;br /&gt;
;level2:This is the designation of a section of the app, e.g. politik (politics)&lt;br /&gt;
;level3 (etc.):This is the designation for a sub-section. For example: in the case of politik as level2 ausland (foreign) would be a sub-section for level3. level4 and higher are further, deeper branches of the app and are not usually created as ad units. These types of pages would then be marketed via the supraordinate level3. Example: a page politik/ausland/usa is too specific to be marketed individually. In such a case, it is a good idea that it is only tagged down to level3, in other words as politik/ausland.&lt;br /&gt;
;pagetype:In apps with banner ads (e.g. news apps), seitentyp designates the different page types – in other words, whether the page is, for example, an overview, article or photo gallery page. Standard values here are homepage, index, artikel, bildgal. In apps with fullscreen ads (e.g. ePaper or newspaper apps), seitentyp refers to the different ad positions within the section – in other words, whether they are the first, second or third swipe ad, for example. Standard values are openingpage, swipe_1, swipe_2, swipe_3 etc.&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier news app with banner ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone /homepage&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/politik/bildgal&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/index&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/artikel&lt;br /&gt;
*/183/Rheinischer_Kurier_app_ios_phone/sport/bildgal&lt;br /&gt;
&lt;br /&gt;
====Example for the fictitious Rheinischer Kurier ePaper iPad app with fullscreen ads:====&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/preloading_ad&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/openingpage&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_1&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_2&lt;br /&gt;
*/183/Rheinischer_Kurier_epaper_app_ios_tablet/politik/swipe_3&lt;br /&gt;
&lt;br /&gt;
{{Warnung|text=The ad server does not permit any special characters in the ad units with the exception of the underscore &amp;quot;_&amp;quot;. Umlauts and the German letter “ß” are also not permitted. level2, level3 and seitentyp must also be written completely in lower case.&lt;br /&gt;
&lt;br /&gt;
The general idea behind the ad units of Google Ad Manager is that they can be dynamically and automatically generated from the CMS of the client. If the CMS is set up in such a way that it appears expedient to use different names, you must contact iq digital at the earliest opportunity to agree on a solution that is acceptable to all parties.&lt;br /&gt;
&lt;br /&gt;
In the case of sections with an and” or a “&amp;amp;” in the name (e.g. Wirtschaft &amp;amp; Politik (Business &amp;amp; Politics), it is a good idea to list only the main words separated by an underscore (i.e. wirtschaft_politik).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Creative sizes===&lt;br /&gt;
Google Ad Manager lists the creative sizes for the ad sizes. The actual size of the served ad may differ from the creative size (in such cases, we talk of “pseudo-size”). The app must poll all corresponding creative sizes for an ad request for the corresponding position. The often long list of sizes is due to the many possible different ad formats and the differences in direct and programmatic marketing.&lt;br /&gt;
&lt;br /&gt;
In the case of fullscreen ad and preloading ad positions, sizes for portrait and landscape mode are generally poled jointly.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a banner position:====&lt;br /&gt;
99x1, 320x1, 320x50, 320x53, 320x80, 320x160, 320x320, 300x50, 300x75, 300x100, 300x150, 300x250&lt;br /&gt;
(in this example, 99x1 and 320x1 are pseudo-sizes. 99x1 calls an outbooking from the ad server and this results in blanking of the ad position. 320x1 is an historical pseudo-size used in rare cases in the position iqadtile1 for ads that deviate from the norm. Each banner position has a comparable pseudo-size with the form 320xY, where Y is the position designation; e.g. 320x1, 320x3, 320x4, 320x8 etc.&lt;br /&gt;
&lt;br /&gt;
====Examples for creative sizes of a fullscreen position on an Android tablet:====&lt;br /&gt;
310x480, 480x310, 750x1024, 1024x750&lt;br /&gt;
&lt;br /&gt;
====Links to creative sizes in the Google Mobile Ads SDK:====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#multiple_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#multiple_ad_sizes&lt;br /&gt;
and&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#custom_ad_sizes&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#custom_ad_sizes&lt;br /&gt;
&lt;br /&gt;
===Keywords (attachment of key-value pairs)===&lt;br /&gt;
In the case of CustomTargeting, an ad request is always given a group of key-value pairs. Multiple values can be separated by a comma. These keywords have multiple functions:&lt;br /&gt;
*Certain bookings are only served if these keywords exist (e.g. for specific products or also in the case of test insertions).&lt;br /&gt;
*Bookings can be excluded from serving via these kinds of keywords (e.g. in order to prevent incorrect presentation of an ad booking).&lt;br /&gt;
*These kinds of keywords permit detailed serving reports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iq digital uses certain key-value pairs, the most important of which are explained below:&lt;br /&gt;
;kw:General keyword list: multiple values are generally separated by commas. Some legacy values are standard (e.g. digtransform, nospa, enozqi). There are also designators for the app or the page (e.g. Rheinischer_Kurier_app_ios_phone) as well as the ad position designation (e.g. iqadtile3).&lt;br /&gt;
;tile:The number of the ad position; in the case of an iqadtile3 therefore as value 3&lt;br /&gt;
;doc:The designation of the page type; valid values are homepage, index, artikel, bildgal.&lt;br /&gt;
;iqadtype:Specification of the platform; valid values are online, mew, app, amp.&lt;br /&gt;
;appver:The designation of the app version number (see below).&lt;br /&gt;
&lt;br /&gt;
You can find details of which keywords are used for which position in the creative_sizes_and_keywords.xlsc table provided by iq digital at the start of the project.&lt;br /&gt;
&lt;br /&gt;
====Links to CustomTargeting in the Google Mobile Ads SDK====&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/ios/targeting#custom_targeting&lt;br /&gt;
*https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#custom_targeting&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
[[Datei:Easteregg dialog.png|300px|thumbnail|Example from an Android app with text field for keywords and checkbox for USB debugging]]&lt;br /&gt;
An &amp;quot;Easter-Egg&amp;quot; function must be integrated in the app so that iq digital can check for problems and test new ad formats within the live app (version from the app or play store). The ad server DFP provides the option of serving test insertions via a keyword in the app.&lt;br /&gt;
&lt;br /&gt;
In a rarely frequented area of the app (such as the imprint), there should therefore be the option for “insiders” to call a small dialogue. This permits insiders to attach a self-selected keyword to every future ad request. The USB debug mode can be activated simultaneously or by ticking a checkbox to inspect the ad webviews in the Android app on Desktop Chrome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WebView.setWebContentsDebuggingEnabled(true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The webviews of the app can then be viewed in Desktop Chrome under Android with chrome://inspect. This permits easier analysis of errors in the presentation of the ad.&lt;br /&gt;
&lt;br /&gt;
Without a debug Easter Egg in the app, it is not possible to perform a test insertion after going live, and it is also not possible to analyse any occurring problems. This would prevent maintenance of the app by iq digital and also mean that the client would be unable to check his app himself with test advertising. The keyword function therefore serves to limit the group of people who would be able to see the test insertions.&lt;br /&gt;
&lt;br /&gt;
Attachment of the keywords is explained in more detail under #Attachment of key-value pairs.&lt;br /&gt;
&lt;br /&gt;
Multiple keywords are separated by commas.&lt;br /&gt;
&lt;br /&gt;
There are a wide range of options for activation of the Easter Egg. Multiple/Pointless taps on UI elements or highly specific input in the search field are just some examples. However, iq digital has defined a rule that the debug Easter Egg is activated identically under Android and iOS. We are happy to be of assistance with regard to the method via which the debug Easter Egg is activated.&lt;br /&gt;
&lt;br /&gt;
===Important notes on these instructions===&lt;br /&gt;
We will only compile the ad units for the ad positions and trial-run test advertising on the ad units at the start of the project. The ad units will then be transmitted to the clients. Please do not use the logic that is integrated in the SDK for test ads. The logic does not correspond to the way in which the advertising marketed by iq digital works and will result in misunderstandings. Instead, bookings with test ads are permanently active on the ad units, and these test ads are served by the ad server via a special test keyword in the ad request.&lt;br /&gt;
&lt;br /&gt;
===Contacts at iq digital===&lt;br /&gt;
Please feel free to contact iq digital if you have any questions or comments. In the event that we are unable to help, we have the option of including a developer from Google in the discussion.&lt;br /&gt;
&lt;br /&gt;
====Tim Lohmann (Mobile Developer Ad Technology)====&lt;br /&gt;
;Phone:+49 211 887 2336&lt;br /&gt;
;E-Mail:tim.lohmann@iqdigital.de&lt;br /&gt;
&lt;br /&gt;
===WImportant documents===&lt;br /&gt;
====List of creative sizes and keywords for each position:====&lt;br /&gt;
*&amp;lt;date&amp;gt;_dfp_creative_sizes.xlsx&lt;br /&gt;
====List of ad units:====&lt;br /&gt;
(These only serve as guidance. The apps should generate these zones dynamically from the CMS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appname&amp;gt; must be replaced by the corresponding app name.&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_android_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_tablet.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ android_phone.txt&lt;br /&gt;
*&amp;lt;date&amp;gt;_adunits_&amp;lt;appname&amp;gt;_ios_phone.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Preloading Ad==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad that is displayed during the loading screen (splash screen) of the app. It is displayed for 5s and then closes automatically. A “Close” button is displayed in a corner so that the user can access the content of the app without waiting.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Preloading Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Preloading Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position superimposes itself on the splash screen of the app like an overlay. The app can then load the content in the background.&lt;br /&gt;
|template=&lt;br /&gt;
*Scales the ad while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Closes the ad after 5s&lt;br /&gt;
*Positions and centres the ad&lt;br /&gt;
*Displays a “Close” button in a corner via which the user can return to the content at any time.&lt;br /&gt;
*In the case of an orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are defined and are made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request during the splash screen&lt;br /&gt;
*In the event of a booking:&lt;br /&gt;
**Generates the interstitial with the help of the GMA SDK.&lt;br /&gt;
**Upsizes the ad container to display size.&lt;br /&gt;
*In the case of an orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*Continues to prepare the content in the background.&lt;br /&gt;
*In the case of no booking: the content is loaded normally.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app is started by the user.&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the interstitial.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
#The ad closes automatically after 5s and the content behind the ad becomes visible.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app loads the content quite normally.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:320x480 and 480x320&lt;br /&gt;
;Tablet:768x1024 and 1024x768&amp;lt;br /&amp;gt;(with Android also additionally: 320x480&lt;br /&gt;
and 480x320)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtilePre&lt;br /&gt;
;tile:0&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Fullscreen Ads (also called swipe ads)==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a display-filling ad displayed between two regular content pages in the app. It can be horizontally swiped like the other content pages and is not overlaid by any parts of the app (like the app header or footer). If the user generates an orientation change event, the ad adapts to the new aspect ratio.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fullscreen Ad 1.png|x300px]]&lt;br /&gt;
[[Datei:Fullscreen Ad 2.png|300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is dynamically embedded between two content pages. The ad position is always on the right next to the page assigned to it in the content (e.g. Politik/swipe_1 means that the first politics content page is displayed first and that the advertising page appears with the next swipe). &lt;br /&gt;
|template=&lt;br /&gt;
*Scales ads while retaining the aspect ratio in line with the dimensions of the ad container.&lt;br /&gt;
*Positions and centres the ad.&lt;br /&gt;
*In the case of orientation change or resize event: scales the ads in line with the new dimensions. It can take several hundred milliseconds until all new dimensions are determined and can be made available by the webview browser.&lt;br /&gt;
Depending on the display, scaling can result in black or white bars at the edges. This always happens when the display has a different aspect ratio than the ads.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad request 1-2 content pages before the position so that the ad server has enough time to serve the ad.&lt;br /&gt;
*Dynamically generates an ad page in the page flow on the right next to the assigned content page.&lt;br /&gt;
*In the event of a booking: upsizes the ad container to display size.&lt;br /&gt;
*Blanks app header and footer (if necessary)&lt;br /&gt;
*In the case of orientation change or resize event: adapts the ad page and the ad container to the new display dimensions.&lt;br /&gt;
*In the case of no booking: removes the ad page from the page flow.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app dynamically generates the ad page.&lt;br /&gt;
#The ad container is upsized to the display dimensions.&lt;br /&gt;
#The ad template scales the ad in the container.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds that it has no ad booking.&lt;br /&gt;
#The app does not generate an ad page or removes a previously generated ad page from the page flow.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
;Smartphone:310x480 and 480x310&lt;br /&gt;
;Tablet:750x1024 and 1024x750&amp;lt;br /&amp;gt;(with Android also additionally: 310x480 and 480x310)&lt;br /&gt;
{{Warnung|text=The creative sizes are pseudo-sizes; they do not correspond to the actual dimensions of the ad.}}&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:iqadtileFull&lt;br /&gt;
;tile:1&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Banner ads==&lt;br /&gt;
{{SDKAppInfo&lt;br /&gt;
|info=&lt;br /&gt;
The ad position is a banner within a content page. Depending on the ad format, this ad may permit more or less interactivity for the end user. It may be animated or may be a complex HTML ad. It is also possible that the ad may change in size due to certain events.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Mobile High Impact Ad.png|x300px]]&lt;br /&gt;
|position=&lt;br /&gt;
The position is between content elements of a page and requires labelling as “Anzeige” (Advertisement) above the position. There are generally multiple positions within a page.&lt;br /&gt;
|template=&lt;br /&gt;
*Handles the functionality, which may be simple or complex depending on the ad format.&lt;br /&gt;
|app=&lt;br /&gt;
*Sends the ad requests for all positions on a page.&lt;br /&gt;
*Integrates an ad label “Advertisement” above the position for each position.&lt;br /&gt;
*Creates the ad container with a size that is included in the response from the ad server to the ad request.&lt;br /&gt;
*Listens with the EventListener for possible setsize or noad events and changes the ad container accordingly.&lt;br /&gt;
*In the event of an outbooking:&lt;br /&gt;
**If it receives a setsize event, it must adapt the ad position and the ad container to the new size where it differs from the current size.&lt;br /&gt;
**If it receives a noad event, it must completely remove or blank the ad position and the corresponding ad label.&lt;br /&gt;
|workflowad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an ad booking.&lt;br /&gt;
#The app generates the ad container with the size contained in the response of the ad server.&lt;br /&gt;
#It may be necessary to adapt the ad container due to a setsize event.&lt;br /&gt;
|workflownoad=&lt;br /&gt;
#The app sends an ad request to the ad server.&lt;br /&gt;
#The ad server responds with an outbooking as ad booking.&lt;br /&gt;
#The app receives a response with the size 99x1 and a short time later a noad event.&lt;br /&gt;
#The app blanks the ad position and ad labelling until the next page request.&lt;br /&gt;
|creativesizes=&lt;br /&gt;
320x50, 320x53, 320x80, 320x106, 320x160, 320x320, 320x416, 320x460, 300x50, 300x75, 300x100, 300x150, 300x200, 300x250, 300x600&lt;br /&gt;
Other sizes are possible. Depending on the&lt;br /&gt;
position, only an excerpt from the size list is used in the ad request. Exact assignment then takes place in a separate document.&lt;br /&gt;
&lt;br /&gt;
|keywords=&lt;br /&gt;
;kw:nospa, enozqi, digtransform, iqadtileX*&lt;br /&gt;
;tile:X*&lt;br /&gt;
X corresponds to the number of the position, e.g. iqadtile1, iqadtile3, iqadtile4, iqadtile99, iqadtile8.&lt;br /&gt;
|links=&lt;br /&gt;
;iOS:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
;Android:https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Documentation of the iq digital app events==&lt;br /&gt;
In certain situations, the ad templates of iq digital send events to the app. The app must react to these events and change the ad container in line with the following specification. The app events always comprise the name and one &amp;quot;data&amp;quot; string.&lt;br /&gt;
&lt;br /&gt;
===Important links in the GMA SDK documentation===&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events GMA SDK iOS App Events]&lt;br /&gt;
*[https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events GMA SDK Android App Events]&lt;br /&gt;
&lt;br /&gt;
===setsize event===&lt;br /&gt;
The setsize event is called by the ad templates of iq digital to change the size of the ad view of the ad position. The &amp;quot;data&amp;quot; string has the format &amp;quot;width:height&amp;quot; for an immediate change of size.&lt;br /&gt;
&lt;br /&gt;
=====Parameters=====&lt;br /&gt;
The parameters are separated from one another with a colon.&lt;br /&gt;
;width:The new width of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
;height:The new height of the ad view in pixels (device-independent pixels) as a whole number.&lt;br /&gt;
{{Warnung|text=Exception: the value max is used for adaptation to the maximum available width or height.}}&lt;br /&gt;
&lt;br /&gt;
Call examples:&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:80&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x80 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;320:240&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is given the new size of 320x240 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:160&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and a height of 160 pixels.&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;&amp;quot;setsize&amp;quot;,&amp;quot;max:max&amp;quot;&amp;lt;/nowiki&amp;gt;:Ad view is adjusted to the maximum available width and the maximum available height.&lt;br /&gt;
&lt;br /&gt;
===noad event===&lt;br /&gt;
The noad event is called by the ad templates of iq digital to signal to the app that there is no booking for the position and that the app should remove the ad position &#039;&#039;&#039;and the corresponding ad label&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;data&amp;quot; string has no meaning for this event and can be ignored.&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:APP]]&lt;br /&gt;
[[de:Einbau des Google Mobile Ads SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Ad_Technology&amp;diff=62</id>
		<title>Ad Technology</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Ad_Technology&amp;diff=62"/>
		<updated>2022-05-05T09:01:43Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;chapterlist&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;clheader&amp;quot;&amp;gt;Ad Technology&amp;lt;/div&amp;gt;&lt;br /&gt;
*Online/Mobile Web&lt;br /&gt;
*[[Adcontroller]]&lt;br /&gt;
*[[Creative Identifier]]&lt;br /&gt;
*App&lt;br /&gt;
*[[Integration of the Google Mobile Ads SDK]]&lt;br /&gt;
*[[General rules for banner ads integration]]&lt;br /&gt;
*[[General rules for fullscreen ads integration]]&lt;br /&gt;
*[[Prebid Mobile SDK in Apps]]&lt;br /&gt;
*[[Acceptance criteria advertising integration with Google Mobile SDK‎‎]]&lt;br /&gt;
*AMP&lt;br /&gt;
*[[Structure of amp-ad tags]]&lt;br /&gt;
*[[AMP Ad labelling]]&lt;br /&gt;
*[[Change of Prebid Server to Prebid Server Premium]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie:Ad Technology]]&lt;br /&gt;
[[de:Ad Technology]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Acceptance_criteria_advertising_integration_with_Google_Mobile_SDK&amp;diff=61</id>
		<title>Acceptance criteria advertising integration with Google Mobile SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Acceptance_criteria_advertising_integration_with_Google_Mobile_SDK&amp;diff=61"/>
		<updated>2022-05-05T08:59:54Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is about what iq digital expects from a &amp;quot;test app&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
==Basic requirements for a test app==&lt;br /&gt;
*For the acceptance of the advertising integration, iq digital requires an executable app version that already contains essential components of the final version (also realistic content scope). Otherwise, please indicate which parts cannot yet be accepted.&lt;br /&gt;
*The Test app has been tested on platforms (iOS, Android) and mobile devices (not only emulated) to rule out any installation problems / app crashes and to enable acceptance of the advertising integration.&lt;br /&gt;
*Status of the advertising integration in the test app version must be documented. Please specify when sending the test app: &lt;br /&gt;
**Which parts of the implementation instructions have been implemented? &lt;br /&gt;
**Which parts, if any, have not yet been implemented? &lt;br /&gt;
**If necessary corrections have already been formulated by iq digital, please respond to the individual points with brief feedback.&lt;br /&gt;
*Configuration of the advertising integration has been implemented according to iq digital&#039;s specifications. This means in particular the information of the adrequest such as AdUnit, Creative Sizes and Keywords.&lt;br /&gt;
*Random checks to ensure that an iq digital test banner is played on the advertising placements for each layout type (homepage, sections, articles, others such as image gal). Iq digital has created test placements for this purpose at the beginning of the project. Please note, if this is not the case.&lt;br /&gt;
*The final release version will be used by iq digital for the final approval of the advertising integration.&lt;br /&gt;
[[de:Akzeptanzkriterien Werbeintegration mit Google Mobile SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Acceptance_criteria_advertising_integration_with_Google_Mobile_SDK&amp;diff=60</id>
		<title>Acceptance criteria advertising integration with Google Mobile SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Acceptance_criteria_advertising_integration_with_Google_Mobile_SDK&amp;diff=60"/>
		<updated>2022-05-05T08:59:43Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is about what iq digital expects from a &amp;quot;test app&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
==Basic requirements for a test app==&lt;br /&gt;
*For the acceptance of the advertising integration, iq digital requires an executable app version that already contains essential components of the final version (also realistic content scope). Otherwise, please indicate which parts cannot yet be accepted.&lt;br /&gt;
*The Test app has been tested on platforms (iOS, Android) and mobile devices (not only emulated) to rule out any installation problems / app crashes and to enable acceptance of the advertising integration.&lt;br /&gt;
*Status of the advertising integration in the test app version must be documented. Please specify when sending the test app: &lt;br /&gt;
**Which parts of the implementation instructions have been implemented? &lt;br /&gt;
**Which parts, if any, have not yet been implemented? &lt;br /&gt;
**If necessary corrections have already been formulated by iq digital, please respond to the individual points with brief feedback.&lt;br /&gt;
*Configuration of the advertising integration has been implemented according to iq digital&#039;s specifications. This means in particular the information of the adrequest such as AdUnit, Creative Sizes and Keywords.&lt;br /&gt;
*Random checks to ensure that an iq digital test banner is played on the advertising placements for each layout type (homepage, sections, articles, others such as image gal). Iq digital has created test placements for this purpose at the beginning of the project. Please note, if this is not the case.&lt;br /&gt;
*The final release version will be used by iq digital for the final approval of the advertising integration.&lt;br /&gt;
[[de:Akzeptanzkirterien Werbeintegration mit Google Mobile SDK]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Acceptance_criteria_advertising_integration_with_Google_Mobile_SDK&amp;diff=59</id>
		<title>Acceptance criteria advertising integration with Google Mobile SDK</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Acceptance_criteria_advertising_integration_with_Google_Mobile_SDK&amp;diff=59"/>
		<updated>2022-05-05T08:59:20Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: Created page with &amp;quot;This article is about what iq digital expects from a &amp;quot;test app&amp;quot;:  ==Basic requirements for a test app== *For the acceptance of the advertising integration, iq digital requires an executable app version that already contains essential components of the final version (also realistic content scope). Otherwise, please indicate which parts cannot yet be accepted. *The Test app has been tested on platforms (iOS, Android) and mobile devices (not only emulated) to rule out any i...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is about what iq digital expects from a &amp;quot;test app&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
==Basic requirements for a test app==&lt;br /&gt;
*For the acceptance of the advertising integration, iq digital requires an executable app version that already contains essential components of the final version (also realistic content scope). Otherwise, please indicate which parts cannot yet be accepted.&lt;br /&gt;
*The Test app has been tested on platforms (iOS, Android) and mobile devices (not only emulated) to rule out any installation problems / app crashes and to enable acceptance of the advertising integration.&lt;br /&gt;
*Status of the advertising integration in the test app version must be documented. Please specify when sending the test app: &lt;br /&gt;
**Which parts of the implementation instructions have been implemented? &lt;br /&gt;
**Which parts, if any, have not yet been implemented? &lt;br /&gt;
**If necessary corrections have already been formulated by iq digital, please respond to the individual points with brief feedback.&lt;br /&gt;
*Configuration of the advertising integration has been implemented according to iq digital&#039;s specifications. This means in particular the information of the adrequest such as AdUnit, Creative Sizes and Keywords.&lt;br /&gt;
*Random checks to ensure that an iq digital test banner is played on the advertising placements for each layout type (homepage, sections, articles, others such as image gal). Iq digital has created test placements for this purpose at the beginning of the project. Please note, if this is not the case.&lt;br /&gt;
*The final release version will be used by iq digital for the final approval of the advertising integration.&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=AMP_Ad_labelling&amp;diff=58</id>
		<title>AMP Ad labelling</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=AMP_Ad_labelling&amp;diff=58"/>
		<updated>2022-03-22T08:14:23Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since the ad controller is not built into AMP pages, ad labelling must be done by the publisher. This guide is an example of how to &amp;quot;hide&amp;quot; the ad tag on an AMP page, provided no ad has been played on a placement.&lt;br /&gt;
&lt;br /&gt;
==Example structure of an ad label==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;iqampcenter&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;amp-ad&amp;gt; … &amp;lt;/amp-ad&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;iqadmarker&amp;quot;&amp;gt;Anzeige&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*The &amp;quot;iqadmarker&amp;quot; div is positioned behind the amp-ad tag in the HTML code.&lt;br /&gt;
*The surrounding div container &amp;quot;iqampcenter&amp;quot; gets additional CSS styling:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
display: flex; &lt;br /&gt;
flex-direction: column;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*The &amp;quot;iqadmarker&amp;quot;-div gets the CSS styling:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
order: -1;&lt;br /&gt;
display:none;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:Thus it slips in front of the amp-ad and is not visible at first.&lt;br /&gt;
*If an ad is booked, delivered and the amp-ad is displayed as a result, the ad label will appear with the following code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.iqampcenter &amp;gt; amp-ad:not([hidden]) + .iqadmarker { &lt;br /&gt;
    display: table; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;iqampcenter&#039;&#039;&#039; and &#039;&#039;&#039;iqadmarker&#039;&#039;&#039; are of course only example names, which can be replaced by better names.&lt;br /&gt;
==Summary==&lt;br /&gt;
For a quick overview, here are the code blocks used again:&lt;br /&gt;
&lt;br /&gt;
===HTML structure===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;iqampcenter&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;amp-ad … &amp;lt;/amp-ad&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;iqadmarker&amp;quot;&amp;gt;Anzeige&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CSS===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.iqampcenter {&lt;br /&gt;
    display: flex; &lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.iqadmarker {&lt;br /&gt;
    order: -1;&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.iqampcenter &amp;gt; amp-ad:not([hidden]) + .iqadmarker { &lt;br /&gt;
    display: table; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Ad Technology]][[Category:AMP]]&lt;br /&gt;
[[de:AMP Anzeigenkennzeichnung]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Change_of_Prebid_Server_to_Prebid_Server_Premium&amp;diff=57</id>
		<title>Change of Prebid Server to Prebid Server Premium</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Change_of_Prebid_Server_to_Prebid_Server_Premium&amp;diff=57"/>
		<updated>2022-03-22T08:14:10Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction and background==&lt;br /&gt;
Until now, iq digital has used Xandr&#039;s Prebid Server software to process headerbidding bids from Xandr in AMP. Xandr has created an improved version, Prebid Server Premium, to which all publishers must switch by March 31, 2022 if they want to continue using Prebid Server (Premium). The ad tags hardly change in the process. Only one word in each ad tag must be replaced by the string &amp;quot;psp&amp;quot;. An adjustment of the ad tags is mandatory, otherwise errors may occur on the client side after March 31, 2022 and there may also be a loss of revenue if the header bidding provider Xandr is no longer available.&lt;br /&gt;
&lt;br /&gt;
The change to Prebid Server Premium also has the advantage that the software is more modern and it will be easier to add new headerbidding partners in the future without the publisher having to manually add them to their site (as was previously the case). This will also enable us to reduce the number of headerbidding requests in an AMP page in the future, when partners can be configured within the Prebid Server Premium environment and no longer use their own configuration in the amp-rtc config.&lt;br /&gt;
&lt;br /&gt;
==ToDo==&lt;br /&gt;
Here&#039;s what to do on publisher side for customization:&lt;br /&gt;
&lt;br /&gt;
===Previous===&lt;br /&gt;
Example amp-ad tag for an iqadtile3 (explanation: XXXXXX are values that can be different depending on the publisher):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; lines highlight=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- iqadtile3 --&amp;gt;&lt;br /&gt;
&amp;lt;amp-ad data-block-on-consent=&amp;quot;_till_accepted&amp;quot; width=&amp;quot;320&amp;quot; height=&amp;quot;320&amp;quot;&lt;br /&gt;
    type=&amp;quot;doubleclick&amp;quot;&lt;br /&gt;
    data-slot=&amp;quot;/183/XXXXXX&amp;quot;&lt;br /&gt;
    rtc-config=&#039;{&lt;br /&gt;
        &amp;quot;vendors&amp;quot;: {&lt;br /&gt;
			&amp;quot;yieldlab&amp;quot;: {&amp;quot;ADSLOT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
		    &amp;quot;aps&amp;quot;: {&amp;quot;PUB_ID&amp;quot;: &amp;quot;3711&amp;quot;,&amp;quot;PARAMS&amp;quot;:{&amp;quot;amp&amp;quot;:&amp;quot;1&amp;quot;}},&lt;br /&gt;
        	&amp;quot;prebidappnexus&amp;quot;: {&amp;quot;PLACEMENT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
            &amp;quot;criteo&amp;quot;: {&amp;quot;ZONE_ID&amp;quot;: &amp;quot;1298400&amp;quot;, &amp;quot;LINE_ITEM_RANGES&amp;quot;: &amp;quot;0..20:0.01;20..60:0.05;60..420:1.00&amp;quot;,&amp;quot;PUBLISHER_SUB_ID&amp;quot;:&amp;quot;XXXXXX&amp;quot;}&lt;br /&gt;
         }, &amp;quot;timeoutMillis&amp;quot;: 999}&#039;&lt;br /&gt;
    json=&#039;{&amp;quot;targeting&amp;quot;:{&amp;quot;kw&amp;quot;:[&amp;quot;nospa&amp;quot;,&amp;quot;enozqi&amp;quot;,&amp;quot;digtransform&amp;quot;,&amp;quot;XXXXXX&amp;quot;,&amp;quot;iqadtile3&amp;quot;],&amp;quot;tile&amp;quot;:[&amp;quot;3&amp;quot;],&amp;quot;doc&amp;quot;:[&amp;quot;artikel&amp;quot;],&amp;quot;iqadtype&amp;quot;:[&amp;quot;amp&amp;quot;]}}&#039;&lt;br /&gt;
    data-multi-size=&amp;quot;320x53,320x80,320x106,320x160,320x50,300x50,300x75,300x100,300x150,300x250&amp;quot;&lt;br /&gt;
    data-multi-size-validation=&amp;quot;false&amp;quot;&lt;br /&gt;
	data-loading-strategy=&amp;quot;1.25&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/amp-ad&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In the AMP rtc-config, there is a separate configuration for each headerbidding partner used by iq digital. As seen in the example above, these are Yieldlab, Amazon, Xandr (formerly Appnexus) and Criteo. The change to Prebid Server Premium only affects the configuration of Xandr.&lt;br /&gt;
The corresponding line is already highlighted in the example above.&lt;br /&gt;
&lt;br /&gt;
In this line, the word &#039;&#039;&#039;&#039;&#039;prebidappnexus&#039;&#039;&#039;&#039;&#039; must be supplemented by the string &amp;quot;psp&amp;quot; to &#039;&#039;&#039;&#039;&#039;prebidappnexuspsp&#039;&#039;&#039;&#039;&#039;. The value of &amp;quot;PLACEMENT_ID&amp;quot; remains the same.&lt;br /&gt;
===After===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; lines highlight=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- iqadtile3 --&amp;gt;&lt;br /&gt;
&amp;lt;amp-ad data-block-on-consent=&amp;quot;_till_accepted&amp;quot; width=&amp;quot;320&amp;quot; height=&amp;quot;320&amp;quot;&lt;br /&gt;
    type=&amp;quot;doubleclick&amp;quot;&lt;br /&gt;
    data-slot=&amp;quot;/183/XXXXXX&amp;quot;&lt;br /&gt;
    rtc-config=&#039;{&lt;br /&gt;
        &amp;quot;vendors&amp;quot;: {&lt;br /&gt;
			&amp;quot;yieldlab&amp;quot;: {&amp;quot;ADSLOT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
		    &amp;quot;aps&amp;quot;: {&amp;quot;PUB_ID&amp;quot;: &amp;quot;3711&amp;quot;,&amp;quot;PARAMS&amp;quot;:{&amp;quot;amp&amp;quot;:&amp;quot;1&amp;quot;}},&lt;br /&gt;
        	&amp;quot;prebidappnexuspsp&amp;quot;: {&amp;quot;PLACEMENT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
            &amp;quot;criteo&amp;quot;: {&amp;quot;ZONE_ID&amp;quot;: &amp;quot;1298400&amp;quot;, &amp;quot;LINE_ITEM_RANGES&amp;quot;: &amp;quot;0..20:0.01;20..60:0.05;60..420:1.00&amp;quot;,&amp;quot;PUBLISHER_SUB_ID&amp;quot;:&amp;quot;XXXXXX&amp;quot;}&lt;br /&gt;
         }, &amp;quot;timeoutMillis&amp;quot;: 999}&#039;&lt;br /&gt;
    json=&#039;{&amp;quot;targeting&amp;quot;:{&amp;quot;kw&amp;quot;:[&amp;quot;nospa&amp;quot;,&amp;quot;enozqi&amp;quot;,&amp;quot;digtransform&amp;quot;,&amp;quot;XXXXXX&amp;quot;,&amp;quot;iqadtile3&amp;quot;],&amp;quot;tile&amp;quot;:[&amp;quot;3&amp;quot;],&amp;quot;doc&amp;quot;:[&amp;quot;artikel&amp;quot;],&amp;quot;iqadtype&amp;quot;:[&amp;quot;amp&amp;quot;]}}&#039;&lt;br /&gt;
    data-multi-size=&amp;quot;320x53,320x80,320x106,320x160,320x50,300x50,300x75,300x100,300x150,300x250&amp;quot;&lt;br /&gt;
    data-multi-size-validation=&amp;quot;false&amp;quot;&lt;br /&gt;
	data-loading-strategy=&amp;quot;1.25&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/amp-ad&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Warning|titel=In summary|text=The rest of the adtag remains unchanged, as it has already been obstructed for each position. So it is completely sufficient to perform a search&amp;amp;replace action with the search term &#039;&#039;&#039;prebidappnexus&#039;&#039;&#039; and the replacement text &#039;&#039;&#039;prebidappnexuspsp&#039;&#039;&#039;!}}&lt;br /&gt;
[[Category:Ad Technology]][[Category:AMP]]&lt;br /&gt;
[[de:Wechsel Prebid Server zu Prebid Server Premium]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Ad_Technology&amp;diff=56</id>
		<title>Ad Technology</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Ad_Technology&amp;diff=56"/>
		<updated>2022-03-22T08:13:45Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;chapterlist&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;clheader&amp;quot;&amp;gt;Ad Technology&amp;lt;/div&amp;gt;&lt;br /&gt;
*Online/Mobile Web&lt;br /&gt;
*[[Adcontroller]]&lt;br /&gt;
*[[Creative Identifier]]&lt;br /&gt;
*App&lt;br /&gt;
*[[Integration of the Google Mobile Ads SDK]]&lt;br /&gt;
*[[General rules for banner ads integration]]&lt;br /&gt;
*[[General rules for fullscreen ads integration]]&lt;br /&gt;
*[[Prebid Mobile SDK in Apps]]&lt;br /&gt;
*AMP&lt;br /&gt;
*[[Structure of amp-ad tags]]&lt;br /&gt;
*[[AMP Ad labelling]]&lt;br /&gt;
*[[Change of Prebid Server to Prebid Server Premium]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie:Ad Technology]]&lt;br /&gt;
[[de:Ad Technology]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Creative_Identifier&amp;diff=55</id>
		<title>Creative Identifier</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Creative_Identifier&amp;diff=55"/>
		<updated>2022-03-22T08:12:49Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What is the iqd Creative Identifier?==&lt;br /&gt;
With the iqd Creative Identifier you can control and report advertisements on sites marketed by iqd. As soon as you see an ad that is obviously not displayed correctly or has inappropriate content, you can report it with a few clicks and we will take care of solving the problem.&lt;br /&gt;
&lt;br /&gt;
==How do I activate the Creative Identifier?==&lt;br /&gt;
==Stationary==&lt;br /&gt;
To open the Creative Identifier on a stationary website you just have to enter the following key combination on your keyboard:&lt;br /&gt;
&amp;lt;div class=&amp;quot;keys&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8595;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8595;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8593;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8593;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8592;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8594;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8592;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8594;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8629;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Down, Down, Up, Up, Left, Right, Left, Right, i, q, Enter&lt;br /&gt;
&lt;br /&gt;
[[File:Crid online.gif]]&lt;br /&gt;
&lt;br /&gt;
===Mobile===&lt;br /&gt;
The Creative Identifier can be called on MEWs and wrapper apps so far. It is not accessible on native apps and AMP pages. The following gestures must be made to enable it:&lt;br /&gt;
&lt;br /&gt;
#Scroll down to the bottom of the page&lt;br /&gt;
#Overscroll 5 times&#039;&#039;. So swiping down even though you can&#039;t scroll down any further&lt;br /&gt;
#A small box appears under the footer of the page&lt;br /&gt;
#Tap 5 times in the appeared field&lt;br /&gt;
&lt;br /&gt;
[[File:Crid mobile.gif]]&lt;br /&gt;
&lt;br /&gt;
==How do I report advertising via the Creative Identifier?==&lt;br /&gt;
This process is identical for a stationary and a mobile ad. In the menu &amp;quot;Adtiles&amp;quot; you will find a list of all ads of this page impression. If you want to assign the faulty banner to the list in the menu &amp;quot;Adtiles&amp;quot; this is very easy:&lt;br /&gt;
&lt;br /&gt;
#Click on &amp;quot;Options&amp;quot; (three vertical dots) after each item in the list and click on &amp;quot;Scroll to Adtile&amp;quot;. Now you should automatically scroll to the adtile.&lt;br /&gt;
#If there is more than one ad in the current field of view of the browser window you can distinguish the ads by hovering (stationary) or tapping (mobile) on a list item of the Creative Identifier.&lt;br /&gt;
&lt;br /&gt;
[[File:Crid adtiles r.jpg]] [[File:Crid adtiles options r.jpg]]&lt;br /&gt;
&lt;br /&gt;
Once you have identified the ad you want to report, click on &amp;quot;Options&amp;quot; for that element again. This time you select &amp;quot;Report Adtile&amp;quot;. Here you can report several different ads per page impression at the same time. You will then land in the &amp;quot;Report&amp;quot; menu. There you should briefly and concisely describe the error.&lt;br /&gt;
&lt;br /&gt;
[[File:Crid melden r.jpg]]&lt;br /&gt;
&lt;br /&gt;
After you have added a short description of the error you can click on the &amp;quot;Report&amp;quot; button. This will automatically open an email program of your choice and generate an email with all relevant information we need to debug the ad. Please do not delete any information from this generated email! Make a screenshot of the ad and attach it to the email. After you have sent the mail, we will take care of everything else.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Thank you very much for your support.&#039;&#039;&#039;&lt;br /&gt;
[[de:Creative Identifier]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Creative_Identifier&amp;diff=54</id>
		<title>Creative Identifier</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Creative_Identifier&amp;diff=54"/>
		<updated>2022-03-22T08:12:35Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What is the iqd Creative Identifier?==&lt;br /&gt;
With the iqd Creative Identifier you can control and report advertisements on sites marketed by iqd. As soon as you see an ad that is obviously not displayed correctly or has inappropriate content, you can report it with a few clicks and we will take care of solving the problem.&lt;br /&gt;
&lt;br /&gt;
==How do I activate the Creative Identifier?==&lt;br /&gt;
==Stationary==&lt;br /&gt;
To open the Creative Identifier on a stationary website you just have to enter the following key combination on your keyboard:&lt;br /&gt;
&amp;lt;div class=&amp;quot;keys&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8595;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8595;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8593;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8593;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8592;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8594;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8592;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8594;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8629;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Down, Down, Up, Up, Left, Right, Left, Right, i, q, Enter&lt;br /&gt;
&lt;br /&gt;
[[File:Crid online.gif]]&lt;br /&gt;
&lt;br /&gt;
===Mobile===&lt;br /&gt;
The Creative Identifier can be called on MEWs and wrapper apps so far. It is not accessible on native apps and AMP pages. The following gestures must be made to enable it:&lt;br /&gt;
&lt;br /&gt;
#Scroll down to the bottom of the page&lt;br /&gt;
#Overscroll 5 times&#039;&#039;. So swiping down even though you can&#039;t scroll down any further&lt;br /&gt;
#A small box appears under the footer of the page&lt;br /&gt;
#Tap 5 times in the appeared field&lt;br /&gt;
&lt;br /&gt;
[[File:Crid mobile.gif]]&lt;br /&gt;
&lt;br /&gt;
==How do I report advertising via the Creative Identifier?==&lt;br /&gt;
This process is identical for a stationary and a mobile ad. In the menu &amp;quot;Adtiles&amp;quot; you will find a list of all ads of this page impression. If you want to assign the faulty banner to the list in the menu &amp;quot;Adtiles&amp;quot; this is very easy:&lt;br /&gt;
&lt;br /&gt;
#Click on &amp;quot;Options&amp;quot; (three vertical dots) after each item in the list and click on &amp;quot;Scroll to Adtile&amp;quot;. Now you should automatically scroll to the adtile.&lt;br /&gt;
#If there is more than one ad in the current field of view of the browser window you can distinguish the ads by hovering (stationary) or tapping (mobile) on a list item of the Creative Identifier.&lt;br /&gt;
&lt;br /&gt;
[[File:Crid adtiles r.jpg]] [[File:Crid adtiles options r.jpg]]&lt;br /&gt;
&lt;br /&gt;
Once you have identified the ad you want to report, click on &amp;quot;Options&amp;quot; for that element again. This time you select &amp;quot;Report Adtile&amp;quot;. Here you can report several different ads per page impression at the same time. You will then land in the &amp;quot;Report&amp;quot; menu. There you should briefly and concisely describe the error.&lt;br /&gt;
&lt;br /&gt;
[[File:Crid melden r.jpg]]&lt;br /&gt;
&lt;br /&gt;
After you have added a short description of the error you can click on the &amp;quot;Report&amp;quot; button. This will automatically open an email program of your choice and generate an email with all relevant information we need to debug the ad. Please do not delete any information from this generated email! Make a screenshot of the ad and attach it to the email. After you have sent the mail, we will take care of everything else.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Thank you very much for your support.&#039;&#039;&#039;&lt;br /&gt;
[[en:Creative Identifier]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Creative_Identifier&amp;diff=53</id>
		<title>Creative Identifier</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Creative_Identifier&amp;diff=53"/>
		<updated>2022-03-22T08:11:48Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: Created page with &amp;quot;==What is the iqd Creative Identifier?== With the iqd Creative Identifier you can control and report advertisements on sites marketed by iqd. As soon as you see an ad that is obviously not displayed correctly or has inappropriate content, you can report it with a few clicks and we will take care of solving the problem.  ==How do I activate the Creative Identifier?== ==Stationary== To open the Creative Identifier on a stationary website you just have to enter the followin...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What is the iqd Creative Identifier?==&lt;br /&gt;
With the iqd Creative Identifier you can control and report advertisements on sites marketed by iqd. As soon as you see an ad that is obviously not displayed correctly or has inappropriate content, you can report it with a few clicks and we will take care of solving the problem.&lt;br /&gt;
&lt;br /&gt;
==How do I activate the Creative Identifier?==&lt;br /&gt;
==Stationary==&lt;br /&gt;
To open the Creative Identifier on a stationary website you just have to enter the following key combination on your keyboard:&lt;br /&gt;
&amp;lt;div class=&amp;quot;keys&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8595;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8595;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8593;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8593;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8592;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8594;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8592;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8594;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;#8629;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Down, Down, Up, Up, Left, Right, Left, Right, i, q, Enter&lt;br /&gt;
&lt;br /&gt;
[[File:Crid online.gif]]&lt;br /&gt;
&lt;br /&gt;
===Mobile===&lt;br /&gt;
The Creative Identifier can be called on MEWs and wrapper apps so far. It is not accessible on native apps and AMP pages. The following gestures must be made to enable it:&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Scroll down to the bottom of the page&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;&#039;Overscroll 5 times&#039;&#039;. So swiping down even though you can&#039;t scroll down any further&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;&#039;A small box appears under the footer of the page&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;&#039;Tap 5 times in the appeared field&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Crid mobile.gif]]&lt;br /&gt;
&lt;br /&gt;
==How do I report advertising via the Creative Identifier?==&lt;br /&gt;
This process is identical for a stationary and a mobile ad. In the menu &amp;quot;Adtiles&amp;quot; you will find a list of all ads of this page impression. If you want to assign the faulty banner to the list in the menu &amp;quot;Adtiles&amp;quot; this is very easy:&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Click on &amp;quot;Options&amp;quot; (three vertical dots) after each item in the list and click on &amp;quot;Scroll to Adtile&amp;quot;. Now you should automatically scroll to the adtile.&#039;&#039;&#039;&lt;br /&gt;
#&#039;&#039;&#039;If there is more than one ad in the current field of view of the browser window you can distinguish the ads by hovering (stationary) or tapping (mobile) on a list item of the Creative Identifier.&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Crid adtiles r.jpg]] [[File:Crid adtiles options r.jpg]]&lt;br /&gt;
&lt;br /&gt;
Once you have identified the ad you want to report, click on &amp;quot;Options&amp;quot; for that element again. This time you select &amp;quot;Report Adtile&amp;quot;. Here you can report several different ads per page impression at the same time. You will then land in the &amp;quot;Report&amp;quot; menu. There you should briefly and concisely describe the error.&lt;br /&gt;
&lt;br /&gt;
[[File:Crid melden r.jpg]]&lt;br /&gt;
&lt;br /&gt;
After you have added a short description of the error you can click on the &amp;quot;Report&amp;quot; button. This will automatically open an email program of your choice and generate an email with all relevant information we need to debug the ad. Please do not delete any information from this generated email! Make a screenshot of the ad and attach it to the email. After you have sent the mail, we will take care of everything else.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Thank you very much for your support.&#039;&#039;&#039;&lt;br /&gt;
[[en:Creative Identifier]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=AMP_Ad_labelling&amp;diff=52</id>
		<title>AMP Ad labelling</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=AMP_Ad_labelling&amp;diff=52"/>
		<updated>2022-03-22T08:04:46Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: Created page with &amp;quot;Since the ad controller is not built into AMP pages, ad labelling must be done by the publisher. This guide is an example of how to &amp;quot;hide&amp;quot; the ad tag on an AMP page, provided no ad has been played on a placement.  ==Example structure of an ad label== &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt; &amp;lt;div class=&amp;quot;iqampcenter&amp;quot;&amp;gt;     &amp;lt;amp-ad&amp;gt; … &amp;lt;/amp-ad&amp;gt;     &amp;lt;div class=&amp;quot;iqadmarker&amp;quot;&amp;gt;Anzeige&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/syntaxhighlight&amp;gt; *The &amp;quot;iqadmarker&amp;quot; div is positioned behind the amp-ad tag in the HTML cod...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since the ad controller is not built into AMP pages, ad labelling must be done by the publisher. This guide is an example of how to &amp;quot;hide&amp;quot; the ad tag on an AMP page, provided no ad has been played on a placement.&lt;br /&gt;
&lt;br /&gt;
==Example structure of an ad label==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;iqampcenter&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;amp-ad&amp;gt; … &amp;lt;/amp-ad&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;iqadmarker&amp;quot;&amp;gt;Anzeige&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*The &amp;quot;iqadmarker&amp;quot; div is positioned behind the amp-ad tag in the HTML code.&lt;br /&gt;
*The surrounding div container &amp;quot;iqampcenter&amp;quot; gets additional CSS styling:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
display: flex; &lt;br /&gt;
flex-direction: column;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*The &amp;quot;iqadmarker&amp;quot;-div gets the CSS styling:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
order: -1;&lt;br /&gt;
display:none;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:Thus it slips in front of the amp-ad and is not visible at first.&lt;br /&gt;
*If an ad is booked, delivered and the amp-ad is displayed as a result, the ad label will appear with the following code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.iqampcenter &amp;gt; amp-ad:not([hidden]) + .iqadmarker { &lt;br /&gt;
    display: table; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;iqampcenter&#039;&#039;&#039; and &#039;&#039;&#039;iqadmarker&#039;&#039;&#039; are of course only example names, which can be replaced by better names.&lt;br /&gt;
==Summary==&lt;br /&gt;
For a quick overview, here are the code blocks used again:&lt;br /&gt;
&lt;br /&gt;
===HTML structure===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;iqampcenter&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;amp-ad … &amp;lt;/amp-ad&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;iqadmarker&amp;quot;&amp;gt;Anzeige&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CSS===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.iqampcenter {&lt;br /&gt;
    display: flex; &lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.iqadmarker {&lt;br /&gt;
    order: -1;&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.iqampcenter &amp;gt; amp-ad:not([hidden]) + .iqadmarker { &lt;br /&gt;
    display: table; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Ad Technology]][[Kategorie:AMP]]&lt;br /&gt;
[[de:AMP Anzeigenkennzeichnung]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Ad_Technology&amp;diff=51</id>
		<title>Ad Technology</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Ad_Technology&amp;diff=51"/>
		<updated>2022-03-22T07:58:17Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;chapterlist&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;clheader&amp;quot;&amp;gt;Ad Technology&amp;lt;/div&amp;gt;&lt;br /&gt;
*Online/Mobile Web&lt;br /&gt;
*[[Adcontroller]]&lt;br /&gt;
*App&lt;br /&gt;
*[[Integration of the Google Mobile Ads SDK]]&lt;br /&gt;
*[[General rules for banner ads integration]]&lt;br /&gt;
*[[General rules for fullscreen ads integration]]&lt;br /&gt;
*[[Prebid Mobile SDK in Apps]]&lt;br /&gt;
*AMP&lt;br /&gt;
*[[Structure of amp-ad tags]]&lt;br /&gt;
*[[AMP Ad labelling]]&lt;br /&gt;
*[[Change of Prebid Server to Prebid Server Premium]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie:Ad Technology]]&lt;br /&gt;
[[de:Ad Technology]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=MediaWiki:Common.css&amp;diff=50</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=MediaWiki:Common.css&amp;diff=50"/>
		<updated>2022-03-22T07:52:32Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Das folgende CSS wird für alle Benutzeroberflächen geladen. */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.bold {&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div#p-logo::after {&lt;br /&gt;
    content: &amp;quot;Dokumentation&amp;quot;;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color:#ef7f00;&lt;br /&gt;
margin-top:-30px;&lt;br /&gt;
margin-left:1.1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 300;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Light&#039;), local(&#039;Rajdhani-Light&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-300.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 400;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Regular&#039;), local(&#039;Rajdhani-Regular&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-regular.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Medium&#039;), local(&#039;Rajdhani-Medium&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-500.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani SemiBold&#039;), local(&#039;Rajdhani-SemiBold&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-600.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;;&lt;br /&gt;
    font-style: normal;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    src: url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.eot&#039;);&lt;br /&gt;
    src: local(&#039;Rajdhani Bold&#039;), local(&#039;Rajdhani-Bold&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.eot?#iefix&#039;) format(&#039;embedded-opentype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.woff2&#039;) format(&#039;woff2&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.woff&#039;) format(&#039;woff&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.ttf&#039;) format(&#039;truetype&#039;), url(&#039;/de/resources/assets/fonts/rajdhani-v7-latin-700.svg#Rajdhani&#039;) format(&#039;svg&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*   { &lt;br /&gt;
    font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
    font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pre-content h1, .content h1, .content h2, .content h3, .mw-body h1, .mw-body-content h1, .mw-body-content h2, .mw-body-content h3 {&lt;br /&gt;
    font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.content h3, .mw-body-content h3 {&lt;br /&gt;
text-decoration:underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p, p *, li, li * {&lt;br /&gt;
font-family: Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cb {&lt;br /&gt;
clear:both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.underline {&lt;br /&gt;
  text-decoration:underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blue {&lt;br /&gt;
  color:#0099ff;&lt;br /&gt;
}&lt;br /&gt;
.orange{&lt;br /&gt;
  color:#ef7f00;&lt;br /&gt;
}&lt;br /&gt;
.red{&lt;br /&gt;
  color:#ff0000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.standardtable {&lt;br /&gt;
  border: 1px solid black;&lt;br /&gt;
  border-collapse:collapse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.standardtable td, table.standardtable th{&lt;br /&gt;
  padding:5px;&lt;br /&gt;
  border: 1px solid black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ul.widegallery {&lt;br /&gt;
text-align:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a, #mw-panel .portal .body li a {&lt;br /&gt;
color:#ee7f00;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a:visited, #mw-panel .portal .body li a:visited {&lt;br /&gt;
color:#ee7f00;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox {&lt;br /&gt;
  position:relative;&lt;br /&gt;
  float:right;&lt;br /&gt;
  width:320px;&lt;br /&gt;
  margin: 16px 0 16px 16px;&lt;br /&gt;
box-sizing:border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox *{&lt;br /&gt;
  box-sizing:border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .container{&lt;br /&gt;
  width:320px;&lt;br /&gt;
  padding:1em;&lt;br /&gt;
  background-color:#ffeecc;&lt;br /&gt;
  -webkit-border-radius: 5px;&lt;br /&gt;
  -moz-border-radius: 5px;&lt;br /&gt;
  border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .infos {&lt;br /&gt;
border-top: 1px solid black;&lt;br /&gt;
padding-top:1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox span {&lt;br /&gt;
display:inline-block;&lt;br /&gt;
vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.specsBox .key {&lt;br /&gt;
width:33%;&lt;br /&gt;
text-align:left;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .value {&lt;br /&gt;
width:66%;&lt;br /&gt;
text-align:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox .name {&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.specsBox h3 {&lt;br /&gt;
margin: 0 auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.content .specsBox ul {&lt;br /&gt;
padding-left:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement {&lt;br /&gt;
width:320px;&lt;br /&gt;
background-color: #fff1e6;&lt;br /&gt;
border-radius: 5px;&lt;br /&gt;
margin-right:5px;&lt;br /&gt;
margin-bottom: 10px;&lt;br /&gt;
padding-bottom:5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement *{&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement:last-of-type {&lt;br /&gt;
margin-bottom:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .titel{&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
font-size:120%;&lt;br /&gt;
text-align:center;&lt;br /&gt;
border-bottom: 2px solid #ffad66;&lt;br /&gt;
background-color: #ffe4cc;&lt;br /&gt;
padding: 5px 5px 0 5px;&lt;br /&gt;
border-top-left-radius:5px;&lt;br /&gt;
border-top-right-radius:5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .subtitel{&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
font-size:120%;&lt;br /&gt;
text-align:center;&lt;br /&gt;
border-bottom: 2px solid #ffad66;&lt;br /&gt;
background-color: #ffe4cc;&lt;br /&gt;
padding: 5px 5px 0 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .abmessung, .anlieferungselement .gewicht, .anlieferungselement .format, .anlieferungselement .alternative, .anlieferungselement .anmerkung, .anlieferungselement .abmessungExpandiert, .anlieferungselement .mandanten, .anlieferungselement .dauer, .anlieferungselement .seitenverhaeltnis{&lt;br /&gt;
padding-left: 5px;&lt;br /&gt;
padding-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferungselement .bezeichnung{&lt;br /&gt;
width:33%;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
padding-right:5px;&lt;br /&gt;
display:inline-block;&lt;br /&gt;
vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.anlieferungselement .wert{&lt;br /&gt;
width:67%;&lt;br /&gt;
display:inline-block;&lt;br /&gt;
}&lt;br /&gt;
.anlieferung_kombination {&lt;br /&gt;
display:flex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.horizontal {&lt;br /&gt;
align-content:center;&lt;br /&gt;
flex-direction:row;&lt;br /&gt;
border: 2px solid #ffad66;&lt;br /&gt;
flex-wrap:wrap;&lt;br /&gt;
justify-content:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.vertikal{&lt;br /&gt;
justify-content: center;&lt;br /&gt;
flex-direction:column;&lt;br /&gt;
align-content:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination &amp;gt; .container &amp;gt;  .anlieferung_kombination.vertikal{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination &amp;gt; .container &amp;gt; .anlieferung_kombination.horizontal{&lt;br /&gt;
flex:initial;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.horizontal &amp;gt; .anlieferungselement {&lt;br /&gt;
flex:none;&lt;br /&gt;
margin: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.horizontal &amp;gt; .zeichen{&lt;br /&gt;
flex:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination &amp;gt; .zeichen{&lt;br /&gt;
font-weight: bold;&lt;br /&gt;
font-size: 200%;&lt;br /&gt;
width: 100px;&lt;br /&gt;
text-align: center;&lt;br /&gt;
vertical-align:middle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.vertikal &amp;gt; .zeichen{&lt;br /&gt;
font-size:300%;&lt;br /&gt;
line-height:80px;&lt;br /&gt;
height:80px;&lt;br /&gt;
width:320px;&lt;br /&gt;
align-self:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination.vertikal .header {&lt;br /&gt;
background-color: #ffe4cc;&lt;br /&gt;
width: 100%;&lt;br /&gt;
text-align: center;&lt;br /&gt;
border: 2px solid #ffad66;&lt;br /&gt;
border-bottom: none;&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.anlieferung_kombination .header .bezeichnung{&lt;br /&gt;
font-size:200%;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
.anlieferung_kombination .header .text {&lt;br /&gt;
font-size:150%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.galerie {&lt;br /&gt;
margin-top:1em;&lt;br /&gt;
margin-bottom:1em;&lt;br /&gt;
text-align:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainpage {&lt;br /&gt;
display:flex;&lt;br /&gt;
flex-wrap:wrap;&lt;br /&gt;
justify-content:flex-start;&lt;br /&gt;
min-width:320px;&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainpage * {&lt;br /&gt;
box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapter {&lt;br /&gt;
width:320px;&lt;br /&gt;
min-width:320px;&lt;br /&gt;
margin-right:1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.kontakt{&lt;br /&gt;
    margin: 15px 20px 5px 0;&lt;br /&gt;
    width:200px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.kontakt_name{&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-size:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.kontakt_funktion{&lt;br /&gt;
    border-bottom: 1px solid black;&lt;br /&gt;
    font-size:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.included .specsBox .infos .anlieferung{&lt;br /&gt;
display:none;&lt;br /&gt;
}&lt;br /&gt;
.included .specsBox .infos.text{&lt;br /&gt;
padding-top:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.warnung::after {&lt;br /&gt;
 clear:both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.warnung .icon {&lt;br /&gt;
 content: &amp;quot;Warnung&amp;quot;;&lt;br /&gt;
 background:url(/de/images/c/cb/Warning.png) no-repeat;&lt;br /&gt;
 background-position:center;&lt;br /&gt;
 background-size:24px auto;&lt;br /&gt;
 width:24px;&lt;br /&gt;
 height:24px;&lt;br /&gt;
line-height:24px;&lt;br /&gt;
 display:inline-block;&lt;br /&gt;
 color:rgba(0,0,0,0);&lt;br /&gt;
 float:left;&lt;br /&gt;
 margin-right:10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
div.warnung {&lt;br /&gt;
 background-color:#ffad99;&lt;br /&gt;
border:1px solid black;&lt;br /&gt;
float:left;&lt;br /&gt;
padding:5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-panel #p-Start.portal .body li {&lt;br /&gt;
font-size:20px;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist {&lt;br /&gt;
  width:320px;&lt;br /&gt;
  border: 0.5px solid #a2a9b1;&lt;br /&gt;
  background-color: #f8f9fa;&lt;br /&gt;
  color: #222;&lt;br /&gt;
  margin: 1em 0;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
  font-size:16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist .clheader {&lt;br /&gt;
  font-size:22px;&lt;br /&gt;
  background-color:#525050;&lt;br /&gt;
  color:#FFF;&lt;br /&gt;
  padding: 0.2em 0.4em;&lt;br /&gt;
  font-weight:bold;&lt;br /&gt;
  font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist ul {&lt;br /&gt;
  margin:0;&lt;br /&gt;
  padding:0;&lt;br /&gt;
  font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chapterlist li {&lt;br /&gt;
  list-style-type: none;&lt;br /&gt;
  list-style-image: none;&lt;br /&gt;
  padding: 0.2em 0.4em;&lt;br /&gt;
  margin:0;&lt;br /&gt;
  font-weight:bold;&lt;br /&gt;
  border-bottom: 0.5px solid #a2a9b1;&lt;br /&gt;
  line-height:1.6;&lt;br /&gt;
  font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
}&lt;br /&gt;
.chapterlist li *{&lt;br /&gt;
font-family: &#039;Rajdhani&#039;,sans-serif,Arial,Tahoma,Verdana;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainheader {&lt;br /&gt;
background-color: #a2a9b1;&lt;br /&gt;
color:#FFFFFF;&lt;br /&gt;
text-align:left;&lt;br /&gt;
font-size:60px;&lt;br /&gt;
width:100%;&lt;br /&gt;
padding-left:20px;&lt;br /&gt;
height:300px;&lt;br /&gt;
padding-top:70px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mainheader .title {&lt;br /&gt;
height:80px;&lt;br /&gt;
line-height:80px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-highlight pre {&lt;br /&gt;
    font-family: &amp;quot;Courier New&amp;quot;, monospace;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sdkappinfo .wichtig {&lt;br /&gt;
background-color:#e6ffb3;&lt;br /&gt;
border:1px solid black;&lt;br /&gt;
padding:10px;&lt;br /&gt;
float:right;&lt;br /&gt;
margin-left:10px;&lt;br /&gt;
width:320px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sdkappinfo .wichtig .warnung {&lt;br /&gt;
width:300px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sdkappinfo .wichtig .warnung .text{&lt;br /&gt;
float:right;&lt;br /&gt;
width:85%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.keys {&lt;br /&gt;
background-color:rgb(235, 235, 235);&lt;br /&gt;
border: 1px solid lightgrey;&lt;br /&gt;
display:table;&lt;br /&gt;
margin:1em;&lt;br /&gt;
padding:1em;&lt;br /&gt;
border-radius:5px;&lt;br /&gt;
flex-wrap:wrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.keys .box {&lt;br /&gt;
display:inline-block;&lt;br /&gt;
width:40px;&lt;br /&gt;
height:40px;&lt;br /&gt;
line-height:40px;&lt;br /&gt;
vertical-align:middle;&lt;br /&gt;
text-align:center;&lt;br /&gt;
background-color:rgb(35, 35, 35);&lt;br /&gt;
border:1px solid black;&lt;br /&gt;
border-radius:5px;&lt;br /&gt;
margin:5px;&lt;br /&gt;
color:#FFFFFF;&lt;br /&gt;
font-weight:bold;&lt;br /&gt;
font-size:140%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.warning{&lt;br /&gt;
 border: 1px red solid;&lt;br /&gt;
 width: 100xp;&lt;br /&gt;
 height: auto;&lt;br /&gt;
 display: block;&lt;br /&gt;
 background: rgba(255,0,0,0.1);&lt;br /&gt;
}&lt;br /&gt;
div.warning h2{&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
    font-size: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
div.warning div.text{&lt;br /&gt;
 color:black;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Template:Warning&amp;diff=49</id>
		<title>Template:Warning</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Template:Warning&amp;diff=49"/>
		<updated>2022-03-22T07:51:56Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: Created page with &amp;quot;&amp;lt;div class=&amp;quot;warning&amp;quot;&amp;gt; &amp;lt;h2&amp;gt;{{{titel}}}&amp;lt;/h2&amp;gt; &amp;lt;div class=&amp;quot;text&amp;quot;&amp;gt;{{{text}}}&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;warning&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;{{{titel}}}&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text&amp;quot;&amp;gt;{{{text}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Change_of_Prebid_Server_to_Prebid_Server_Premium&amp;diff=48</id>
		<title>Change of Prebid Server to Prebid Server Premium</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Change_of_Prebid_Server_to_Prebid_Server_Premium&amp;diff=48"/>
		<updated>2022-03-22T07:51:30Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction and background==&lt;br /&gt;
Until now, iq digital has used Xandr&#039;s Prebid Server software to process headerbidding bids from Xandr in AMP. Xandr has created an improved version, Prebid Server Premium, to which all publishers must switch by March 31, 2022 if they want to continue using Prebid Server (Premium). The ad tags hardly change in the process. Only one word in each ad tag must be replaced by the string &amp;quot;psp&amp;quot;. An adjustment of the ad tags is mandatory, otherwise errors may occur on the client side after March 31, 2022 and there may also be a loss of revenue if the header bidding provider Xandr is no longer available.&lt;br /&gt;
&lt;br /&gt;
The change to Prebid Server Premium also has the advantage that the software is more modern and it will be easier to add new headerbidding partners in the future without the publisher having to manually add them to their site (as was previously the case). This will also enable us to reduce the number of headerbidding requests in an AMP page in the future, when partners can be configured within the Prebid Server Premium environment and no longer use their own configuration in the amp-rtc config.&lt;br /&gt;
&lt;br /&gt;
==ToDo==&lt;br /&gt;
Here&#039;s what to do on publisher side for customization:&lt;br /&gt;
&lt;br /&gt;
===Previous===&lt;br /&gt;
Example amp-ad tag for an iqadtile3 (explanation: XXXXXX are values that can be different depending on the publisher):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; lines highlight=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- iqadtile3 --&amp;gt;&lt;br /&gt;
&amp;lt;amp-ad data-block-on-consent=&amp;quot;_till_accepted&amp;quot; width=&amp;quot;320&amp;quot; height=&amp;quot;320&amp;quot;&lt;br /&gt;
    type=&amp;quot;doubleclick&amp;quot;&lt;br /&gt;
    data-slot=&amp;quot;/183/XXXXXX&amp;quot;&lt;br /&gt;
    rtc-config=&#039;{&lt;br /&gt;
        &amp;quot;vendors&amp;quot;: {&lt;br /&gt;
			&amp;quot;yieldlab&amp;quot;: {&amp;quot;ADSLOT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
		    &amp;quot;aps&amp;quot;: {&amp;quot;PUB_ID&amp;quot;: &amp;quot;3711&amp;quot;,&amp;quot;PARAMS&amp;quot;:{&amp;quot;amp&amp;quot;:&amp;quot;1&amp;quot;}},&lt;br /&gt;
        	&amp;quot;prebidappnexus&amp;quot;: {&amp;quot;PLACEMENT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
            &amp;quot;criteo&amp;quot;: {&amp;quot;ZONE_ID&amp;quot;: &amp;quot;1298400&amp;quot;, &amp;quot;LINE_ITEM_RANGES&amp;quot;: &amp;quot;0..20:0.01;20..60:0.05;60..420:1.00&amp;quot;,&amp;quot;PUBLISHER_SUB_ID&amp;quot;:&amp;quot;XXXXXX&amp;quot;}&lt;br /&gt;
         }, &amp;quot;timeoutMillis&amp;quot;: 999}&#039;&lt;br /&gt;
    json=&#039;{&amp;quot;targeting&amp;quot;:{&amp;quot;kw&amp;quot;:[&amp;quot;nospa&amp;quot;,&amp;quot;enozqi&amp;quot;,&amp;quot;digtransform&amp;quot;,&amp;quot;XXXXXX&amp;quot;,&amp;quot;iqadtile3&amp;quot;],&amp;quot;tile&amp;quot;:[&amp;quot;3&amp;quot;],&amp;quot;doc&amp;quot;:[&amp;quot;artikel&amp;quot;],&amp;quot;iqadtype&amp;quot;:[&amp;quot;amp&amp;quot;]}}&#039;&lt;br /&gt;
    data-multi-size=&amp;quot;320x53,320x80,320x106,320x160,320x50,300x50,300x75,300x100,300x150,300x250&amp;quot;&lt;br /&gt;
    data-multi-size-validation=&amp;quot;false&amp;quot;&lt;br /&gt;
	data-loading-strategy=&amp;quot;1.25&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/amp-ad&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In the AMP rtc-config, there is a separate configuration for each headerbidding partner used by iq digital. As seen in the example above, these are Yieldlab, Amazon, Xandr (formerly Appnexus) and Criteo. The change to Prebid Server Premium only affects the configuration of Xandr.&lt;br /&gt;
The corresponding line is already highlighted in the example above.&lt;br /&gt;
&lt;br /&gt;
In this line, the word &#039;&#039;&#039;&#039;&#039;prebidappnexus&#039;&#039;&#039;&#039;&#039; must be supplemented by the string &amp;quot;psp&amp;quot; to &#039;&#039;&#039;&#039;&#039;prebidappnexuspsp&#039;&#039;&#039;&#039;&#039;. The value of &amp;quot;PLACEMENT_ID&amp;quot; remains the same.&lt;br /&gt;
===After===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; lines highlight=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- iqadtile3 --&amp;gt;&lt;br /&gt;
&amp;lt;amp-ad data-block-on-consent=&amp;quot;_till_accepted&amp;quot; width=&amp;quot;320&amp;quot; height=&amp;quot;320&amp;quot;&lt;br /&gt;
    type=&amp;quot;doubleclick&amp;quot;&lt;br /&gt;
    data-slot=&amp;quot;/183/XXXXXX&amp;quot;&lt;br /&gt;
    rtc-config=&#039;{&lt;br /&gt;
        &amp;quot;vendors&amp;quot;: {&lt;br /&gt;
			&amp;quot;yieldlab&amp;quot;: {&amp;quot;ADSLOT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
		    &amp;quot;aps&amp;quot;: {&amp;quot;PUB_ID&amp;quot;: &amp;quot;3711&amp;quot;,&amp;quot;PARAMS&amp;quot;:{&amp;quot;amp&amp;quot;:&amp;quot;1&amp;quot;}},&lt;br /&gt;
        	&amp;quot;prebidappnexuspsp&amp;quot;: {&amp;quot;PLACEMENT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
            &amp;quot;criteo&amp;quot;: {&amp;quot;ZONE_ID&amp;quot;: &amp;quot;1298400&amp;quot;, &amp;quot;LINE_ITEM_RANGES&amp;quot;: &amp;quot;0..20:0.01;20..60:0.05;60..420:1.00&amp;quot;,&amp;quot;PUBLISHER_SUB_ID&amp;quot;:&amp;quot;XXXXXX&amp;quot;}&lt;br /&gt;
         }, &amp;quot;timeoutMillis&amp;quot;: 999}&#039;&lt;br /&gt;
    json=&#039;{&amp;quot;targeting&amp;quot;:{&amp;quot;kw&amp;quot;:[&amp;quot;nospa&amp;quot;,&amp;quot;enozqi&amp;quot;,&amp;quot;digtransform&amp;quot;,&amp;quot;XXXXXX&amp;quot;,&amp;quot;iqadtile3&amp;quot;],&amp;quot;tile&amp;quot;:[&amp;quot;3&amp;quot;],&amp;quot;doc&amp;quot;:[&amp;quot;artikel&amp;quot;],&amp;quot;iqadtype&amp;quot;:[&amp;quot;amp&amp;quot;]}}&#039;&lt;br /&gt;
    data-multi-size=&amp;quot;320x53,320x80,320x106,320x160,320x50,300x50,300x75,300x100,300x150,300x250&amp;quot;&lt;br /&gt;
    data-multi-size-validation=&amp;quot;false&amp;quot;&lt;br /&gt;
	data-loading-strategy=&amp;quot;1.25&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/amp-ad&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Warning|titel=In summary|text=The rest of the adtag remains unchanged, as it has already been obstructed for each position. So it is completely sufficient to perform a search&amp;amp;replace action with the search term &#039;&#039;&#039;prebidappnexus&#039;&#039;&#039; and the replacement text &#039;&#039;&#039;prebidappnexuspsp&#039;&#039;&#039;!}}&lt;br /&gt;
[[de:Wechsel Prebid Server zu Prebid Server Premium]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Change_of_Prebid_Server_to_Prebid_Server_Premium&amp;diff=47</id>
		<title>Change of Prebid Server to Prebid Server Premium</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Change_of_Prebid_Server_to_Prebid_Server_Premium&amp;diff=47"/>
		<updated>2022-03-22T07:51:06Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction and background==&lt;br /&gt;
Until now, iq digital has used Xandr&#039;s Prebid Server software to process headerbidding bids from Xandr in AMP. Xandr has created an improved version, Prebid Server Premium, to which all publishers must switch by March 31, 2022 if they want to continue using Prebid Server (Premium). The ad tags hardly change in the process. Only one word in each ad tag must be replaced by the string &amp;quot;psp&amp;quot;. An adjustment of the ad tags is mandatory, otherwise errors may occur on the client side after March 31, 2022 and there may also be a loss of revenue if the header bidding provider Xandr is no longer available.&lt;br /&gt;
&lt;br /&gt;
The change to Prebid Server Premium also has the advantage that the software is more modern and it will be easier to add new headerbidding partners in the future without the publisher having to manually add them to their site (as was previously the case). This will also enable us to reduce the number of headerbidding requests in an AMP page in the future, when partners can be configured within the Prebid Server Premium environment and no longer use their own configuration in the amp-rtc config.&lt;br /&gt;
&lt;br /&gt;
==ToDo==&lt;br /&gt;
Here&#039;s what to do on publisher side for customization:&lt;br /&gt;
&lt;br /&gt;
===Previous===&lt;br /&gt;
Example amp-ad tag for an iqadtile3 (explanation: XXXXXX are values that can be different depending on the publisher):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; lines highlight=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- iqadtile3 --&amp;gt;&lt;br /&gt;
&amp;lt;amp-ad data-block-on-consent=&amp;quot;_till_accepted&amp;quot; width=&amp;quot;320&amp;quot; height=&amp;quot;320&amp;quot;&lt;br /&gt;
    type=&amp;quot;doubleclick&amp;quot;&lt;br /&gt;
    data-slot=&amp;quot;/183/XXXXXX&amp;quot;&lt;br /&gt;
    rtc-config=&#039;{&lt;br /&gt;
        &amp;quot;vendors&amp;quot;: {&lt;br /&gt;
			&amp;quot;yieldlab&amp;quot;: {&amp;quot;ADSLOT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
		    &amp;quot;aps&amp;quot;: {&amp;quot;PUB_ID&amp;quot;: &amp;quot;3711&amp;quot;,&amp;quot;PARAMS&amp;quot;:{&amp;quot;amp&amp;quot;:&amp;quot;1&amp;quot;}},&lt;br /&gt;
        	&amp;quot;prebidappnexus&amp;quot;: {&amp;quot;PLACEMENT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
            &amp;quot;criteo&amp;quot;: {&amp;quot;ZONE_ID&amp;quot;: &amp;quot;1298400&amp;quot;, &amp;quot;LINE_ITEM_RANGES&amp;quot;: &amp;quot;0..20:0.01;20..60:0.05;60..420:1.00&amp;quot;,&amp;quot;PUBLISHER_SUB_ID&amp;quot;:&amp;quot;XXXXXX&amp;quot;}&lt;br /&gt;
         }, &amp;quot;timeoutMillis&amp;quot;: 999}&#039;&lt;br /&gt;
    json=&#039;{&amp;quot;targeting&amp;quot;:{&amp;quot;kw&amp;quot;:[&amp;quot;nospa&amp;quot;,&amp;quot;enozqi&amp;quot;,&amp;quot;digtransform&amp;quot;,&amp;quot;XXXXXX&amp;quot;,&amp;quot;iqadtile3&amp;quot;],&amp;quot;tile&amp;quot;:[&amp;quot;3&amp;quot;],&amp;quot;doc&amp;quot;:[&amp;quot;artikel&amp;quot;],&amp;quot;iqadtype&amp;quot;:[&amp;quot;amp&amp;quot;]}}&#039;&lt;br /&gt;
    data-multi-size=&amp;quot;320x53,320x80,320x106,320x160,320x50,300x50,300x75,300x100,300x150,300x250&amp;quot;&lt;br /&gt;
    data-multi-size-validation=&amp;quot;false&amp;quot;&lt;br /&gt;
	data-loading-strategy=&amp;quot;1.25&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/amp-ad&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In the AMP rtc-config, there is a separate configuration for each headerbidding partner used by iq digital. As seen in the example above, these are Yieldlab, Amazon, Xandr (formerly Appnexus) and Criteo. The change to Prebid Server Premium only affects the configuration of Xandr.&lt;br /&gt;
The corresponding line is already highlighted in the example above.&lt;br /&gt;
&lt;br /&gt;
In this line, the word &#039;&#039;&#039;&#039;&#039;prebidappnexus&#039;&#039;&#039;&#039;&#039; must be supplemented by the string &amp;quot;psp&amp;quot; to &#039;&#039;&#039;&#039;&#039;prebidappnexuspsp&#039;&#039;&#039;&#039;&#039;. The value of &amp;quot;PLACEMENT_ID&amp;quot; remains the same.&lt;br /&gt;
===After===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; lines highlight=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- iqadtile3 --&amp;gt;&lt;br /&gt;
&amp;lt;amp-ad data-block-on-consent=&amp;quot;_till_accepted&amp;quot; width=&amp;quot;320&amp;quot; height=&amp;quot;320&amp;quot;&lt;br /&gt;
    type=&amp;quot;doubleclick&amp;quot;&lt;br /&gt;
    data-slot=&amp;quot;/183/XXXXXX&amp;quot;&lt;br /&gt;
    rtc-config=&#039;{&lt;br /&gt;
        &amp;quot;vendors&amp;quot;: {&lt;br /&gt;
			&amp;quot;yieldlab&amp;quot;: {&amp;quot;ADSLOT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
		    &amp;quot;aps&amp;quot;: {&amp;quot;PUB_ID&amp;quot;: &amp;quot;3711&amp;quot;,&amp;quot;PARAMS&amp;quot;:{&amp;quot;amp&amp;quot;:&amp;quot;1&amp;quot;}},&lt;br /&gt;
        	&amp;quot;prebidappnexuspsp&amp;quot;: {&amp;quot;PLACEMENT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
            &amp;quot;criteo&amp;quot;: {&amp;quot;ZONE_ID&amp;quot;: &amp;quot;1298400&amp;quot;, &amp;quot;LINE_ITEM_RANGES&amp;quot;: &amp;quot;0..20:0.01;20..60:0.05;60..420:1.00&amp;quot;,&amp;quot;PUBLISHER_SUB_ID&amp;quot;:&amp;quot;XXXXXX&amp;quot;}&lt;br /&gt;
         }, &amp;quot;timeoutMillis&amp;quot;: 999}&#039;&lt;br /&gt;
    json=&#039;{&amp;quot;targeting&amp;quot;:{&amp;quot;kw&amp;quot;:[&amp;quot;nospa&amp;quot;,&amp;quot;enozqi&amp;quot;,&amp;quot;digtransform&amp;quot;,&amp;quot;XXXXXX&amp;quot;,&amp;quot;iqadtile3&amp;quot;],&amp;quot;tile&amp;quot;:[&amp;quot;3&amp;quot;],&amp;quot;doc&amp;quot;:[&amp;quot;artikel&amp;quot;],&amp;quot;iqadtype&amp;quot;:[&amp;quot;amp&amp;quot;]}}&#039;&lt;br /&gt;
    data-multi-size=&amp;quot;320x53,320x80,320x106,320x160,320x50,300x50,300x75,300x100,300x150,300x250&amp;quot;&lt;br /&gt;
    data-multi-size-validation=&amp;quot;false&amp;quot;&lt;br /&gt;
	data-loading-strategy=&amp;quot;1.25&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/amp-ad&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Warning|titel=In summary|text=The rest of the adtag remains unchanged, as it has already been obstructed for each position. So it is completely sufficient to perform a search&amp;amp;replace action with the search term &#039;&#039;&#039;prebidappnexus&#039;&#039;&#039; and the replacement text &#039;&#039;&#039;prebidappnexuspsp&#039;&#039;&#039;!}}&lt;br /&gt;
[[en:Change of Prebid Server to Prebid Server Premium]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Change_of_Prebid_Server_to_Prebid_Server_Premium&amp;diff=46</id>
		<title>Change of Prebid Server to Prebid Server Premium</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Change_of_Prebid_Server_to_Prebid_Server_Premium&amp;diff=46"/>
		<updated>2022-03-22T07:50:51Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: Created page with &amp;quot;==Introduction and background== Until now, iq digital has used Xandr&amp;#039;s Prebid Server software to process headerbidding bids from Xandr in AMP. Xandr has created an improved version, Prebid Server Premium, to which all publishers must switch by March 31, 2022 if they want to continue using Prebid Server (Premium). The ad tags hardly change in the process. Only one word in each ad tag must be replaced by the string &amp;quot;psp&amp;quot;. An adjustment of the ad tags is mandatory, otherwis...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction and background==&lt;br /&gt;
Until now, iq digital has used Xandr&#039;s Prebid Server software to process headerbidding bids from Xandr in AMP. Xandr has created an improved version, Prebid Server Premium, to which all publishers must switch by March 31, 2022 if they want to continue using Prebid Server (Premium). The ad tags hardly change in the process. Only one word in each ad tag must be replaced by the string &amp;quot;psp&amp;quot;. An adjustment of the ad tags is mandatory, otherwise errors may occur on the client side after March 31, 2022 and there may also be a loss of revenue if the header bidding provider Xandr is no longer available.&lt;br /&gt;
&lt;br /&gt;
The change to Prebid Server Premium also has the advantage that the software is more modern and it will be easier to add new headerbidding partners in the future without the publisher having to manually add them to their site (as was previously the case). This will also enable us to reduce the number of headerbidding requests in an AMP page in the future, when partners can be configured within the Prebid Server Premium environment and no longer use their own configuration in the amp-rtc config.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ToDo==&lt;br /&gt;
Here&#039;s what to do on publisher side for customization:&lt;br /&gt;
&lt;br /&gt;
===Previous===&lt;br /&gt;
Example amp-ad tag for an iqadtile3 (explanation: XXXXXX are values that can be different depending on the publisher):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; lines highlight=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- iqadtile3 --&amp;gt;&lt;br /&gt;
&amp;lt;amp-ad data-block-on-consent=&amp;quot;_till_accepted&amp;quot; width=&amp;quot;320&amp;quot; height=&amp;quot;320&amp;quot;&lt;br /&gt;
    type=&amp;quot;doubleclick&amp;quot;&lt;br /&gt;
    data-slot=&amp;quot;/183/XXXXXX&amp;quot;&lt;br /&gt;
    rtc-config=&#039;{&lt;br /&gt;
        &amp;quot;vendors&amp;quot;: {&lt;br /&gt;
			&amp;quot;yieldlab&amp;quot;: {&amp;quot;ADSLOT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
		    &amp;quot;aps&amp;quot;: {&amp;quot;PUB_ID&amp;quot;: &amp;quot;3711&amp;quot;,&amp;quot;PARAMS&amp;quot;:{&amp;quot;amp&amp;quot;:&amp;quot;1&amp;quot;}},&lt;br /&gt;
        	&amp;quot;prebidappnexus&amp;quot;: {&amp;quot;PLACEMENT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
            &amp;quot;criteo&amp;quot;: {&amp;quot;ZONE_ID&amp;quot;: &amp;quot;1298400&amp;quot;, &amp;quot;LINE_ITEM_RANGES&amp;quot;: &amp;quot;0..20:0.01;20..60:0.05;60..420:1.00&amp;quot;,&amp;quot;PUBLISHER_SUB_ID&amp;quot;:&amp;quot;XXXXXX&amp;quot;}&lt;br /&gt;
         }, &amp;quot;timeoutMillis&amp;quot;: 999}&#039;&lt;br /&gt;
    json=&#039;{&amp;quot;targeting&amp;quot;:{&amp;quot;kw&amp;quot;:[&amp;quot;nospa&amp;quot;,&amp;quot;enozqi&amp;quot;,&amp;quot;digtransform&amp;quot;,&amp;quot;XXXXXX&amp;quot;,&amp;quot;iqadtile3&amp;quot;],&amp;quot;tile&amp;quot;:[&amp;quot;3&amp;quot;],&amp;quot;doc&amp;quot;:[&amp;quot;artikel&amp;quot;],&amp;quot;iqadtype&amp;quot;:[&amp;quot;amp&amp;quot;]}}&#039;&lt;br /&gt;
    data-multi-size=&amp;quot;320x53,320x80,320x106,320x160,320x50,300x50,300x75,300x100,300x150,300x250&amp;quot;&lt;br /&gt;
    data-multi-size-validation=&amp;quot;false&amp;quot;&lt;br /&gt;
	data-loading-strategy=&amp;quot;1.25&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/amp-ad&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In the AMP rtc-config, there is a separate configuration for each headerbidding partner used by iq digital. As seen in the example above, these are Yieldlab, Amazon, Xandr (formerly Appnexus) and Criteo. The change to Prebid Server Premium only affects the configuration of Xandr.&lt;br /&gt;
The corresponding line is already highlighted in the example above.&lt;br /&gt;
&lt;br /&gt;
In this line, the word &#039;&#039;&#039;&#039;&#039;prebidappnexus&#039;&#039;&#039;&#039;&#039; must be supplemented by the string &amp;quot;psp&amp;quot; to &#039;&#039;&#039;&#039;&#039;prebidappnexuspsp&#039;&#039;&#039;&#039;&#039;. The value of &amp;quot;PLACEMENT_ID&amp;quot; remains the same.&lt;br /&gt;
===After===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; lines highlight=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- iqadtile3 --&amp;gt;&lt;br /&gt;
&amp;lt;amp-ad data-block-on-consent=&amp;quot;_till_accepted&amp;quot; width=&amp;quot;320&amp;quot; height=&amp;quot;320&amp;quot;&lt;br /&gt;
    type=&amp;quot;doubleclick&amp;quot;&lt;br /&gt;
    data-slot=&amp;quot;/183/XXXXXX&amp;quot;&lt;br /&gt;
    rtc-config=&#039;{&lt;br /&gt;
        &amp;quot;vendors&amp;quot;: {&lt;br /&gt;
			&amp;quot;yieldlab&amp;quot;: {&amp;quot;ADSLOT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
		    &amp;quot;aps&amp;quot;: {&amp;quot;PUB_ID&amp;quot;: &amp;quot;3711&amp;quot;,&amp;quot;PARAMS&amp;quot;:{&amp;quot;amp&amp;quot;:&amp;quot;1&amp;quot;}},&lt;br /&gt;
        	&amp;quot;prebidappnexuspsp&amp;quot;: {&amp;quot;PLACEMENT_ID&amp;quot;: &amp;quot;XXXXXX&amp;quot;},&lt;br /&gt;
            &amp;quot;criteo&amp;quot;: {&amp;quot;ZONE_ID&amp;quot;: &amp;quot;1298400&amp;quot;, &amp;quot;LINE_ITEM_RANGES&amp;quot;: &amp;quot;0..20:0.01;20..60:0.05;60..420:1.00&amp;quot;,&amp;quot;PUBLISHER_SUB_ID&amp;quot;:&amp;quot;XXXXXX&amp;quot;}&lt;br /&gt;
         }, &amp;quot;timeoutMillis&amp;quot;: 999}&#039;&lt;br /&gt;
    json=&#039;{&amp;quot;targeting&amp;quot;:{&amp;quot;kw&amp;quot;:[&amp;quot;nospa&amp;quot;,&amp;quot;enozqi&amp;quot;,&amp;quot;digtransform&amp;quot;,&amp;quot;XXXXXX&amp;quot;,&amp;quot;iqadtile3&amp;quot;],&amp;quot;tile&amp;quot;:[&amp;quot;3&amp;quot;],&amp;quot;doc&amp;quot;:[&amp;quot;artikel&amp;quot;],&amp;quot;iqadtype&amp;quot;:[&amp;quot;amp&amp;quot;]}}&#039;&lt;br /&gt;
    data-multi-size=&amp;quot;320x53,320x80,320x106,320x160,320x50,300x50,300x75,300x100,300x150,300x250&amp;quot;&lt;br /&gt;
    data-multi-size-validation=&amp;quot;false&amp;quot;&lt;br /&gt;
	data-loading-strategy=&amp;quot;1.25&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/amp-ad&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Warning|titel=In summary|text=The rest of the adtag remains unchanged, as it has already been obstructed for each position. So it is completely sufficient to perform a search&amp;amp;replace action with the search term &#039;&#039;&#039;prebidappnexus&#039;&#039;&#039; and the replacement text &#039;&#039;&#039;prebidappnexuspsp&#039;&#039;&#039;!}}&lt;br /&gt;
[[en:Change of Prebid Server to Prebid Server Premium]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_apps&amp;diff=45</id>
		<title>Prebid Mobile SDK in apps</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_apps&amp;diff=45"/>
		<updated>2022-02-03T13:32:12Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: Tlohmann moved page Prebid Mobile SDK in apps to Prebid Mobile SDK in Apps&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Prebid Mobile SDK in Apps]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
	<entry>
		<id>http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=44</id>
		<title>Prebid Mobile SDK in Apps</title>
		<link rel="alternate" type="text/html" href="http://docs.iqd-ao.de/en/index.php?title=Prebid_Mobile_SDK_in_Apps&amp;diff=44"/>
		<updated>2022-02-03T13:32:12Z</updated>

		<summary type="html">&lt;p&gt;Tlohmann: Tlohmann moved page Prebid Mobile SDK in apps to Prebid Mobile SDK in Apps&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The Prebid Mobile SDK serves to integrate different header bidding providers in one app, and these providers can then make initial bids for the available ad positions on a page when the page is called. The winning bid is then forwarded via the Google Mobile Ads SDK to the ad server, which compares the bid with other bookings that are present there and serves the most suitable booking.&lt;br /&gt;
&lt;br /&gt;
==Integration and mode of operation==&lt;br /&gt;
[[Datei:Prebid SDK.png|800px]]&lt;br /&gt;
#Integrate the Prebid Mobile SDK&lt;br /&gt;
::iOS: https://github.com/prebid/prebid-mobile-ios&lt;br /&gt;
::Android: https://github.com/prebid/prebid-mobile-android&lt;br /&gt;
#Create the banner ad unit with all sizes and additional sizes that are to be included in the prebid request (the&lt;br /&gt;
PREBID_SERVER_CONFIGURATION_ID is taken from a separate table and assigned to the corresponding position).&lt;br /&gt;
#The Prebid Mobile SDK sends a request to the prebid server.&lt;br /&gt;
#The prebid server sends back an offer (if present).&lt;br /&gt;
#The ad request to Google Ad Manager is supplemented by the prebid parameters.&lt;br /&gt;
#Google Ad Manager reviews the request and serves the ad.&lt;br /&gt;
#The app displays the ad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Android example===&lt;br /&gt;
The example on the page shows that man wohl einen DFP PublisherAdView (??) and then generates the prebid banner ad unit. This is then given the prebid server request ID assigned to the banner ad unit and defines a size. Additional sizes are transmitted to the object using the add additional size method. Here, all the sizes should be transmitted that are also normally part of the ad request for the position.&lt;br /&gt;
&lt;br /&gt;
The bids are then connected using fetchDemand. The result codes are defined here: http://prebid.org/prebid-mobile/pbm- api/android/pbm-api-result-codes-android.html&lt;br /&gt;
In general, however, an ad request should always occur, regardless of whether bids are contained or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Important configurations==&lt;br /&gt;
In our case, the Prebid Mobile SDK works together with Prebid Server Premium and therefore needs a few adjustments:&lt;br /&gt;
&lt;br /&gt;
===Set Host===&lt;br /&gt;
Prebid Server Premium must be configured as a custom host. This is done in Android like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host custom = Host.CUSTOM;&lt;br /&gt;
custom.setHostUrl(&amp;quot;https://ib.adnxs.com/openrtb2/prebid&amp;quot;);&lt;br /&gt;
PrebidMobile.setPrebidServerHost(custom);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[https://docs.prebid.org/prebid-mobile/pbm-api/android/prebidmobile-object-android.html#sethost Anleitung Android Custom Host]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://docs.prebid.org/prebid-mobile/pbm-api/ios/prebidmobile-object-ios.html Anleitung iOS Custom Host]&lt;br /&gt;
&lt;br /&gt;
===Set Account ID===&lt;br /&gt;
Our account ID must also be set.&lt;br /&gt;
&amp;lt;pre&amp;gt;PrebidMobile.setPrebidServerAccountId(&amp;quot;6975&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Important Links==&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/prebid-mobile.html Getting Started]&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/prebid-mobile-pbs.html#developers---using-the-sdk Developers using the SDK] &lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/privacy-regulation.html Privacy Regulation]&lt;br /&gt;
*[https://docs.prebid.org/prebid-server/use-cases/pbs-sdk.html#prebid-sdk-calls-prebid-server Prebid SDK Workflow]&lt;br /&gt;
&lt;br /&gt;
===iOS===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html Code Integration]&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/ios/pbm-banneradunit-ios.html Banner Adunit]&lt;br /&gt;
&lt;br /&gt;
===Android===&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html Code Integration]&lt;br /&gt;
*[https://docs.prebid.org/prebid-mobile/pbm-api/android/pbm-banneradunit-android.html Banner Adunit]&lt;br /&gt;
[[de:Prebid Mobile SDK in Apps]]&lt;/div&gt;</summary>
		<author><name>Tlohmann</name></author>
	</entry>
</feed>