SDK Integration | Appodeal Intelligent Ad Mediation

SDK Integration

  1. Manual

Link your Admob account

Appodeal yields optimal results in cooperation with Admob. To continue, you need to link your Admob account.

If you don't have Admob account, please sign up on Admob.com.

To link your Admob account to Appodeal, use the Chrome extension:

INSTALL EXTENSION


The extension source code is available at https://github.com/appodeal/admob-configurator.

The extension will make two changes in your Admob account. First, it will allow Appodeal to access your Admob reports over API, and second, it will create new ad units on Admob and submit them to Appodeal.

VIDEO TUTORIAL

Download SDK

You can install Appodeal plugin via SDKBOX auto-installer, running the following command:

sdkbox install appodeal

you can download it for manual installiation for cocos2d-x v3.x here and follow this integration guide

or cocos2d-x v2.x here and follow this integration guide.

Make sure you are using third party libraries from downloaded archive.

Minimum OS requirements: Cocos2d-x v2.2 or Cocos2d-js v2.2 and Android API level 9 (Android OS 2.3).

AndroidManifest.xml

Add following to your AndroidManifest.xml:

Add following under manifest tag:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Optional -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />

Add following under application tag:

<meta-data android:name="com.appodeal.framework" android:value="cocos2d" />
<activity android:name="com.appodeal.ads.InterstitialActivity"
          android:configChanges="orientation|screenSize"
          android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity android:name="com.appodeal.ads.VideoActivity"
          android:configChanges="orientation|screenSize"
          android:theme="@android:style/Theme.Translucent.NoTitleBar" />

<activity android:name="com.appodeal.ads.LoaderActivity"
          android:configChanges="orientation|screenSize"
          android:theme="@android:style/Theme.Translucent.NoTitleBar" />

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

<activity android:name="com.google.android.gms.ads.AdActivity"
          android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
          android:theme="@android:style/Theme.Translucent" />

<activity android:name="com.chartboost.sdk.CBImpressionActivity"
          android:theme="@android:style/Theme.Translucent"  android:screenOrientation="locked"
          android:excludeFromRecents="true" />

<activity android:name="com.applovin.adview.AppLovinInterstitialActivity"
          android:theme="@android:style/Theme.Translucent" />

<activity android:name="com.mopub.mobileads.MoPubActivity"
          android:configChanges="keyboardHidden|orientation|screenSize"
          android:theme="@android:style/Theme.Translucent" />
<activity android:name="com.mopub.common.MoPubBrowser"
          android:configChanges="keyboardHidden|orientation|screenSize" />
<activity android:name="com.mopub.mobileads.MraidActivity"
          android:configChanges="keyboardHidden|orientation|screenSize" />
<activity android:name="com.mopub.mobileads.MraidVideoPlayerActivity"
          android:configChanges="keyboardHidden|orientation|screenSize" />

<activity android:name="org.nexage.sourcekit.mraid.MRAIDBrowser"
          android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
          android:theme="@android:style/Theme.Translucent" />


<activity android:name="com.amazon.device.ads.AdActivity" android:configChanges="keyboardHidden|orientation|screenSize"/>

<activity android:name="ru.mail.android.mytarget.ads.MyTargetActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

<activity android:name="com.appodeal.ads.networks.SpotXActivity"
          android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>
<!--suppress AndroidDomInspection -->
<activity android:name="com.facebook.ads.InterstitialActivity" android:configChanges="keyboardHidden|orientation|screenSize" />

<activity android:name="com.unity3d.ads.android.view.UnityAdsFullscreenActivity"
          android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
          android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:hardwareAccelerated="true" />

<!--suppress AndroidDomInspection -->
<activity android:name="com.jirbo.adcolony.AdColonyOverlay"
          android:configChanges="keyboardHidden|orientation|screenSize"
          android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
<!--suppress AndroidDomInspection -->
<activity android:name="com.jirbo.adcolony.AdColonyFullscreen"
          android:configChanges="keyboardHidden|orientation|screenSize"
          android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" />
<!--suppress AndroidDomInspection -->
<activity android:name="com.jirbo.adcolony.AdColonyBrowser"
          android:configChanges="keyboardHidden|orientation|screenSize"
          android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" />
<!--suppress AndroidDomInspection -->
<activity android:name="com.vungle.publisher.FullScreenAdActivity"
          android:configChanges="keyboardHidden|orientation|screenSize"
          android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>
<!--suppress AndroidDomInspection -->
<activity android:name="com.startapp.android.publish.list3d.List3DActivity"
          android:theme="@android:style/Theme" />
<!--suppress AndroidDomInspection -->
<activity android:name="com.startapp.android.publish.OverlayActivity"
          android:theme="@android:style/Theme.Translucent"
          android:configChanges="orientation|keyboardHidden|screenSize" />
<!--suppress AndroidDomInspection -->
<activity android:name="com.startapp.android.publish.FullScreenActivity"
          android:theme="@android:style/Theme"
          android:configChanges="orientation|keyboardHidden|screenSize" />
