Overview

The following document detaily shows that how to integrate Admost Android SDK and desired networks via gradle build setup. There are too many ad networks you may desire to add your current app. Integrating those ad networks to your application can achievable via gradle. Most of the ad networks are can be integrated by 1 line of code addition to your project's /app/src/build.gradle file and /build.gradle file. However some of them are requires more aditions to /app/src/main/AndroidManifest.xml and /app/src/proguard-rules.pro file.

Requirements

Android Version

Android 4.0 (Ice Cream Sandwich - API Version 14) or later.

IDE

You have to use Latest Android Studio build. You can download the latest Android Studio from here.

/app/src/main/AndroidManifest.xml, /app/src/build.gradle, /app/src/proguard-rules.pro and /build.gradle files may be required in the next parts. You can see where to find those files in project view structure.

Android Studio ~ Project view

  • .gradle
  • .idea
  • app
    • build
    • src
      • main
        • java
        • res
        • AndroidManifest.xml
      • build.gradleapp's gradle file
      • proguard-rules.pro
    • build
    • .gradle
    • build.gradleproject's gradle file
Folder/File Purpose
/app/src/main/AndroidManifest.xml This is your app's AndroidManifest.xml. We will just update inside of application tags.
/app/src/build.gradle This is your app's build.gradle file. We will just update inside of dependencies bracelets.
/app/src/proguard-rules.pro The proguard-rules.pro file is where you can add custom ProGuard rules.
/build.gradle This is project's build.gradle file. We will just update inside of repositories bracelets.

App ID & Zone ID

Application Id provided in Admost Mediation Dashboard. Zone Id(s) provided in Admost Mediation Dashboard.

Permissions

Some of the Ad networks requires additional permissions. You have to consider this while adding those ad networks in to your application. We handled those permissions in our SDK, you do not have to do anything but we are saying this to keep in mind.

Those permissions are listed below;


<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
                

Setup

Ad-Networks

Please click + icon to add to list and - to remove from list. After finish selecting ad networks, continue with next step

Required Files

With your selections you are going to work with following files;

  • /build.gradle
  • /app/src/build.gradle

If you are using proguard you have to edit /app/src/proguard-rules.pro too.

Edit Files

Starting with Android 9.0 (API level 28), cleartext support is disabled by default. For applications targetSdkVersion higher than 27 must use the following manifest config for AdMost cleartext support.


<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:networkSecurityConfig="@xml/admost_network_security_config"
        ...>
        ...
    </application>
</manifest>
				

If you are using Admob SDK (com.google.android.gms:play-services-ads) with version 17.0.0 and higher, you must add your AdMob App ID to your Android Manifest file.


        <manifest>
          <application>
              <!-- Sample AdMob App ID: ca-app-pub-0000000000000000~0000000000 -->
              <meta-data
                  android:name="com.google.android.gms.ads.APPLICATION_ID"
                  android:value="[ADMOB_APP_ID]"/>
          </application>
        </manifest>
				

Proguard

Copy & paste following code snippet in to your /app/src/proguard-rules.pro file


# ADMOST
-keepattributes Exceptions, InnerClasses
-dontwarn admost.sdk.**
-keep class admost.sdk.** {*;}
-keep class android.support.v4.app.DialogFragment { *; }
-keep class android.support.v4.util.LruCache { *; }


# VOLLEY
-keep class com.android.volley.** { *; }
-keep interface com.android.volley.** { *; }
-keep class org.apache.commons.logging.**

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# ADCOLONY
-dontwarn com.adcolony.**
-keep class com.adcolony.** { *; }
-keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; }
-keepclassmembers class com.adcolony.sdk.ADCNative** { *; }

# ADMOB / ADX / GOOGLE
-keep class com.android.vending.billing.**
-keep public class com.google.android.gms.ads.** { public *; }
-keep public class com.google.ads.** { public *; }
-keep class com.google.android.gms.** { *; }
-dontwarn com.google.android.gms.**
-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 public @com.google.android.gms.common.util.DynamiteApi class * { *; }
-keep class com.google.android.apps.common.proguard.UsedBy*
-keep @com.google.android.apps.common.proguard.UsedBy* class *
-keepclassmembers class * { @com.google.android.apps.common.proguard.UsedBy* *; }
-dontwarn android.security.NetworkSecurityPolicy
-dontwarn android.app.Notification

#ADTIMING
-dontwarn com.aiming.mdt.**.*
-dontwarn com.adt.**.*
-keepattributes *Annotation*
-keep class com.admuing.** { *; }
-keep class com.aiming.mdt.** { *; }
-keep class com.adt.** { *; }

# AMAZON
-dontwarn com.amazon.**
-keep class com.amazon.** { *; }
-dontwarn org.apache.http.**
-keepattributes *Annotation*

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

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

# AVOCARROT - GLISPA
-keep class com.avocarrot.** { *; }
-dontwarn com.avocarrot.**
-keep class com.google.android.exoplayer2.SimpleExoPlayer
-dontwarn com.google.android.exoplayer2.SimpleExoPlayer

# CHARTBOOST
-dontwarn org.apache.http.**
-dontwarn com.chartboost.sdk.impl.**
-keep class com.chartboost.sdk.** { *; }
-keepattributes *Annotation*

# DISPLAYIO
-keep class io.display.sdk.** { *; }
-dontwarn io.display.sdk.**

# FACEBOOK
-dontwarn com.facebook.ads.**
-dontnote com.facebook.ads.**
-keep class com.facebook.** { *; }
-keepattributes Signature
-keep class com.google.android.exoplayer2.** {*;}
-dontwarn com.google.android.exoplayer2.**

# FLURRY
-keep class com.flurry.** { *; }
-dontwarn com.flurry.**
-keepattributes *Annotation*,EnclosingMethod,Signature
-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); }
-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 @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *; }
-keepnames class * implements android.os.Parcelable { public static final ** CREATOR; }

