SDK Integration | Appodeal Intelligent Ad Mediation

SDK Integration

  1. Manual

App key

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" /> <!--optional -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--optional -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--optional-->

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"/>      

Advanced Features

Google Play device compatibility

If you are not using location services in you app and not using any other SDK that requires 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();

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 *; }
-dontwarn com.mopub.**
-keep class * extends com.mopub.mobileads.CustomEventBanner {}
-keepclassmembers class com.mopub.mobileads.CustomEventBannerAdapter {!private !public !protected *;}
-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.**
-keepclassmembers class ** { @com.mopub.common.util.ReflectionTarget *; } 

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

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

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

# Unity Ads
-keepattributes SourceFile,LineNumberTable
-keep class com.unity3d.** { *; }
-dontwarn 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.adcolony.** { *;}
-keep class com.immersion.** { *;}
-dontnote com.immersion.**
-dontwarn android.webkit.**
-dontwarn com.jirbo.adcolony.**
-dontwarn com.adcolony.**

# Vungle
-keepattributes *Annotation*, Signature
-keep class com.vungle.** { *;}
-dontwarn com.vungle.**
-keep class com.moat.analytics.mobile.vng.** { *;}
-keep class dagger.**
-keep class de.greenrobot.event.**
-keep class javax.inject.**
-keep class rx.**

# MyTarget
-keep class com.my.target.** { *; }
-dontwarn com.my.target.**

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

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

# IronSource
-keepclassmembers class com.ironsource.sdk.controller.IronSourceWebView$JSInterface { public *; }
-keepclassmembers class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; }
-keep class com.ironsource.** { *; }
-dontwarn com.ironsource.**

# AdColonyV3
-keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; }
-keep class com.adcolony.** { *; }
-dontwarn com.adcolony.**
-dontwarn android.app.Activity

#Appnext
-keep class com.appnext.** { *; }
-dontwarn com.appnext.**

# Inmobi
-keep class com.inmobi.** { *; }
-dontwarn com.inmobi.**
-dontwarn com.squareup.picasso.**
-keep class com.squareup.picasso.** {*;}
-dontwarn com.squareup.picasso.**
-dontwarn com.squareup.okhttp.**
-keep class com.moat.** {*;}
-dontwarn com.moat.**

# MMdeia
-keepclassmembers class com.millennialmedia** {public *;}
-keep class com.millennialmedia**
-dontwarn com.millennialmedia.**

# Ogury
-dontwarn io.presage.**
-dontnote io.presage.**
-dontwarn shared_presage.**
-dontwarn org.codehaus.**
-keepattributes Signature
-keep class shared_presage.** { *; }
-keep class io.presage.** { *; }
-keepclassmembers class io.presage.** { *; }
-keepattributes *Annotation*
-keepattributes JavascriptInterface
-keepclassmembers class * {
  @android.webkit.JavascriptInterface <methods>;
}
-dontnote okhttp3.**
-dontnote okio.**
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn javax.annotation.Nullable
-dontwarn javax.annotation.ParametersAreNonnullByDefault

-dontnote sun.misc.Unsafe
-dontnote android.net.http.*

-dontnote org.apache.commons.codec.**
-dontnote org.apache.http.**

-dontwarn org.apache.commons.collections.BeanMap
-dontwarn java.beans.**
-dontnote com.google.gson.**
-keepclassmembers class * implements java.io.Serializable {
  static final long serialVersionUID;
  private static final java.io.ObjectStreamField[] serialPersistentFields;
  private void writeObject(java.io.ObjectOutputStream);
  private void readObject(java.io.ObjectInputStream);
  java.lang.Object writeReplace();
  java.lang.Object readResolve();
}

# 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.ContextCompat { *; }
-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