<service android:name="com.yandex.metrica.MetricaService" android:enabled="true"
         android:exported="true" android:process=":Metrica">
  <intent-filter>
    <category android:name="android.intent.category.DEFAULT" />
    <action android:name="com.yandex.metrica.IMetricaService" />
    <data android:scheme="metrica" />
  </intent-filter>
  <meta-data android:name="metrica:api:level" android:value="32" />
</service>
<receiver android:name="com.yandex.metrica.MetricaEventHandler"
          android:enabled="true" android:exported="true">
  <intent-filter>
    <action android:name="com.android.vending.INSTALL_REFERRER" />
  </intent-filter>
</receiver>
<!--suppress AndroidDomInspection -->
<activity android:name="com.yandex.metrica.ads.AdActivity"
          android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
<activity android:name="com.inmobi.rendering.InMobiAdActivity"
          android:configChanges="keyboardHidden|orientation|keyboard|smallestScreenSize|screenSize"
          android:theme="@android:style/Theme.Translucent.NoTitleBar" android:hardwareAccelerated="true" />
<receiver android:name="com.inmobi.commons.core.utilities.uid.ImIdShareBroadCastReceiver"
          android:enabled="true" android:exported="true" >
  <intent-filter>
    <action android:name="com.inmobi.share.id" />
  </intent-filter>
</receiver>
<service android:enabled="true" android:name="com.inmobi.signals.activityrecognition.ActivityRecognitionManager" />

<activity android:name="com.supersonicads.sdk.controller.ControllerActivity"
          android:configChanges="orientation|screenSize"
          android:hardwareAccelerated="true" />
<activity android:name="com.supersonicads.sdk.controller.InterstitialActivity"
          android:configChanges="orientation|screenSize"
          android:hardwareAccelerated="true"
          android:theme="@android:style/Theme.Translucent" />
<activity android:name="com.supersonicads.sdk.controller.OpenUrlActivity"
          android:configChanges="orientation|screenSize"
          android:hardwareAccelerated="true"/>      

Callbacks and advanced features

Google Play device compatibility

If you are not using location services in you app and not using any other SDK that require ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permissions you can add the following code to manifest to make your app available on devices that don't have GPS support:

<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.network" android:required="false" />

Cocos2d-x Integration

SDK and plugin integration

After plugin installiation include Google Play Services v.7.5+ into your project, you can do it by adding dependency to project.properties, placed in android project root directory.

Edit your res/sdkbox_config.json, place there your Appodeal appKey:

"Appodeal":{
    "app_key":"fee50c333ff3825fd6ad6d38cff78154de3025546d47a84f"
  }

To initialize SDK you need to add following code in AppDelegate::applicationDidFinishLaunching() or somewhere on app start:

sdkbox::PluginAppodeal::init();

Ad types

  • AppodealAdTypeInterstitial
  • AppodealAdTypeVideo
  • AppodealAdTypeBanner
  • AppodealAdTypeNativeAd
  • AppodealAdTypeRewardVideo
  • AppodealAdTypeAll - combination of all currently supported and future ad types

Display ad

To display ad you need to call the following code:

sdkbox::PluginAppodeal::showAd(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleInterstitial);

show() returns a boolean value indicating whether show call was passed to appropriate SDK

To display interstitial use sdkbox::PluginAppodeal::showAd(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleInterstitial);

To display skippable video use use sdkbox::PluginAppodeal::showAd(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleVideo);

To display rewarded video use use sdkbox::PluginAppodeal::showAd(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleRewardedVideo);

To display interstitial or video use sdkbox::PluginAppodeal::showAd(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleVideoOrInterstitial);

To display banner at the bottom of the screen use sdkbox::PluginAppodeal::showAd(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleBannerBottom);

To display banner at the top of the screen use sdkbox::PluginAppodeal::showAd(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleBannerTop);

To display banner at the center of the screen use sdkbox::PluginAppodeal::showAd(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleBannerCenter);

Hiding banner

To hide banner you need to call the following code:

sdkbox::PluginAppodeal::hideBanner();

Callbacks and advanced features

Enabling debug mode

sdkbox::PluginAppodeal::setDebugEnabled(true);

Checking if ad is loaded

sdkbox::PluginAppodeal::isReadyForShowWithStyle(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleBannerBottom);

To check if interstitial is loaded use sdkbox::PluginAppodeal::isReadyForShowWithStyle(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleInterstitial)

To check if skippable video is loaded use sdkbox::PluginAppodeal::isReadyForShowWithStyle(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleVideo)

To check if rewarded video is loaded use sdkbox::PluginAppodeal::isReadyForShowWithStyle(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleRewardedVideo)

To check if banner is loaded use sdkbox::PluginAppodeal::isReadyForShowWithStyle(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleBannerBottom)

Setting callbacks

To set callbacks create class ADListener:

class ADListener : public sdkbox::AppodealListener {
  public:
  virtual void onBannerDidLoadAd();
  virtual void onBannerDidFailToLoadAd();
  virtual void onBannerDidClick();
  virtual void onBannerPresent();

  virtual void onInterstitialDidLoadAd();
  virtual void onInterstitialDidFailToLoadAd();
  virtual void onInterstitialWillPresent();
  virtual void onInterstitialDidDismiss();
  virtual void onInterstitialDidClick();