# FYBER
-keep class com.fyber.** { *; }
-dontwarn com.fyber.**
-keep class com.fyber.mediation.MediationConfigProvider { public static *; }
-keep class com.fyber.mediation.MediationAdapterStarter { public static *; }
-keepclassmembers class com.fyber.ads.videos.mediation.** { void setValue(java.lang.String); }

# INMOBI
-keepattributes SourceFile,LineNumberTable
-keep class com.inmobi.** {*;}
-dontwarn com.inmobi.**
-keep public class com.google.android.gms.**
-dontwarn com.google.android.gms.**
-dontwarn com.squareup.picasso.**
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient{public *;}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info{public *;}
-keep class com.squareup.picasso.** {*;}
-dontwarn com.squareup.picasso.**
-dontwarn com.squareup.okhttp.**
-keep class com.moat.** {*;}
-dontwarn com.moat.**
-keep class com.integralads.avid.library.* {*;}

# INNERACTIVE
-dontwarn com.inneractive.api.ads.**
-keep class com.inneractive.api.ads.** {*;}
-keepclassmembers class com.inneractive.api.ads.** {*;}
-keepclassmembers class com.inneractive.api.ads.sdk.nativead.** {*;}
-keepattributes Signature
-keepattributes *Annotation*
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
-keep class com.google.gson.examples.android.model.** { *; }
-keep class com.google.gson.Gson { *; }
-keep class com.google.gson.GsonBuilder { *; }
-keep class com.google.gson.FieldNamingStrategy { *; }

# IRONSOURCE
-dontwarn com.ironsource.**
-keep class com.ironsource.** { *; }
-keepclassmembers class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; }
-keep public class com.google.android.gms.ads.** { public *; }
-keep class com.ironsource.adapters.** { *; }
-dontwarn com.moat.**
-keep class com.moat.** { public protected private *; }

# LOOPME
-dontwarn com.loopme.**
-keep class com.loopme.** { *; }

# MEDIABRIX
-keep class com.mediabrix.** { *; }
-keep class com.moat.** { *; }
-keep class mdos.** { *; }
-dontwarn com.mediabrix.**
-dontwarn com.moat.**
-dontwarn mdos.**

# MILLENNIAL & NEXAGE
-keep class com.millennialmedia.** { *; }
-dontwarn com.millennialmedia.**

# MINTEGRAL
-keepattributes Signature -keepattributes *Annotation* -keep class com.mintegral.** {*; }
-keep interface com.mintegral.** {*; }
-keep class android.support.v4.** { *; }
-dontwarn com.mintegral.** -keep class **.R$* { public static final int mintegral*; }
-keep class com.alphab.** {*; }
-keep interface com.alphab.** {*; }

# MOBFOX
-dontwarn com.mobfox.**
-keep class com.mobfox.** { *; }
-keep class com.mobfox.adapter.** { *; }
-keep class com.mobfox.sdk.** { *; }

# MOPUB
-keepclassmembers class com.mopub.** { public *; }
-dontnote com.mopub.**
-dontwarn com.mopub.**
-keep public class com.mopub.**
-keep class com.mopub.mobileads.** { *; }
-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.nativeads.CustomEventRewardedAd {}
-keepclassmembers class ** { @com.mopub.common.util.ReflectionTarget *; }
-keepclassmembers class com.integralads.avid.library.mopub.** { public *; }
-keep public class com.integralads.avid.library.mopub.**
-keepclassmembers class com.moat.analytics.mobile.mpub.** { public *; }
-keep public class com.moat.analytics.mobile.mpub.**
-keep class com.google.android.gms.common.GooglePlayServicesUtil { *; }
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient { *; }
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info { *; }
-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 @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *; }
-keepnames class * implements android.os.Parcelable { public static final ** CREATOR; }
-keep public class android.webkit.JavascriptInterface {}

# NATIVEX
-dontwarn com.nativex.**
-keep class com.nativex.** { *; }

# OUTBID
-dontwarn outbid.com.outbidsdk.**
-keep class outbid.com.outbidsdk.** { *; }

# PUBNATIVE
-keepattributes Signature
-keep class net.pubnative.** { *; }
-dontwarn net.pubnative.**
-keep class com.squareup.picasso.** { *; }
-dontwarn com.squareup.picasso.**

# REVMOB
-dontwarn rm.com.android.sdk.**
-keep class rm.com.android.sdk.** { public *; }

# SMAATO
-dontwarn com.smaato.**
-keep class com.smaato.** { public *; }
-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
    public static *** i(...);
}
-keep public class com.smaato.soma.internal.connector.OrmmaBridge { public *; }
-keepattributes *Annotation*
-dontwarn com.smaato.soma.SomaUnityPlugin*
-dontwarn com.millennialmedia**
-dontwarn com.facebook.**

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

# TAPJOY
-keep class com.tapjoy.** {*;}
-keep class com.moat.** {*;}
-keepattributes JavascriptInterface
-keepattributes *Annotation*
-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 @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {@com.google.android.gms.common.annotation.KeepName *;}
-keepnames class * implements android.os.Parcelable {public static final ** CREATOR;}
-keep class com.google.android.gms.ads.identifier.** {*;}
-dontwarn com.tapjoy.**

# TAPPX
-keepattributes *Annotation*
-keepclassmembers class com.google.**.R$* { public static <fields>; }
-keep public class com.google.ads.** {*;}
-keep public class com.google.android.gms.** {*;}
-keep public class com.tappx.** { *; }
-dontwarn com.tappx.**

# UNITY
-dontwarn com.unity3d.**
-keep class com.unity3d.ads.** { *; }

# Vungle
-dontwarn com.vungle.**
-dontnote com.vungle.**
-keep class com.vungle.** { *; }
-dontwarn com.vungle.warren.error.VungleError$ErrorCode
-keep class com.moat.** { *; }
-dontwarn com.moat.**
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**
-dontwarn retrofit2.Platform$Java8
-keepattributes Signature
-keepattributes *Annotation*
-dontwarn sun.misc.**
-keep class com.google.gson.examples.android.model.** { *; }
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
-keep class com.google.android.gms.internal.** { *; }
-dontwarn com.google.android.gms.ads.identifier.**


