Advertising: Introduction
The Advertising module helps you quickly setup and show ads in your games. Here're some highlights of this module:
Supports multiple networks
- This module allows showing ads from most of top ad networks: AdColony, AdMob, AppLovin MAX, Chartboost, Facebook Audience Network, Fyber (Heyzap), ironSource, MoPub, Tapjoy, Unity Ads and Vungle
- Even more networks can be used via mediation service provided by AdMob, AppLovin MAX, Fyber, ironSource, MoPub or Tapjoy
Using multiple networks in one build
- It's possible to use multiple ad neworks at the same time, e.g. use AdMob for banner ads, while using Chartboost for interstitial ads and Unity Ads for rewarded ads
- Different configurations for different platforms are allowed, e.g. use Unity Ads for rewarded ads on Android, while using Chartboost for that type of ads on iOS
Automatic ad loading
- Ads will be fetched automatically in the background; new ad will be loaded if the last one was shown
The table below summarizes the ad types supported by Easy Mobile for each ad network.
Ad Network | Banner Ad | Interstitial Ad | Rewarded Ad | Rewarded Interstitial Ad | Mediation |
---|---|---|---|---|---|
AdColony | ◉ | ◉ | ◉ | ||
AdMob | ◉ | ◉ | ◉ | ◉ | ◉ |
AppLovin MAX | ◉ | ◉ | ◉ | ◉ | |
Chartboost | ◉ | ◉ | |||
FB Audience Network | ◉ | ◉ | ◉ | ||
Heyzap | ◉ | ◉ | ◉ | ◉ | |
ironSource | ◉ | ◉ | ◉ | ◉ | |
MoPub | ◉ | ◉ | ◉ | ◉ | |
Tapjoy | ◉ | ◉ | ◉ | ||
Unity Ads | ◉ | ◉ | ◉ | ||
Vungle | ◉ | ◉ | ◉ |
Ad Placements
An ad placement in Easy Mobile represents a specific "location" in your app where an ad is served. For example the "GameOver" placement can be defined as the "location" in your app where a game is over, and an ad is served. An ad placement is normally associated with an ad unit with a specific ad ID. Easy Mobile has several built-in ad placements including a default placement and other placements such as "Startup", "HomeScreen", "MainMenu", etc. You can also create more custom ad placements to suit your needs.
Grouping ads into placements provides an intuitive way to organize ads in your app and simplifies the implementation of flexible and sophisticated advertising strategies. It allows having more than one unit of a certain ad type (banner, interstitial or rewarded ad) of the same ad network. For example, you can use the default placement to show normal AdMob interstitial ads (and get paid!), while having a "Startup" placement to show AdMob interstitial house ads (at app launch), thus creating a free cross-promotion system for your apps!
Ad placements don't complicate things though. If you only need a basic usage of advertising, you can simply ignore all placement stuff when working with the Advertising API, and Easy Mobile will automatically use the default placement. Therefore, it's only necessary to provide ad IDs associated with the default placement when setting up ad networks (some ad networks may not even require such IDs). All other ad placements are optional and you only need to configure if you want to use any of them.
Default vs Non-Default Ads
A default ad of a certain type is the ad unit that belongs to the default network for that ad type at the default placement. For example, if the default interstitial network for the current platform is AdColony, then the AdColony interstitial ad at the default placement is the default interstitial ad. The rest are considered non-default interstitial ads. The same is true for banner and rewarded ads.
GDPR Compliance
We recommend you to read the Privacy chapter first to gain a comprehensive understanding of the tools and resources offered by Easy Mobile to help your app get compliant with GDPR, including the consent dialog and the consent management system.
Advertising is one of those services affected by the GDPR, because most ad providers collect user data to serve personalized ads. Most ad networks recommend requesting user consent for such data usage and serve personalized or non-personalized ads accordingly. Easy Mobile provides a native, multi-purpose dialog for collecting user consent for all ad networks or each individual ad network, as well as other relevant services, in a flexible manner. It also allows you to flexibily communicate the collected consent (apply the consent) to the Advertising module either at the module level or the vendor level.
Allowing the user to provide and manage consent for all services via a single interface (dialog) is advisable in terms of user experience, because the user may find it irritating being presented multiple dialogs asking consent for various things.
Consent | Description | Priority |
---|---|---|
Module consent | Common consent applied to all supported ad networks in the Advertising module | Lower |
Vendor consent | Consent applied to an individual ad network, e.g. AdMob | Higher |
Consent is normally applied during the initialization of an ad network. Therefore it is important to collect consent before initializing ad networks. Practically this means collecting consent before initializing the Easy Mobile runtime. If there's a vendor consent specified for the current network, it will be used. Otherwise the module consent will be used. If neither was specified, the global consent will be used. In case no consent provided at all levels, the ad network carries out its initialization without applying any consent and will serve personalized ads (the "pre-GDPR" behavior). The table below summarizes how Easy Mobile configures each network according to the provided consent.
Ad Network | Consent Granted | Consent Revoked | Consent Unknown |
---|---|---|---|
AdColony | Setting GdprRequired to 'true' and GdprConsentString to "1" | Setting GdprRequired to 'true' and GdprConsentString to "0" | Do nothing |
AdMob | Do nothing (keep serving personalized ads as normal) | Setting "npa" key to "1" when constructing AdRequest to serve non-personalized ads | Do nothing |
AppLovin MAX | Calling MaxSdk.SetHasUserConsent(true); | Calling MaxSdk.SetHasUserConsent(false); | Do nothing |
Chartboost | Calling Chartboost.restrictDataCollection(false); | Calling Chartboost.restrictDataCollection(true); | Do nothing |
Audience Network | Do nothing | Do nothing | Do nothing |
Heyzap | Calling HeyzapAds.SetGdprConsent(true); | Calling HeyzapAds.SetGdprConsent(false); | Do nothing |
ironSource | Calling IronSource.setConsent(true); | Calling IronSource.setConsent(false); | Do nothing |
MoPub | Calling MoPub.PartnerApi.GrantConsent(); | Calling MoPub.PartnerApi.RevokeConsent(); | Do nothing |
Tapjoy | Calling Tapjoy.SetUserConsent("1"); | Calling Tapjoy.SetUserConsent("0"); | Do nothing |
Unity Ads | Calling SetGdprMetadata(true); | Calling SetGdprMetadata(false); | Do nothing |
Vungle | Calling Vungle.updateConsentStatus(Vungle.Consent.Accepted); | Calling Vungle.updateConsentStatus(Vungle.Consent.Denied); | Calling Vungle.updateConsentStatus(Vungle.Consent.Undefined); |
Reference:
- AdColony: https://github.com/AdColony/AdColony-Unity-SDK-3/wiki/GDPR
- AdMob: https://developers.google.com/admob/unity/eu-consent
- AppLovin MAX: https://dash.applovin.com/documentation/mediation/unity/getting-started/privacy
- Chartboost: the C# source code of the Chartboost SDK for Unity
- Facebook Audience Network: https://developers.facebook.com/docs/audience-network/unity/ (the documentation doesn't mention anything about consent)
- Heyzap: https://developers.heyzap.com/docs/unity_sdk_setup_and_requirements#step-7-adding-user-consent
- ironSource: https://developers.ironsrc.com/ironsource-mobile/android/advanced-settings/#step-1
- MoPub: https://developers.mopub.com/docs/unity/gdpr/
- Tapjoy: https://dev.tapjoy.com/sdk-integration/
- Unity Ads: https://unityads.unity3d.com/help/legal/gdpr
- Vungle: https://support.vungle.com/hc/en-us/articles/360050183612#ad-configuration-options-0-2