  virtual void onVideoDidLoadAd();
  virtual void onVideoDidFailToLoadAd();
  virtual void onVideoDidPresent();
  virtual void onVideoWillDismiss();
  virtual void onVideoDidFinish();
};

and set it to appodeal:

sdkbox::PluginAppodeal::setListener(this);

and then you can use it like this:

void ADListener::onBannerDidLoadAd() {
  sdkbox::PluginAppodeal::showAd(sdkbox::PluginAppodeal::ShowStyle::AppodealShowStyleBannerBottom);
  CCLOG("Listener onBannerDidLoadAd");
}

Setting user data.

Our SDK provides the transfer of user data for better ad targeting and higher eCPM. All parameters are optional and can be defined partially.

To obtain reference to the user settings, please call this before Appodeal initialization.

Set the age of the user

Positive integer value.

sdkbox::PluginAppodeal::setUserAge(25);

Set birth date

sdkbox::PluginAppodeal::setUserBirthday("17/06/1990");

birthday in format "DD/MM/YYYY" or "MM/YYYY" or "YYYY"

Set user email

sdkbox::PluginAppodeal::setUserEmail("test@sdkbox.com");

Set Facebook ID

sdkbox::PluginAppodeal::setUserFacebookId("1623169517896758");

Set User ID

sdkbox::PluginAppodeal::setUserVkId("91918219");

Specify gender of the user

sdkbox::PluginAppodeal::setUserGender(sdkbox::PluginAppodeal::Gender::AppodealUserGenderMale);

Possible values: AppodealUserGenderFemale, AppodealUserGenderMale, AppodealUserGenderOther.

Set interests of the user

sdkbox::PluginAppodeal::setUserInterests("reading, games, movies, snowboarding");

Specify occupation of the user

sdkbox::PluginAppodeal::setUserOccupation(sdkbox::PluginAppodeal::Occupation::AppodealUserOccupationSchool);

Possible values: AppodealUserOccupationWork, AppodealUserOccupationUnivercity, AppodealUserOccupationSchool, AppodealUserOccupationOther

Specify marital status of the user

sdkbox::PluginAppodeal::setUserRelationship(sdkbox::PluginAppodeal::Relationship::AppodealUserRelationshipSingle);

Possible values: AppodealUserRelationshipDating, AppodealUserRelationshipEngaged, AppodealUserRelationshipMarried, AppodealUserRelationshipSearching, AppodealUserRelationshipSingle, AppodealUserRelationshipOther

Set drinking habits of the user

sdkbox::PluginAppodeal::setUserAlcoholAttitude(sdkbox::PluginAppodeal::AlcoholAttitude::AppodealUserAlcoholAttitudeNegative);

Possible values: AppodealUserAlcoholAttitudeNegative, AppodealUserAlcoholAttitudeNeutral, AppodealUserAlcoholAttitudePositive.

User attitude to smoking

sdkbox::PluginAppodeal::setUserSmokingAttitude(sdkbox::PluginAppodeal::SmokingAttitude::AppodealUserSmokingAttitudeNegative);
  

Possible values:: AppodealUserSmokingAttitudeNegative, AppodealUserSmokingAttitudePositive, AppodealUserSmokingAttitudeNeutral.

Proguard settings

If you are using Proguard

If you are using Proguard add the following to your Proguard config file:

# Appodeal
-keep class com.appodeal.** { *; }
-keep class org.nexage.** { *; }
-keepattributes EnclosingMethod, InnerClasses, Signature, JavascriptInterface

# Amazon
-keep class com.amazon.** { *; }
-dontwarn com.amazon.**

# Mopub
-keep public class com.mopub.**
-keepclassmembers class com.mopub.** { public *; }
-keep class * extends com.mopub.mobileads.CustomEventBanner {}
-keep class * extends com.mopub.mobileads.CustomEventInterstitial {}
-keep class * extends com.mopub.nativeads.CustomEventNative {}
-keep class * extends com.mopub.mobileads.CustomEventRewardedVideo {}
-dontwarn com.mopub.volley.toolbox.**

# Applovin
-keep class com.applovin.** { *; }
-dontwarn com.applovin.**

# Facebook
-keep class com.facebook.ads.** { *; }
-dontwarn com.facebook.ads.**

# Chartboost
-keep class com.chartboost.** { *; }
-dontwarn com.chartboost.**

# Unity Ads
-keepattributes JavascriptInterface
-keepattributes SourceFile,LineNumberTable
-keep class com.unity3d.** { *; }

# Yandex
-keep class com.yandex.metrica.** { *; }
-dontwarn com.yandex.metrica.**
-keep class com.yandex.mobile.ads.** { *; }
-dontwarn com.yandex.mobile.ads.**
-keepattributes *Annotation*

# StartApp
-keep class com.startapp.** { *;}
-dontwarn com.startapp.**
-keepattributes Exceptions, InnerClasses, Signature, Deprecated, SourceFile, LineNumberTable, *Annotation*, EnclosingMethod

# Flurry
-keep class com.flurry.** { *; }
-dontwarn com.flurry.**
-keepattributes *Annotation*,EnclosingMethod,Signature
-keepclasseswithmembers class * {
  public <init>(android.content.Context, android.util.AttributeSet, int);
}