# YOUAPPI
-keep class com.google.gson.**{ *;}
-keep class com.google.android.gms.**{*;}
-keep class com.youappi.ai.sdk.**{*;}
-keep interface com.youappi.ai.sdk.**{*;}
-keep enum com.youappi.ai.sdk.**{*;}
-keepclassmembers class * {
  @android.webkit.JavascriptInterface <methods>;
}


                

Usage

Admost Mediation library is a lean yet complete library that allows you to request and show ads. Basic integration steps are:

Init Ads

Initialize the Admost Mediation SDK in your application’s launcher Activity. This starts pre-caching and prepares the SDK to display ads.

AdMostConfiguration.Builder configuration = new AdMostConfiguration.Builder(this, < ADMOST_APP_ID >);
//GDPR COMPLIANCE
configuration.setSubjectToGDPR(true);
configuration.setUserConsent(false);

// OPTIONAL
configuration.age(24);
configuration.gender(AdMost.GENDER_MALE);
configuration.interests(“Games, Sports, News”);

AdMost.getInstance().init(configuration.build());

GDPR

Once you have collected the user’s consent, you can pass it onto the SDK using the init configuration parameters shown above.

setUserConsent has a boolean parameter. If you have the user’s consent, set it true. If you do not have the user's consent, set it false.

setSubjectToGDPR has a boolean parameter. If you know the user is subject to GDPR, set it true. If you know the user is not subject to GDPR, set it false.

If you don’t pass the user’s consent or subjectToGDPR to the SDK, the rules described in GDPR have been applied.

/*
ZONE_ID : Your ZONE_ID defined on admost mediation panels.
TYPE    : The height of your banner, it may have 3 values;
            1. AdMostManager.getInstance().AD_BANNER (50dp)
            2. AdMostManager.getInstance().AD_LEADERBOARD (90dp)
            3. AdMostManager.getInstance().AD_MEDIUM_RECTANGLE (250dp)
BINDER  : You can use your own layout design for banners, if you leave BINDER value null, default design will be applied.
*/

BANNER = new AdMostView(ACTIVITY, < ZONE_ID >, < TYPE >, new AdMostViewListener() {
    @Override
    public void onReady(String network, int ecpm, View adView){
        // Ad Loaded
    }

    @Override
    public void onFail(int errorCode) {
        // Failed for some reason
    }

}, < BINDER >);
// Add the following line to load an ad.
BANNER.load();

                

You have to call destroy(), pause() and resume() methods in the activity.

@Override
public void onResume() {
    super.onResume();
    BANNER.resume();
}

@Override
public void onPause() {
    super.onPause();
    BANNER.pause();
}


@Override
public void onDestroy() {
    super.onDestroy();
    BANNER.destroy();
}

Custom Native Design

If you want to create your own design for native ads, you have to create a binder object and pass it to AdMostView constructor as BINDER value. Example integration for binder creation is as follows;

int layout = layout.design_for_your_banner;
AdMostViewBinder BINDER = new AdMostViewBinder.Builder(layout)
	.titleId(R.id.ad_headline)
	.textId(R.id.ad_body)
	.callToActionId(R.id.ad_call_to_action)
	.iconImageId(R.id.ad_app_icon)
	.mainImageId(R.id.ad_image)
	.backImageId(R.id.ad_back)
	.attributionId(R.id.ad_attribution)
	.privacyIconId(R.id.ad_privacy) // it is only required for MOPUB and INMOBI native ads
	.isRoundedMode(false)
	.isFixed(false)
	.isCloseable(false)
	.build();

For privacy icon placement, you have to add the following ImageView to your custom layout with visibility GONE. It is suggested to add it to the right top corner of your layout with minimum width of 25dp;

<ImageView
        android:id="@+id/ad_privacy"
        android:layout_width="26dp"
        android:layout_height="26dp"
        android:paddingTop="2dp"
        android:paddingBottom="10dp"
        android:paddingLeft="10dp"
        android:paddingRight="2dp"
        android:src="@drawable/ad_privacy"
        android:layout_alignParentRight="true"
        android:visibility="gone" />

Interstitial

AdMostInterstitial INTERSTITIAL = new AdMostInterstitial(ACTIVITY, < ZONE_ID >, new AdMostAdListener() {
    @Override
    public void onDismiss(String message) {
        // Ad Dismiss
    }
    @Override
    public void onFail(int errorCode) {
        // Ad Failed
    }
    @Override
     public void onReady(String network, int ecpm) {
       // Ad Loaded
    }
    @Override
    public void onShown(String network) {
        //Ad Shown
    }
    @Override
    public void onClicked(String s) {
        //Ad Clicked
    }
    @Override
    public void onComplete(String s) {
        // If you are using interstitial, this callback will not be triggered.
    }

});

You can use the following statement to load interstitial.

INTERSTITIAL.refreshAd(AUTO_SHOW);

AUTO_SHOW (boolean) : Set true, if you want to show the fullscreen ad as soon as it is ready. Otherwise, you need to call show() method manually.

INTERSTITIAL.show();

You can use tag functionality for interstitial zones. Tags will let you monitor the performance of the ads across different dimensions for the same zone. You can switch ads on and off for any specified tag whenever you want. Example usage is as follows;


// TAG can be any string value meaningful for you. You don't need to define it on AdMost dashboard before using.
// Just start using, it will be automatically detected
INTERSTITIAL.show(TAG);
				

You have to call destroy method when you are done with the interstitial.

INTERSTITIAL.destroy();

Rewarded

AdMostInterstitial VIDEO = new AdMostInterstitial(ACTIVITY, < ZONE_ID >, new AdMostAdListener() {
        @Override
         public void onReady(String network, int ecpm) {
            // Ad Loaded
        }
        @Override
        public void onFail(int errorCode) {
            // Ad Failed
        }
        @Override
        public void onDismiss(String message) {
            // Ad Dismiss
        }
        @Override
        public void onComplete(String network) {
            // Video Ad Completed
        }
        @Override
        public void onShown(String network) {
            //Ad Shown
        }
        @Override
        public void onClicked(String s) {
            //Ad Clicked
        }
    });
                