# Avocarrot
-keep class com.avocarrot.** { *; }
-keepclassmembers class com.avocarrot.** { *; }
-dontwarn com.avocarrot.**
-keep public class * extends android.view.View {
  public <init>(android.content.Context);
  public <init>(android.content.Context, android.util.AttributeSet);
  public <init>(android.content.Context, android.util.AttributeSet, int);
  public void set*(...);
}

# Adcolony
-keep class com.jirbo.adcolony.** { *;}
-keep class com.immersion.** { *;}
-dontnote com.immersion.**
-dontwarn android.webkit.**
-dontwarn com.jirbo.adcolony.**

# Vungle
-keep class com.vungle.** { public *; }
-keep class javax.inject.*
-keepattributes *Annotation*, Signature
-keep class dagger.*
-dontwarn com.vungle.**

# MyTarget
-keep class com.my.target.** { *; }
-dontwarn com.my.target.**
-keep class ru.mail.android.mytarget.** { *; }
-dontwarn ru.mail.android.mytarget.**

#Cheetah Mobile
-keep class com.cmcm.** { *; }
-dontwarn com.cmcm.**

# Tapjoy
-keep class com.tapjoy.** { *; }
-dontwarn com.tapjoy.**

# Revmob
-keep class com.revmob.** { *; }
-dontwarn com.revmob.**

# Admob
-keep class com.google.android.gms.ads.** { *; }

# Google
-keep class com.google.android.gms.common.GooglePlayServicesUtil {*;}
-keep class com.google.android.gms.ads.identifier.** { *; }
-dontwarn com.google.android.gms.**

# Legacy
-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**
-dontwarn android.net.http.**

# Google Play Services library
-keep class * extends java.util.ListResourceBundle {
    protected Object[][] getContents();
}
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
  public static final *** NULL;
}
-keepnames class * implements android.os.Parcelable
-keepclassmembers class * implements android.os.Parcelable {
  public static final *** CREATOR;
}
-keep @interface android.support.annotation.Keep
-keep @android.support.annotation.Keep class *
-keepclasseswithmembers class * {
  @android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
  @android.support.annotation.Keep <methods>;
}
-keep @interface com.google.android.gms.common.annotation.KeepName
-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
  @com.google.android.gms.common.annotation.KeepName *;
}
-keep @interface com.google.android.gms.common.util.DynamiteApi
-keep public @com.google.android.gms.common.util.DynamiteApi class * {
  public <fields>;
  public <methods>;
}
-keep class com.google.android.gms.common.GooglePlayServicesNotAvailableException {*;}
-keep class com.google.android.gms.common.GooglePlayServicesRepairableException {*;} 

# Google Play Services library 9.0.0 only
-dontwarn android.security.NetworkSecurityPolicy
-keep public @com.google.android.gms.common.util.DynamiteApi class * { *; }

# support-v4
-keep class android.support.v4.app.Fragment { *; }
-keep class android.support.v4.app.FragmentActivity { *; }
-keep class android.support.v4.app.FragmentManager { *; }
-keep class android.support.v4.app.FragmentTransaction { *; }
-keep class android.support.v4.content.LocalBroadcastManager { *; }
-keep class android.support.v4.util.LruCache { *; }
-keep class android.support.v4.view.PagerAdapter { *; }
-keep class android.support.v4.view.ViewPager { *; }
-keep class android.support.v4.content.ContextCompat { *; }

# support-v7-recyclerview
-keep class android.support.v7.widget.RecyclerView { *; }
-keep class android.support.v7.widget.LinearLayoutManager { *; }

Admob Adapter

Admob adapter for Appodeal is included with our jar.

To use it do the following:

1. Go to your adUnit, click on “Mediation ad sources”

2. Add New ad network

3. Add new Custom Event:

Class Name - com.google.ads.mediation.appodeal.AppodealCustomEvent

Label - AppodealCustomEvent

Parameter - fee50c333ff3825fd6ad6d38cff78154de3025546d47a84f

Admob1
Admob2

MoPub Adapter

MoPub adapter for Appodeal is included with our jar.

To use it do the following:

1. On the MoPub Networks page click “Add Network”

2. Choose “Custom Native Network”

3. Enter the Custom Event Class information into the text boxes.

Custom Event Class - com.mopub.mobileads.AppodealCustomEventInterstitial

Custom Event Class Data - {"appKey":"fee50c333ff3825fd6ad6d38cff78154de3025546d47a84f"}

Mopub2
Mopub1

Changelog

1.15.7 (Oct 10, 2016)

  • Small fixes

1.15.6 (Oct 5, 2016)

  • Adding setLogLevel method. Available parameters: LogLevel.none, LogLevel.debug, LogLevel.verbose
  • Removing setLogging method
  • Chartboost integration fixes
  • Adding day and hour segment rules
  • Updating Proguard

1.15.5 (Sep 21, 2016)

  • Updating Unity Ads to 2.0.4

1.15.4 (Sep 16, 2016)

  • Integrating Revmob: banners, interstitials, skippable videos, rewarded videos
  • Adding per placement price floors
  • Banner change animation optimization
  • Performance optimizations
  • Updating Unity Ads to 2.0.2. AAR is no longer needed
  • Updating Proguard
  • Updating AndroidManifest

1.15.3 (Sep 6, 2016)

  • Fixing GoogleApiAvailability NoClassDefFoundError on old Google Play Services during initialization
  • Fixing rare crashes in VASTActivity
  • Renaming setCustomSegment to setCustomRule
  • Adding rewarded videos from Tapjoy. Do not forget to add new activities in AndroidManifest
  • Adding support for refresh period in banners and MRECs configured using placements
  • Sending pricefloor on impression with our offers to improve second price calculation
  • Minor fixes
  • Updating Avocarrot to 3.7.3
  • Updating Tapjoy to 11.8.0
  • Updating MyTarget to 4.5.10
  • Updating Chartboost to 6.5.1
  • Updating Amazon Ads to 5.8.1
  • Updating Applovin to 6.3.0
  • Updating Flurry to 6.5.0

1.15.2 (Aug 12, 2016)

  • Fixing NPE in cases where some network SDKs are not present

1.15.1 (Aug 08, 2016)

  • Removing Inmobi SDK. Do not forget to remove inmobi receivers from manifest
  • Adding support of videos from MyTarget
  • Dex loading improvements
  • Keeping screen on during video playback
  • Adding support for disabling network by ad type in segments
  • Adding container interface for native ads
  • Updating Unity Ads to 1.5.8
  • Updating Adcolony to 2.3.6
  • Update MyTarget to 4.5.6
  • Updating Startapp to 3.4.3
  • Updating Applovin to 6.2.4
  • Adding Cheetah Mobile Ads SDK

1.15 (June 24, 2016, Internal)

  • Adding video native ads. Use AppodealMediaView to show video in your native ads
  • Adding setAppodealMediaView and containsVideo methods to NativeAd object
  • Adding Appodeal.setNativeAdType method to change video native ads settings
  • Renaming setAutoCacheNativeImages to setAutoCacheNativeMedia
  • Updating segment when using setCustomSegment method
  • Fixes
  • Updating Mopub to 5.7.1
  • Updating MyTarget to 4.5.0
  • Updating Avocarrot to 3.7.2
  • Updating Facebook to 4.12.1
  • Removing setVkId and setFacebookId methods from UserSettings
  • Adding com.appodeal.ads.VideoPlayerActivity to manifest

1.14.15 (June 17, 2016)

  • Adding setSmartBanners method to enable/disable smart banners (Enabled by default)
  • Adding set728x90Banners method to enable/disable 728*90 banners (Disabled by default)
  • Minor fixes
  • Adding banner and mrec precache
  • onBannerLoaded(int height) -> onBannerLoaded(int height, boolean isPrecache). setOnLoadedTriggerBoth, isPrecache
  • onMrecLoaded() -> onMrecLoaded(boolean isPrecache). setOnLoadedTriggerBoth, isPrecache
  • Adding autocaching in native ads, enabled by default. One ad is requested after initialization. setAutoCache
  • Support for campaign frequency for cross promo
  • Performance optimization
  • Removing Appodeal.BANNER_CENTER
  • Fixes:
  • Updating Inmobi to 5.3.1
  • Updating Yandex Ads to 2.12
  • Updating Vungle to 3.3.5
  • Updating Startap to 3.4.2
  • Updating Applovin to 6.2.2
  • Updating Mopub to 4.6.1
  • Updating Amazon to 5.7.2
  • Updating Facebook to 4.12
  • Updating MyTarget to 4.5.1. Rename ru.mail.android.mytarget.ads.MyTargetActivity activity to com.my.target.ads.MyTargetActivity. Fixes the issue with URL credentials alert in Google Play
  • Updating Avocarrot to 3.7.0
  • Changing Proguard

1.14.14 (May 04, 2016)

  • Adding setSmartBanners method to enable/disable smart banners (Enabled by default)
  • Adding set728x90Banners method to enable/disable 728*90 banners (Disabled by default)
  • Minor fixes

1.14.13 (May 01, 2016)

  • Adding boolean flag to onSkippableVideoClosed, onRewardedVideoClosed, onNonSkippableVideoClosed which equals true if video was finished
  • Updating YandexMetrica to 2.41 and YandexAds to 2.11. Do not forget to change metrica:api:level in AndroidManifest to 44
  • Updating Amazon to 5.7.1.1
  • Updating Inmobi to 5.3.0
  • Updating Avocarrot to 3.6.1
  • Updating Adcolony to 2.3.5
  • Integarting Applovin native ads over API
  • Removing isLoadedWithPriceFloor method
  • Fixes to banner refresh animation
  • AndroidManifest changes
  • Proguard changes
  • Minor fixes

1.14.12 (April 10, 2016)

  • Minor fixes