You can use the following statement to load rewarded video.

VIDEO.refreshAd(AUTO_SHOW);

AUTO_SHOW (boolean) : Set true, if you want to show the rewarded video ad as soon as it is ready. Otherwise, you need to call show() method manually.

VIDEO.show();

You can use tag functionality for rewarded video zones. Tags will let you monitor the performance of the ads across different dimensions for the same zone. You can switch ads on and off for any specified tag whenever you want. Example usage is as follows;


// TAG can be any string value meaningful for you. You don't need to define it on AdMost dashboard before using.
// Just start using, it will be automatically detected
VIDEO.show(TAG);
				

You have to call destroy method when you are done with the rewarded video.

VIDEO.destroy();

Offerwalls

OFFERWALL = new AdMostInterstitial(ACTIVITY, < ZONE_ID >, new AdMostAdListener() {
        @Override
        public void onReady(String network) {
            // Ad Loaded
        }
        @Override
        public void onFail(int errorCode) {
            // Ad Failed
        }
        @Override
        public void onDismiss(String message) {
            // Ad Dismiss
        }
        @Override
        public void onComplete(String network) {
            // Video Ad Completed
        }
        @Override
        public void onShown(String network) {
            //Ad Shown
        }
        @Override
        public void onClicked(String s) {
            //Ad Clicked
        }
});

You can use the following statement to load offerwall ad.

OFFERWALL.refreshAd(AUTO_SHOW);

AUTO_SHOW (boolean) : Set true, if you want to show the offerwall ad as soon as it is ready. Otherwise, you need to call show() method manually.

OFFERWALL.show();

You can use tag functionality for offerwall zones. Tags will let you monitor the performance of the ads across different dimensions for the same zone. You can switch ads on and off for any specified tag whenever you want. Example usage is as follows;


// TAG can be any string value meaningful for you. You don't need to define it on AdMost dashboard before using.
// Just start using, it will be automatically detected
OFFERWALL.show(TAG);
				

You have to call destroy method when you are done with the offerwall ad.

OFFERWALL.destroy();

Spending Virtual Currencies

AdMost.getInstance().spendVirtualCurrency(new AdMostVirtualCurrencyListener() {
    @Override
    public void onSuccess(String adNetwork, String currencyName, double value) {
        // User rewarded (This method can be triggered multiple times depends on Offerwall Zone)
    }

    @Override
    public void onError(String adNetwork, String error) {
        // Error
    }
});
                
    

GDPR

We specified your responsibilities for obtaining consent from end-users of your apps in our updated Privacy Policy. By updating GDPR compatible SDK you agree that you’re responsible for inform the end-users and take their consent. Please note that the consent collection applies only to users located in the European Economic Area, the United Kingdom, and Switzerland. As data controller you should take consent of end-users by preparing consent window, you can find samples below. When you take end-user consent, the response will be passed to Admost SDK. You can find the implementation here

consent

Network GDPR Complience

Ad Network GDPR Compatibility
Adcolony
Admob
Adtrial
Amazon
Applovin
Appnext
ChartBoost
Display IO
Facebook
Flurry
Fyber
Glispa
InMobi
InnerActive
IronSource
LoopMe
Mobfox
Mopub
Nexage
Ogury
Smaato
Startapp
Tapjoy
Unity
Vungle
YouAppi

GDPR Rules

Admost provides you two methods for GDPR compatibility: setSubjectToGDPR() and setUserConsent().

If you can determine whether the user is located in European Union or not, you can use optional setSubjectToGDPR() method to set user's subject to GDPR flag. If you do not use this method, SubjectToGDPR status remains as unknown. In this case, Admost SDK will try to determine whether the user is in EU or not which is totally under the responsibility of you. If the user is in EU, networks are not allowed to show personalized ads. If the user is not located in EU, the ad networks are allowed to show personalized ads.

On condition that you want to obtain neither user's SubjectToGDPR status nor any negative legal consequences, SubjectToGDPR must set setSubjectToGDPR(true) for each user. In this case, Admost considers all users as subject to GDPR and if the consent is not allowed, Admost blocks ad networks to collect data from users. Which may cause a decrease in overall revenue performance apart from Admost.

If you obtain user's consent and set setUserConsent(true), personalized ads would be shown to the users. Otherwise, you set setUserConsent(false) which would block the personalized ads, unless the user is not subject to GDPR.

If you do not usesetUserConsent(), user consent status remains unknown. In this case, if you provide setSubjectToGDPR(true), the ad networks do not have the ability to serve personalized ads. If you provide setSubjectToGDPR(false), the ad networks have the ability to serve personalized ads.

If you do not provide both setUserConsent() and setSubjectToGDPR(), Admost decides whether the user is located in EU or not which is totally under the responsibility of you.

If you want to obtain neither the user's consent nor any negative legal consequences, you must set setUserConsent(false) for every user. In this case, Admost considers the user has no consent, the ad networks are not allowed to serve personalized ads, except only you do not provide setSubjectToGDPR(false).

Extras

DFP/Admob Mediation Integration

The Admost DFP Adapter lets publishers integrate Admost Mediation Router ads into applications with DFP or Admob Mediation set as main ad mediation layer.

In order to show Admost ads in DFP/Admob Mediation you should first follow Setup and init phases of Admost documentation. Then, you should follow dedicated steps of DFP or Admob Mediation to set Admost as an ad mediation source.

After adding Admost as an ad mediation source you should define class names for banner and interstitial ad custom events. Enter admost.sdk.dfp.AmrDfpCustomEventBanner and admost.sdk.dfp.AmrDfpCustomEventInt class names for banner and interstitial class names respectively. You must pass your Admost zone Id to custom event via Parameter field.

shadowed image
shadowed image

Now you can show Admost banner and interstitial ads via DFP or Admob Mediation.

You can check DFP banner and interstitial example in demo project; DFPIntegration.

Test Suite

You can use Test Suite to test your defined ad networks, you have to be a tester to use this function. Use the following code to open test suite activity;


AdMost.getInstance().startTestSuite();
                