1.14.11 (April 4, 2016)

  • Adding Appodeal.disableWriteExternalStoragePermissionCheck() method. Disables all ad networks that need this permission may lead to low video fillrate
  • Adding toast on initialization if support-v7-recyclerview is missing for native ads
  • Adding getAgeRestrictions method for native ads. Optional, may return null
  • Cleaning video cache automatically
  • Adding video, interstitials and banner from Flurry
  • Keeping screen on during video playback
  • Updating Startapp to 3.3.2
  • Updating Avocarrot to 3.6.0
  • Updating Facebook to 4.10.1
  • Updating Mailru to 4.3.10
  • Updating Yandex Metrica to 2.32 and Yandex Ads to 2.02. Do not forget to change metrica:api:level in AndroidManifest
  • Updating Chartboost to 6.4.1
  • Updating Adcolony to 2.3.4
  • Updating MoPub to 4.5.0
  • Updating android-support-v4 to 23.1.1
  • Updating android-support-v7-recyclerview to 23.1.1
  • Removing Pubnative aar and integrating over API
  • AndroidManifest changes
  • Minor fixes

1.14.10 (March 14, 2016)

  • Minor fixes
  • Updating Inmobi to 5.2.3

1.14.9 (March 7, 2016)

  • Native ads fixes

1.14.8 (February 26, 2016)

  • Minor fixes

1.14.7 (February 22, 2016, Internal)

  • Performance improvements
  • Replacing Liverail with Facebook, do not forget to update your AndroidManifest.xml
  • Native ads fixes
  • Updating Startapp to 3.3.1
  • Updating Vungle to 3.3.4
  • Updating Mailru to 4.3.6
  • Updating Yandex to 2.01
  • Updating Chartboost to 6.3.0
  • Updating Inmobi to 5.2.1
  • Removing showWithPriceFloor(soon to be replaced with placements)
  • unRegisterViewForInteraction no longer requires View as argument

1.14.6 (January 30, 2016)

  • Minor fixes

1.14.5 (January 29, 2016)

  • Minor fixes

1.14.4 (January 27, 2016, Internal)

  • Adding native templates
  • Minor fixes

1.14.3 (January 23, 2016, Internal)

  • Adding MoPub Banner Adapter
  • Updating Avocarrot to 3.5.4
  • Minor fixes

1.14.2 (January 20, 2016)

  • Small fixes
  • Adding new entries to Proguard
  • Adding new entries to AndroidManifest

1.14.1 (January 18, 2016, Internal)

  • Updating Chartboost to 6.2.0
  • Updating Inmobi to 5.2.0
  • Updating YandexMetrica to 2.30 and YandexAds to 2.00
  • Updating Flurry to 6.2.0

1.14 (January 10, 2016, Internal)

  • Adding native ads, Appodeal.NATIVE
  • Adding 300*250 banners, Appodeal.MREC
  • Updating Applovin to 6.1.5
  • Updating Avocarrot to 3.5.3
  • Updating Startapp to 3.3.0
  • Updating Mailru to 4.2.0
  • Updating UnityAds to 1.5.6
  • Updating MoPub to 4.3.3
  • Bug fixes

1.13.11 (December 7, 2015, Internal)

  • Improving video fillrate
  • Adding rewarded video from MoPub
  • Removing Appodeal.ALL constant
  • Renaming Appodeal.VIDEO to Appodeal.SKIPPABLE_VIDEO
  • Renaming VideoCallbacks to SkippableVideoCallbacks
  • Adding Appodeal.NON_SKIPPABLE_VIDEO alias for Appodeal.REWARDED_VIDEO
  • Adding NonSkippableVideoCallbacks
  • Adding alert dialog when using Appodeal.NON_SKIPPABLE_VIDEO, to disable use Appodeal.confirm(Appodeal.SKIPPABLE_VIDEO)
  • Updating Chartboost to 6.1.0
  • Updating Liverail to 4.7.0
  • Bug fixes

1.13.10 (November 18, 2015)

  • Fixing issue with rewarded video were onVideoFinished callback will not trigger in some cases
  • Renaming rewarded video callbacks:
  • onVideoLoaded -> onRewardedVideoLoaded
  • onVideoFailedToLoad -> onRewardedVideoFailedToLoad
  • onVideoShown -> onRewardedVideoShown
  • onVideoFinished -> onRewardedVideoFinished
  • onVideoClosed -> onRewardedVideoClosed

1.13.9 (November 14, 2015)

  • Adding banner fadeout animation
  • Updating Mailru to 4.1.2
  • Updating Startapp to 3.2.2
  • Updating Vungle to 3.3.3
  • Updating Chartboost to 6.0.2 (Make sure to copy CBImpressionActivity from AndroidManifest docs)
  • Fixing issues with Liverail banners and interstitials crashes
  • Proguard changes
  • Various fixes

1.13.7 (October 27, 2015)

  • Removing default Appodeal.initialize(activity, appKey) method, use Appodeal.initialize(activity, appKey, adTypes) method instead. To initialize banner, interstitials and rewarded video use Appodeal.initialize(activity, appKey, Appodeal.BANNER | Appodeal.INTERSTITIAL | Appodeal.REWARDED_VIDEO)
  • Various fixes

1.13.6 (October 23, 2015, Internal)

  • Adding Appodeal.trackInAppPurchase() method
  • Adding Liverail video
  • Various fixes

1.13.5 (October 19, 2015, Internal)

  • Adding separate ad type Appodeal.REWARDED_VIDEO for rewarded videos
  • Android M support
  • Triggering onLoad callback when cache is called if ad is already loaded
  • Adding Appodeal.setLogging(true) method to enable logging
  • Appodeal.disableNetwork() method now accepts optional adType and allows to diable specific network for on or more ad types. Should be used before initialization
  • Adding StartApp interstitials, banners and rewarded videos
  • Adding Yandex interstitials and banners
  • Adding Inneractive interstitials and banners
  • Adding rewarded video from Vungle
  • Replacing Facebook with LiveRail, do not forget to remove facebook.jar
  • Using separate dex file for each ad network
  • Updating Applovin to 6.1.4
  • Updating Mailru to 4.1.1
  • Updating MoPub to 4.0.0
  • Updating Unity Ads to 1.5.3
  • Adding new entries to Proguard
  • Adding new entries to AndroidManifest
  • Fixing bug when banners sometimes would appear on screen rotate
  • Various fixes

1.13.1 (August 18, 2015)

  • Small fixes

1.13 (August 14, 2015, Internal)

  • General:
  • Decreasing network traffic from and to Appodeal servers
  • Appodeal.cache() method will not work if autocache is enabled
  • Appodeal.show(INTERSTITIAL | VIDEO) will show 3s loader if ad is not cached yet
  • Impression and click stats will not be tracked when test mode is enabled
  • support-v4 library is now needed
  • Loading new networks from dex file to solve 65k method limit
  • Context added as first argument of Appodeal.disableNetwork() method.
  • Interstitials:
  • Adding Facebook and Appnexus interstitials
  • Banners:
  • Adding Facebook and Appnexus banners
  • Removing Applovin banners
  • Caching next banner after show
  • Refreshing Admob smart banner on orientation change
  • Video:
  • Adding unskippable videos support. To change which videos to show go to app settings in dashboard.
  • Adding rewarded video from Chartboost, Applovin and UnityAds
  • Adding unskippable video from MoPub
  • Adding Vungle support (Only skippable)
  • Adding Andcolony support (Skippable and V4VC)
  • Adding video without end screen banner support (Currently only from MoPub). To change which videos to show go to app settings in dashboard.
  • Fixes to increase video fillrate
  • Libraries updates:
  • Updating Chartboost to 5.5.3
  • Updating Applovin to 6.0.1
  • Updating MoPub to 3.10.0
  • Fixes:
  • General fillrate fixes
  • Centering fixes in some interstitials

1.12.9 (July 2, 2015, Internal)

  • Updating Unity Ads to 1.4.7
  • Updating Mailru to 4.0.13
  • Fixing MoPub NullPointerException

1.12.8 (June 30, 2015)

  • Small fixes

1.12.7 (June 23, 2015)

  • Updating Unity Ads library to 1.4.4
  • Updating Mailru library to 4.0.11
  • Adding new meta-data entry com.appodeal.framework to AndroidManifest
  • Fixing banner refresh if banner failed to load
  • Banner related fixes

1.12.6 (June 18, 2015)

  • Fixing "for kids" setting
  • Fixing bug related to showing banner in dynamic View

1.12.5 (June 16, 2015)

  • Bug fixes

1.12.4 (June 15, 2015, Internal)

  • Bug fixes

1.12.3 (June 13, 2015, Internal)

  • Adding Mailru banners and interstitials support
  • Adding MoPub video support
  • Adding Applovin video support
  • Removing Supersonic library from SDK. Do not forget to remove Supersonic entries from AndroidManifest.xml
  • Running callbacks on UI thread
  • Adding ability to disable specific ad type from dashboard (coming soon!)
  • Adding Admob banner mediation
  • Adding getBannerView method which return View with banner in it (Call Appodeal.show(this, BANNER_VIEW) after getBannerView)
  • Adding isLoadedWithPriceFloor method for interstitials
  • Adding getVersion method
  • Adding setTesting(true) method to show test ads and write to debug log
  • Renaming method Appodeal.orientationChange to Appodeal.onResume. This method should be called in onResume method of you activity if banner dissappears on orientation change
  • Not showing banner if view wasn't found (BANNER_VIEW only)
  • Updating MoPub library to 3.8.0
  • Updating Chartboost library to 5.4.1
  • Updating Amazon library to 5.6.20
  • Updating Unity Ads library to 1.4.2
  • Banner fillrate fixes
  • Fixing centering in some banners
  • Disabling SDK on devices < 2.3 to prevent crashing
  • Bug fixes

1.12.2 (May 15, 2015)

  • Adding Smaato banners support
  • Adding Appodeal.disableLocationPermissionCheck()
  • Sending video finished stats to server
  • Bug fixes

1.12.1 (May 14, 2015, Internal)

  • Adding MoPub banners support
  • Adding TapSense banners support
  • Bug fixes

1.12 (May 12, 2015, Internal)

  • Adding banners support (Admob, Amazon, Applovin)
  • Adding banners callbacks
  • Adding banners position customization
  • Adding new ad types parameters:
  • Appodeal.BANNER
  • Appodeal.BANNER_BOTTOM
  • Appodeal.BANNER_TOP
  • Appodeal.BANNER_CENTER
  • Appodeal.BANNER_VIEW