Screen Shot

android-test-suite screenshot

In App Purchase Tracking

The following call is used to track purchases with receipt validation:


AdMostIAPCallback iabCallback = new AdMostIAPCallback() {
	//Successful Purchase
	@Override
	public void onValidationSuccess() {}

	//Invalid purchase data..!
	@Override
	public void onValidationFail(AdMostServerException e) {}

	//Exception occurred, will be tried again automatically..!
	@Override
	public void onException() {}
};

AdMost.getInstance().trackPurchase(purchaseData, dataSignature, jsonSkuDetail, iabCallback, isDebug);
                

Explanation and code samples of parameters:

  • purchaseData (String) – a String in JSON format that contains details about the purchase order. It is returned by the operating system after you make the purchase call.
  • signature (String) – String containing the signature of the purchase data that the developer signed with their private key. It is returned by the operating system after you make the purchase call.
  • jsonSkuDetail (String) – a String in JSON Object format that contains product item details
  • iabCallback (AdMostIAPCallback) - You can add this callback to be informed about the result of your purchase request. null value is
  • isDebug (boolean) - Set true for test purchases.

//Handles an activity result that's part of the purchase flow in in-app billing
void onActivityResult(int requestCode, int resultCode, Intent data) {

    String dataSignature = data.getStringExtra(RESPONSE_INAPP_SIGNATURE);
    String purchaseData = data.getStringExtra(RESPONSE_INAPP_PURCHASE_DATA);

    if(resultCode == RESULT_OK){
        JSONObject purchasedProduct = new JSONObject(purchaseData);
        String purchasedItemId = purchasedProduct.getString("productId");
        for (String productData : responseList){
            JSONObject product = new JSONObject(productData);
        	String productId = product.getString("productId");
            if(productId.equals(purchasedItemId){
				AdMost.getInstance().trackPurchase(purchaseData, dataSignature, productData);
        	}
        }
    }
}
                

This is the way of getting responseList from Google


Bundle querySkus = new Bundle();
querySkus.putStringArrayList(GET_SKU_DETAILS_ITEM_LIST, skuList);
Bundle skuDetails = mService.getSkuDetails(3, mContext.getPackageName(), itemType, querySkus);

ArrayList responseList = skuDetails.getStringArrayList(RESPONSE_GET_SKU_DETAILS_LIST);
                        

For further information;

https://developer.android.com/google/play/billing/billing_reference.html#getSkuDetails

Amazon Store In App Purchase Tracking

The following call is used to track amazon purchases with receipt validation:


AdMostIAPCallback iabCallback = new AdMostIAPCallback() {
	//Successful Purchase
	@Override
	public void onValidationSuccess() {}

	//Invalid purchase data..!
	@Override
	public void onValidationFail(AdMostServerException e) {}

	//Exception occurred, will be tried again automatically..!
	@Override
	public void onException() {}
};

AdMost.getInstance().trackPurchaseAmazon(receiptJSON, purchaseResponseJSON, productJSON, iabCallback, isDebug);
                

Explanation and code samples of parameters:

  • receiptJSON (JSONObject) – a JSON object. Retrieve that value from com.amazon.device.iap.model.PurchaseResponse OR com.amazon.device.iap.model.PurchaseUpdatesResponse like this:
    • purchaseResponse.getReceipt().toJSON()
    • purchaseUpdatesResponse.getReceipts().get(indexOfRelatedReceipt).toJSON()
  • purchaseResponseJSON (JSONObject) – a JSON object. Retrieve that value from com.amazon.device.iap.model.PurchaseResponse OR com.amazon.device.iap.model.PurchaseUpdatesResponse object like this:
    • purchaseResponse.toJSON()
    • purchaseUpdatesResponse.toJSON()
  • productJSON (JSONObject) – a JSON object. Retrieve that value from com.amazon.device.iap.model.Product object like this:
    • product.toJSON()
  • iabCallback (AdMostIAPCallback) - You can add this callback to be informed about the result of your purchase request. null value is
  • isDebug (boolean) - Set true for test purchases.

Preloading Banners

You can use cacheZones method of AdMostConfiguration to cache your banners during initialization of AdMost sdk. In order to cache banners use following code;



AdMostConfiguration.Builder configuration = new AdMostConfiguration.Builder(this, < ADMOST_APP_ID >);

AdMostBannerZoneCache cacheZone = new AdMostBannerZoneCache();
cacheZone.ZoneId = "";
cacheZone.Binder = null;
configuration.cacheZones(new AdMostBannerZoneCache[] {cacheZone});

AdMost.getInstance().init(configuration.build());
                

Setting Application User Id

You can use the following method to set application specific user id in Admost Analytics for enhanced tracking of your users. You have to call this method after initialization.


AdMost.getInstance().setUserId("APPLICATION_USER_ID");

                

Setting Adjust User Id

You can use the following method to set adjust user id in Admost Analytics for enhanced tracking of your users.


AdMost.getInstance().setAdjustUserId("ADJUST_USER_ID");

                

Campaign Tracking

For tracking an ad campaign's performance, it is recommended to add Admost install referrer receiver into application tag of your AndroidManifest.xml for better tracking. If you are using other receiver libraries in your application like Google Analytics campaign tracking receiver, you can use the admost.install.referrer.[1-5] meta-data like below.


<manifest>
	<application>
		<receiver
			android:name="admost.sdk.base.InstallReferrerReceiver"
			android:exported="true">
			<intent-filter>
				<action android:name="com.android.vending.INSTALL_REFERRER" />
			</intent-filter>
			<meta-data android:name="admost.install.referrer.1" android:value="com.google.android.gms.analytics.CampaignTrackingReceiver" />
		</receiver>
	</application>
</manifest>

                

The Install Referrer API is exposed by the Google Play Store app on a device. Devices with a Google Play app version of 8.3.73 or later automatically have access to the API. Admost is using this functionality if available for better tracking. It is required to add the following dependency to your app gradle to enable this functionality.


dependencies {
    implementation 'com.android.installreferrer:installreferrer:1.0'
}
                

Release Notes

In this page, you can find a record of all the changes made to this project such as bug fixes, new features, etc.

  1. Version 1.8.3
  2. Version 1.8.2
  3. Version 1.8.1
  4. Version 1.8.0
  5. Version 1.7.8
  6. Version 1.7.7
  7. Version 1.7.6
  8. Version 1.7.5
  9. Version 1.7.4
  10. Version 1.7.3
  11. Version 1.7.2
  12. Version 1.7.1
  13. Version 1.7.0
  14. Version 1.6.8
  15. Version 1.6.7
  16. Version 1.6.6
  17. Version 1.6.4
  18. Version 1.6.3
  19. Version 1.6.1
  20. Version 1.5.9
  21. Version 1.5.8
  22. Version 1.5.7
  23. Version 1.5.6
  24. Version 1.5.5
  25. Version 1.5.3
  26. Version 1.5.2
  27. Version 1.5.1
  28. Version 1.5.0
  29. Version 1.4.0
  30. Version 1.3.9
  31. Version 1.3.8
  32. Version 1.3.7
  33. Version 1.3.6
  34. Version 1.3.5
  35. Version 1.3.4
  36. Version 1.3.3
  37. Version 1.2.9

Upgrading from 1.3.2 and Prior

From v1.3.3 our integration is completely revised. We deploy all of our SDK's to Maven repository.

If you are using previous integration type (via .jar/@aar) you are able to achieve same goal via Maven integration. For instructions to using new methodology is listed above.

Version 1.8.3 Jan 08, 2019


Please check if the correct adnetwork adapter is placed in the gradle file. Otherwise unforeseen errors may occur.


  • Amazon store in app tracking
  • Amazon advertising id used as an alternative for Google Advertising Id in Amazon store
  • AdMob unified native ads support added. (Minimum version of Play Ads Service is 15.0.0 for this feature)
  • Debugging option added for in-app tracking
  • AdTiming 4.6.3
  • Minor bugs

Version 1.8.2 Dec 18, 2018


  • Facebook native banner rendering bug
  • ANR reports related to Mopub v.5.4.1 update
  • Initialization of networks on background thread blocking main thread

Version 1.8.1 Dec 11, 2018


  • Facebook native ad custom renderer for video ads
  • Adcolony 3.3.7, Chartboost 7.3.1, Flurry 11.4.0, Mopub 5.4.1, Ogury 3.0.32, Unity 3.0.0, Vungle 6.3.24
  • Inmobi custom native ad CTA button type

Version 1.8.0 Dec 04, 2018


  • Passive Tag feature for interstitial and rewarded video zones
  • Facebook native video ad auto infinite play feature
  • Adcolony 3.3.6, Adtiming 4.5.7, Applovin 8.1.4, Appnext 2.4.4.472, Chartboost 7.3.0, Facebook 5.1.0, Ironsource 6.7.12
  • Minor bugs

Version 1.7.8 Nov 10, 2018


  • Validation callbacks added for In App Purchase Tracking. Example usage is as follows;

    AdMost.getInstance().trackPurchase(purchaseData, signature, skuDetails, new AdMostIAPCallback() {
    	//Successful Purchase
    	@Override
    	public void onValidationSuccess() {}
    
    	//Invalid purchase data..!
    	@Override
    	public void onValidationFail(AdMostServerException e) {}
    
    	//Exception occurred, will be tried again automatically..!
    	@Override
    	public void onException() {}
    });
                            

  • Max request per waterfall limit bug for banner zones
  • Minor bugs

Version 1.7.7 Nov 01, 2018


  • AdTiming 4.5.1, Applovin 8.1.3, Appnext 2.4.2.472, Chartboost 7.2.1, Ironsource 6.7.11, Mobfox 3.6.2, Smaato 9.0.0, StartApp 3.10.1, Vungle 6.3.17
  • Tag functionality added for interstitial and rewarded videos. Tags will let you monitor the performance of the ads across different dimensions. Example usage is as follows;

    AdMostInterstitial INTERSTITIAL = new AdMostInterstitial(...);
    ...
    INTERSTITIAL.show("tag");
                            

  • Starting with Android 9.0 (API level 28), cleartext support is disabled by default. For applications targeting api level higher than 27 must use the following manifest config for AdMost cleartext support.

    
    <manifest ...>
        <uses-permission android:name="android.permission.INTERNET" />
        <application
            ...
            android:networkSecurityConfig="@xml/admost_network_security_config"
            ...>
            ...
        </application>
    </manifest>
                            

  • Ironsource callback bug for instance id "0" placements
  • CrossPromotion ads display bug
  • Minor bugs

Version 1.7.6 Oct 15, 2018


  • Facebook 5.0.0, Inmobi 7.2.1
  • Default native ad designs updated according to AdNetworks' design guidelines. PrivacyIconId added to design, please check Native Ads section for required changes.
  • Applovin MPU empty banner area bug
  • Memory leak on native ads
  • Minor bugs

Version 1.7.5 Sep 24, 2018


  • AdTiming 4.4.3
  • Background thread priorities
  • Mopub native placement privacy icon bug
  • Minor bugs

Version 1.7.4 Sep 10, 2018


  • AdTiming 4.4.0, Ironsource 6.7.10, Loopme 6.1.6
  • Remote audio control feature for supported video ads
  • SDK support for setting campaign id externally for tracking purposes

Version 1.7.3 Aug 20, 2018


  • Floor Price optimisation bug

Version 1.7.2 Aug 10, 2018


  • Mopub native ad privacy icon appearance
  • Applovin empty banner area bug
  • Latency on onFail callback for interstitial
  • Admost debug log levels
  • Optimisation in network requests and http caching
  • AdTiming 4.3.1, Ogury 3.0.13, Vungle 6.3.12

Version 1.7.1 July 23, 2018


  • Rare bug on rewarded video complete and dismiss callbacks
  • Initialization related OfferWall bugs
  • Test Suite activity layout
  • Adcolony 3.3.5, Amazon 5.9.0, Applovin 8.1.0, Appnext 2.4.1.471, Inneractive 7.1.5, Inmobi 7.1.1, Ironsource 6.7.9.1, Mopub 5.2.0, Unity 2.3.0
  • Adtiming 4.1.0
  • Applovin and Ironsource floor price optimization added. As of this version, instance based placements have to be used for these networks on Admost dashboard. If you already are using these networks, please inform AdMost business contact about the update.

Version 1.7.0 July 06, 2018


  • Interstitial memory leak
  • Crosspromotion, frequency capping and zone request related minor bugs
  • Admost repository replaced with admost.

    maven { url 'http://repo.admost.com:8081/artifactory/admost' }
                            

  • AdNetwork adapters separated from the core sdk. Now it is necessary to add admost adapters of AdNetworks included externally.

    compile 'com.admost.sdk:mopub-adapter:5.1.0'
    compile 'com.admost.sdk:appnext-adapter:2.4.0.471'
    compile 'com.admost.sdk:glispa-adapter:4.10.0'
    compile 'com.admost.sdk:vungle-adapter:6.2.5'
    compile 'com.admost.sdk:pubnative-adapter:2.3.16'
                            

  • Applovin 8.0.2, Tapjoy 12.0.0, Startapp 3.9.3
  • AdMostInterstitial callback listener (AdMostAdListener) updated. Deprecated onAction callback removed
  • AdMostView callback listener (AdMostViewListener) updated. Deprecated onLoad callback removed

Version 1.6.8 June 21, 2018


  • Facebook & Admob banner memory leak
  • Floor price optimisation
  • Admost sdk proguard definition updated. The following lines added

    -keep class android.support.v4.app.DialogFragment { *; }
    -keep class android.support.v4.util.LruCache { *; }
                            

  • ECPM value added to onReady method of AdMostViewListener interface for AdMostView callbacks
  • ECPM value added to onReady method of AdMostAdListener interface for AdMostInterstitial callbacks
  • Appnext 2.4.0.471, MoPub 5.1.0

Version 1.6.7 May 31, 2018


  • First activity memory leak
  • Vungle crash due to WAKE_LOCK permission
  • Opening Mopub consent dialog on init

Version 1.6.6 May 25, 2018


  • Custom designed native ad inconveniences fixed
  • GDPR Update
  • Adcolony 3.3.4, Admob & AdX 15.0.1, Applovin 8.0.1, Appnext 2.3.1.471, ChartBoost 7.2.0, Display IO 1.5.8, Facebook 4.28.2, Flurry 10.1.0, Fyber 8.21.0, Glispa 4.10.0, InMobi 7.1.0, InnerActive 7.1.4, IronSource 6.7.9, LoopMe 5.2.9, MobFox 3.5.0, MoPub 5.0.0, Millennial/Nexage 6.8.1, Smaato 8.0.0, StartApp 3.8.4, Tapjoy 11.12.2, Tappx 3.0.12, Unity 2.2.1, Vungle 6.2.5, YouAppi 4.1.1, MediaBrix 1.8.3.1

Version 1.6.4 May 02, 2018


  • Activity related custom native layout bug
  • Facebook rewarded video callback bug
  • Initialization request executor bug
  • Adcolony 3.3.3, Facebook 4.28.1

Version 1.6.3 Apr 16, 2018


  • A memory leak
  • Initialization related bugs
  • A Test Suite bug
  • Crash when calling interstitial before initialization
  • Google Mobile Ads 12.0.0 rewarded video support
  • Retry for failed interstitial show command
  • Minimum SDK Version updated to api level 14
  • Adcolony 3.3.2, Applovin 7.8.6, Appnext 2.2.4.467, Chartboost 7.1.0, DisplayIO 1.5.2, Facebook 4.28.0, Flurry 9.0.0, Inmobi 7.0.4, Millenial 6.7.0, Mobfox 3.4.1, Glispa 4.8.0, Ironsource 6.7.8, Startapp 3.8.1, Tapjoy 11.12.0, Unity 2.2.0
  • Inneractive 7.1.3, maven structure changed

Version 1.6.1 Mar 12, 2018


  • Session time zone bug
  • Tapjoy offerwall single instance problem
  • CrossPromotion and Premium ad support
  • Applovin 7.8.1
  • Fyber 8.20.0
  • Ironsource 6.7.5
  • Glispa (Avocarrot) 4.7.3, moved to its own repository
  • Amazon 5.8.2
  • DisplayIO 1.4.4
  • Leadbolt 8.3
  • Loopme 5.2.8
  • Startapp 3.7.1
  • Smaato 7.2.1

Version 1.5.9 Feb 20, 2018


  • Vungle rewarded video init problem
  • setUserId function added to support Tapjoy self managed offerwall

Version 1.5.8 Feb 15, 2018


  • Mopub, sending unencrypted advertising id over http problem
  • AdNetwork initialization and caching bugs
  • Analytics session duration bug
  • Other minor bugs
  • Setting application specific used id for analytics
  • Vungle moved to its own maven repository
  • Appnext moved to its own maven repository
  • Adcolony 3.3.0
  • Aplovin 7.6.2
  • AppNext 2.2.1.464
  • Facebook 4.27
  • Flurry 8.2.0
  • Fyber 8.19.0
  • Inmobi 7.0.2
  • Mobfox 3.3.0
  • Startapp 3.6.9
  • Tappx 3.0.9
  • UnityAds 2.1.2
  • Vungle 5.3.2

Version 1.5.7 December 22, 2017


  • AdView AndroidManifest activity definition removed

Version 1.5.6 December 19, 2017


  • Admob and Adx contentUrl problem
  • Applovin native click count problem
  • Flurry minimum sdk problem
  • Other minor bugs
  • Mobfox 3.2.8e
  • Startapp 3.6.8
  • Tapjoy 11.11.1

Version 1.5.5 November 27, 2017


  • Admob and Adx ad network requests are limited to 3 requests per waterfall.
  • Performance improvements for getting ads as soon as possible
  • Flurry native banner high memory consumption
  • Applovin 7.5.0
  • Chartboost 7.0.1
  • Flurry 8.0.2
  • InMobi 7.0.1
  • Ironsource 6.7.3
  • LoopMe 5.2.7
  • Mobfox 3.2.8d
  • Tappx 3.0.8
  • Vungle 5.3.0
  • Mobfox sticky service

Version 1.5.3 November 2, 2017


  • Sometime AdMob rewarded video doesn't show up.

Version 1.5.2 October 30, 2017


  • Youappi 3.0.0
  • Adcolony 3.2.1
  • Adtrial 2017-09-27
  • Applovin 7.4.1
  • Fyber 8.16.1
  • Ironsource 6.6.8.1
  • Leadbolt 8.1a
  • Loopme 5.2.4
  • Mediabrix 1.8.2.2
  • Millenial 6.6.1
  • Mobfox 3.2.8c
  • Mopub 4.17.0
  • Startapp 3.6.7
  • Tappx 3.0.7
  • Unity 2.1.1
  • Appnext integration moved to our maven repository.
  • /app/src/proguard-rules.pro file updated .

Version 1.5.1 October 20, 2017


  • Session tracking system improvements.
  • Out of memory exceptions reduced.
  • Cactusroad
  • Youappi

Version 1.5.0 October 18, 2017


  • Significant performance improvements.
  • Our core SDK version and build version logged after initialization
  • Many of the ad network sdk versions logged after initialization
  • Appnext updated to 2.1.1.463
  • Many of the warning logs are removed in the beginning of the app start
  • onReward() callback removed.

Version 1.4.0 September 8, 2017


  • In App Purchase Tracking   
  • Bug fix  ~ Google play services existence check added while trying to get Advertising ID from device

Version 1.3.9 August 25, 2017


  • Appnext 2.0.3.459  ~ Bug exists in latest Appnext SDK so we decided to use lower version.
  • Various bug fixes

Version 1.3.8 August 18, 2017


  • Test Suite Added   
  • Appnext 2.0.6.462
  • Chartboost 7.0.0
  • Facebook 4.25
  • Flurry 7.2.3
  • Fyber 8.15.1
  • Ironsource 6.6.4.1
  • Leadbolt 8.1
  • Mobfox 3.2.7b
  • onAction callback is deprecated  ~ You can still use this method. New callbacks are listed below:
    Banner: onReady, onFail
    Interstitial: onReady, onFail ,onDismiss, onShown
    Rewarded: onReady, onFail ,onDismiss, onComplete, onShown.
  • Various bug fixes

Version 1.3.7 August 9, 2017


  • Ad-blocker checker (beta)
  • Appnext 2.0.5.462
  • Flurry 7.2.1
  • Fyber 8.15.0
  • Inmobi 6.2.4
  • Ironsource 6.6.3
  • Outbid 1.4d
  • Startapp 3.6.3
  • Inlocomedia
  • Mobusi
  • Flymob
  • Vungle Initing
  • Appnext CTA-Text
  • AdColony proguard & SO files
  • Various bug fixes

Version 1.3.6 July 21, 2017


  • Various bug fixes

Version 1.3.5 July 19, 2017


  • AdTrial 2017-07-17
  • Facebook 4.24
  • Flurry 7.2.0
  • Flymob 2.0.8
  • Ironsource 6.6.2.1
  • Outbid 1.4
  • Smaato 6.1.1
  • Tapjoy 11.11.0
  • Tappx 3.0.5
  • Vungle 5.1.0    ~ From Admost dashboard you should enter zone_id from network settings to Vungle.
  • AdTrail Initing
  • Various bug fixes

Version 1.3.4 July 7, 2017


  • Outbid
  • CactusRoad
  • LoopMe 5.1.11
  • LoopMe Interstitial
  • Various bug fixes

Version 1.3.3 July 4, 2017


  • AdTrial
  • AppLovin Banner & Native Placements
  • Avocarrot Video Ads
  • RevMob Native Ads
  • AppLovin 7.2.0
  • AppNext 2.0.3.459
  • Avocarrot 3.8.2
  • DisplayIO 1.3.12
  • Facebook 4.23
  • Fyber 8.12.2
  • InMobi 6.2.3
  • InlocoMedia 3.0.8
  • InnerActive 6.5.4
  • IronSource 6.6.1
  • LoopMe 5.1.7
  • MobFox 3.2.7
  • Mopub 4.15
  • PubNative 2.3.16
  • RevMob 10.0.0
  • Tapjoy 11.10.2
  • Tappx 3.0.4
  • Vungle 4.1.0
  • YouAppi 2.0.8
  • AdFalcon
  • AppBrain
  • Conversant
  • Instal
  • Rubicon
  • Teads
  • DisplayIO request counting
  • Leadbolt native banner
  • Various bug fixes

Version 1.2.9 Apr 25, 2017


  • Leadbolt fixed
  • Various bug fixes

Frequently Asked Question

Compile Time Errors
  • I am getting some error about dex and method count, what is this?

    Earlier versions of the build system report this error as follows

    
                                    Conversion to Dalvik format failed:
    Unable to execute dex: method ID not in [0, 0xffff]: 65536
                                

    More recent versions of the Android build system display a different error which is;

    
    trouble writing output:
    Too many field references: 131000; max is 65536.
    You may try using --multi-dex option.
                                

    Both these error conditions display a common number: 65,536. This number is significant in that it represents the total number of references that can be invoked by the code within a single Dalvik Executable (DEX) bytecode file.

    You can find more information about this error in the following link

  • I am getting java.util.zip.ZipException: duplicate entry error what is this?

    Some of the ad network sdk's using 3rd party libraries. You may already using those librarires at your project. In that case there may be some duplications. To fix that problem you have to delete one of those libraries.

  • I got error message says leaked IntentReceiver com.facebook.ads.internal.DisplayAdController$c@cf9db8c that was originally registered here. Are you missing a call to unregisterReceiver()? in logcat. What is this?

    You may have missed to call destroy for each AdMostView in your activity onDestroy method.

  • Can we use google play service version higher than 10.0.1?

    Yes, our google play service version is just an example. You can use the version you have and it works fine with Admost SDK.