1.11.2 (May 4, 2015)

  • Adding ad types parameters:
  • Appodeal.INTERSTITIAL
  • Appodeal.VIDEO
  • Appodeal.ALL and Appodeal.ANY - combination of all currently supported and future ad types
  • Ad types can be combined using "|" operator. For example Appodeal.INTERSTITIAL | Appodeal.VIDEO
  • Appodeal.initialize method will initialize interstitials and videos. To initialize only one use initialize with adType parameter
  • Removing initialization with callbacks. Use setInterstitialCallbacks and setVideoCallbacks
  • Removing showBanner method. Use show with adType parameter
  • Removing cacheBanner method. Use cache with adType parameter
  • Removing showBannerWithPriceFloor method. Use showWithPriceFloor with adType parameter(Currently supported only for interstitials)
  • isLoaded now takes adType parameter
  • isLoadedPrecache renamed to isPrecache that takes adType parameter(Currently supported only for interstitials)
  • setAutoCache now takes adType parameter
  • setOnLoadedTriggerBoth now takes adType parameter(Currently supported only for interstitials)
  • Updating MoPub library to 3.7.0
  • Fixing ad centering issue on new versions of Android WebView
  • isLoaded now returns false if autocache is disabled and ad is expired(OpenX ads only, they expire 4 minutes after cache)

1.11.1 (Apr 28, 2015, Internal)

  • Renaming interstitial callbacks from onAd... to onInterstitial...
  • Removing the need for android-support-v4.jar for SDK functionality. If your app doesn't need it function properly and you do not use SDKs that require it you can delete the android-support-v4.jar
  • Checking if loaded Applovin ad is video to prevent video display when interstitial is expected
  • Removing Facebook Audience Network library from SDK. Do not forget to remove Facebook entries from AndroidManifest.xml
  • Removing Mobilecore library from SDK. Do not forget to remove Mobilecore entries from AndroidManifest.xml
  • Fixing an issue where SDK will not work on Android 4.0.4 in Unity apps in some cases

1.11 (Apr 21, 2015, Internal)

  • Adding video support
  • Adding video callbacks
  • Adding Unity Ads support
  • Removing the need of applovin.sdk.key in AndroidManifest.xml
  • Changing debug file from "110" to "1100"
  • com.appodeal.ads.AdActivity renamed to com.appodeal.ads.InterstitialActivity
  • com.appodeal.ads.VideoActivity added to AndroidManifest.xml

1.10.10

  • Adding Appodeal.showBannerWithPriceFloor() method that displays banner only if it's ecpm is bigger or equal to price floor set in our dashboard
  • Fixing issue with SDK pausing when switching between activities
  • Bug fixes

1.10.9

  • Adding Facebook Audience Network support
  • Adding Mobilecore support
  • Adding Admob Adapter
  • Preventing Appodeal methods from being called in Unity Editor

1.10.8

  • MoPub click url fix

1.10.7

  • Removing Heyzap library from SDK. Do not forget to remove Heyzap entries from AndroidManifest.xml
  • Updating AmazonAds library to 5.5.102
  • Updating Chartboost library to 5.2.0
  • Updating MoPub library to 3.6.1
  • Bug fixes

1.10.6

  • Setting timeout for each network and precache load
  • Pausing SDK when app goes to background on Android 4.0+
  • Resuming SDK when app returns to foreground on Android 4.0+
  • Bug fixes

1.10.5

  • showBanner() now returns a boolean value indicating whether show call was passed to appropriate SDK
  • Retrying ad caching if network connection was lost
  • Bug fixes

1.10.4

  • Displaying toast message if android-support-v4.jar library not present
  • Fixing Heyzap integration issue
  • Adding Appodeal.isLoadedPrecache() method that returns whether precache or normal ad was loaded
  • Adding Appodeal.disableNetwork(String) method to disable network. Available parameters: "admob", "amazon_ads", "applovin", "chartboost", "heyzap", "mopub"
  • Fixes and performance optimizations

1.10.3

  • Adding MoPub adapter to SDK

1.10.2

  • Adding boolean parameter to onAdLoaded callback. If true precache was loaded, if false normal ad was loaded. By default onAdLoaded callback triggers only when normal ad was loaded.
  • Adding Appodeal.setOnLoadedTriggerBoth() method.
  • setOnLoadedTriggerBoth(false) - onAdLoaded will trigger only when normal ad was loaded.
  • setOnLoadedTriggerBoth(true) - onAdLoaded will trigger twice, both when precache and normal ad were loaded

1.10.1

  • Fixing onAdClosed not triggering bug
  • Preventing onAdFailedToLoad from triggering if precache was loaded
  • Small fixes

1.10

  • Adding Admob precache to make ads load faster
  • Updating Applovin library to 5.4.3
  • Updating Chartboost library to 5.1.2
  • Updating MoPub library to 3.5.0
  • Bug fixes and some architectural changes
  • Increasing support on devices without GPS. Add
<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.network" android:required="false" />
  • to your AndroidManifest.xml if you don't require this hardware features to make app compatible with devices without GPS

1.9.2

  • Adding cacheBanner method to manually cache banner. You should disable automatic caching before SDK initialization using setAutoCache(false)
  • Adding setAutoCache method to enable or disable automatic caching. Should be used before SDK initialization.

1.9.1

  • Adding Unity callbacks
  • Updating MoPub library to 3.4.0
  • Bug fixes

1.9

  • Adding Smaato support
  • Adding Heyzap support