audience-bidding | Audience Bidding for MoPub (Android)

Prerequisites

Make sure that your Android application meets the following requirements before proceeding.

  • Android 4.2.2 (Jelly Bean, API 17) and higher. MRAID ads require API 19 and higher.
    Older Android versions may work, but are not officially supported.
  • Google Play Services will adhere to the user’s ad tracking preferences. For more information, please see Google's website regarding their Advertising ID.

Note: If you are using Android Studio 3.0+, you'll need to disable AAPT 2.0. To do this, you'll need to add the following to your gradle.properties:
android.enableAapt2=false

Step 1: Integrating the SDK

Step 1.1: Add the Required Libraries

Option 1: Pulling the Latest SDK via JCenter

If you are using Gradle to build your Android applications, you can pull the latest version of the SDK from JCenter as described below:

  1. Include JCenter in your top-level build.gradle file
    allprojects {
        repositories {
            jcenter()
        }
    }
    		
  2. Add the following line to the dependencies element in your application module’s build.gradle file.

    For Non-Audience Bidder:

    implementation 'com.inmobi.monetization:inmobi-mediation:9.0.0'
    		

    For Audience Bidder:

    implementation 'com.inmobi.monetization:inmobi-AB-plugin-mopub:1.0.5'
    		
  3. Sync your Gradle project to ensure that the dependency is downloaded by the build system.

Option 2: Adding the SDK Library to your Application Project

Alternately, you can download the latest version of InMobi’s SDK here and copy the library to your application module’s libs/ directory.

Add the following files to the app/lib folder within your project.

libs/InMobiSDK.aar
libs/InMobiMediationSDK.aar
	

In case you’re integrating with InMobi Audience Bidding solution, you'll need an additional aar file (InMobiABMoPubPlugin-x.x.x.aar).

These resources can all be found in the download along with the InMobi SDK.

To add the library to your project’s dependencies, add this line to the dependencies element in your module’s build.gradle:

implementation fileTree(dir: 'libs', include: ['*.aar])
	

The SDK bundle contains all media adapters that we support. Prune the downloaded folder to retain the media adapters you need.

Warning: Please remove all older versions of the InMobi SDK (8.X.X and older) and all older versions of the AerServ SDK. Otherwise, your code will not compile! Please reach out to your account manager if you have any questions.

Please note that using any other version of these SDKs may cause issues and unintended behavior.

Step 1.2: Gradle settings

You'll need to add the following settings to your application's build.gradle:

android {
  defaultConfig { 
  }
  buildTypes {
    ...
  }
  sourceSets {
    main {
    }
  }
}
repositories {
  ...
}
dependencies {

  implementation 'com.google.android.gms:play-services-ads-identifier:16.0.0'
  implementation 'com.google.android.gms:play-services-basement:16.1.0'
  implementation 'com.google.android.gms:play-services-location:16.0.0'
  implementation 'com.squareup.picasso:picasso:2.71828'
}
	

Step 1.3: Android Manifest

Add the following Android permission into your Android Manifest:

<?xml version='1.0' encoding='utf-8'?>
<manifest xmlns:android='http://schemas.android.com/apk/res/android'  
  package='com.sample.myapp' >

  <!-- Required Permissions -->
  <uses-permission android:name="android.permission.INTERNET" />

  <!-- Optional Permissions -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  
  <application
    android:allowBackup='true'
    android:label='@string/app_name'>
  </application>  
</manifest>
	

Note: Not including the optional permission MAY negatively impact fill for the respective networks that use these permissions.

Important Prerequisites

  • Checkpoint 1: Preparing Your App for Android 10

    InMobi SDK is compatible with Android 10 (API level 29), the latest version of the Android platform. On Android P onwards, apps make connections over HTTPS by default. Though InMobi supports the adoption of HTTPS, the current setup requires our demand partners to support HTTPS as well. The publisher can change their settings to HTTP if it has an impact on the revenue potential.

  • Checkpoint 2: Preparing Your App for AndroidX

    InMobi SDK is compatible with AndroidX (JetPack) library. In case your app uses the AndroidX library, then follow the standard guidelines by Google for migration by adding both the flags in build file.

    android.useAndroidX=true
    android.enableJetifier=true
    		

Note: It is highly recommended to upgrade Android Gradle plugin version to 4.1 or greater to avoid known issues in the jetifier which is fixed in the latest Gradle plugin version. To upgrade Android gradle plugin version please refer to Android developer documentation.

Step 1.4: Integrating MoPub Plugin

Step 1.4.1: Audience Bidding

Note: Contact your account manager for Audience Bidding placement setup.

To use the InMobi Audience Bidding SDK, here is how you can expect the flow to go:

  • The InMobi Audience Bidder SDK will make an ad request and return a bid token
  • The bid token from the ad network will have an updated MoPub Ad Object and have pricing keywords attached
  • You then call loadAd() on the MoPub ad object as before
  • If InMobi is selected to fill, The InMobi Audience Bidder SDK will handle the rendering

Optionally, if you would like to handle the keywords yourself, you may also observe the below flow:

  1. The InMobi Audience Bidder SDK will make an ad request and return a bid token
  2. The bid token from the ad network will have an IMABBidResponse object
  3. You may query the object for the bid keyword, price, granular keyword, InMobi placement, and buyer
  4. You would then append the bid keyword to MoPub's Adview
  5. You would then call loadAd() on the DFP ad object as before
  6. If InMobi is selected to fill, The InMobi Audience Bidder SDK will handle the rendering

Step 1.4.1.1: Enabling Audience Bidding Setup on MoPub

To enable Audience Bidding, you will need to do 2 things:

  1. Set up the line item to use the specific keywords with pricing used by the IMAudienceBidder class.
  2. Update your existing MoPub implementation.
Step 1.4.1.1.1: Setting Up the MoPub Line Items

Option 1 (Setting up Line Items Manually)
  1. Click on Orders -> Create Order
  2. Create a new order
    • Give your order a name (ex. Audience_Bidding_Test)
    • Enter in an advertiser name (ex. InMobi)
  3. Line item type
    • Give your line item a name (ex.IMAB_Banner_0.50)
    • Select type: Network Line Item
    • Select Network: Custom SDK network
    • Custom event class:
      • Banner: com.inmobi.plugin.mopub.IMABCustomEventBanner
      • Interstitial: com.inmobi.plugin.mopub.IMABCustomEventInterstitial
    • Custom event data: {}
    • Under "Budget & schedule", please enter the rate that matches what you have set up on your InMobi + AerServ dashboard for your eCPM (ex. 0.50)
  4. Ad unit targeting
    • Select the app and ad unit for your line item
  5. Audience Targeting
    • Enter the keyword in the "Keyword targeting" in this format IMAB:0.00 (ex. IMAB:0.50)
eCPM Keyword eCPM Keyword
0.01 IMAB:0.01 5.00 IMAB:5.00
0.05 IMAB:0.05 6.00 IMAB:6.00
0.10 IMAB:0.10 7.00 IMAB:7.00
0.20 IMAB:0.20 8.00 IMAB:8.00
0.30 IMAB:0.30 9.00 IMAB:9.00
0.40 IMAB:0.40 10.00 IMAB:10.00
0.50 IMAB:0.50 11.00 IMAB:11.00
0.60 IMAB:0.60 12.00 IMAB:12.00
0.70 IMAB:0.70 13.00 IMAB:13.00
0.80 IMAB:0.80 14.00 IMAB:14.00
0.90 IMAB:0.90 15.00 IMAB:15.00
1.00 IMAB:1.00 16.00 IMAB:16.00
1.10 IMAB:1.10 17.00 IMAB:17.00
1.20 IMAB:1.20 18.00 IMAB:18.00
1.30 IMAB:1.30 19.00 IMAB:19.00
1.40 IMAB:1.40 20.00 IMAB:20.00
1.50 IMAB:1.50 21.00 IMAB:21.00
1.60 IMAB:1.60 22.00 IMAB:22.00
1.70 IMAB:1.70 23.00 IMAB:23.00
1.80 IMAB:1.80 24.00 IMAB:24.00
1.90 IMAB:1.90 25.00 IMAB:25.00
2.00 IMAB:2.00 26.00 IMAB:26.00
2.50 IMAB:2.50 27.00 IMAB:27.00
3.00 IMAB:3.00 28.00 IMAB:28.00
3.50 IMAB:3.50 29.00 IMAB:29.00
4.00 IMAB:4.00 30.00 IMAB:30.00
Option 2 (Setting up Line Items with an Automated Script)

Add a Chrome extension to your browser. Download extension here.

  1. Login to the MoPub Dashboard
  2. Create your order
  3. Create the first line item under the order
    • Line Item Setup:
      • Type & Priority: Network Line Item
      • Network: Custom SDK Network
      • Custom Event Class:
        • Banner: com.inmobi.plugin.mopub.IMABCustomEventBanner
        • Interstitial: com.inmobi.plugin.mopub.IMABCustomEventInterstitial
      • Example:

      • Under the "Audience Targeting" section:
        • Please enter a keyword in this format: IMAB:0.01
        • Example:

  4. Staying on the current tab, open the extension.
  5. Input the order name and the first line item name
  6. Click 'Run' to execute
  7. Wait for all the line items to be created
Step 1.4.1.1.2: Technical Integration Details for Audience Bidding

For the InMobi Audience Bidding solution, here are the required changes that we'll need to do in our code:

  • Integration Step 1: Add additional imports

Our IMAudienceBidder will have most the necessary classes you'll need for working with our bidder.

import com.inmobi.plugin.mopub.IMAudienceBidder;
import com.inmobi.ads.InMobiAudienceBidder;
	
  • Integration Step 2: Initialize MoPub SDK

Remember to initialize the MoPub SDK. If you don't initialize, your application may not work as intended.

MoPub.initializeSdk(this, sdkConfiguration, initSdkListener());
	
  • Integration Step 3: Initialize the InMobi Audience Bidder

You MUST initialize the InMobi Audience Bidder before you make an ad request. Typically, the initialization step may take up to 10 seconds. The initialize method will take in the current context and your application site ID (from the InMobi platform). If you have problems finding this information, reach out to your account manager.

InMobiAudienceBidder.initialize(this, IMAB_SITE_ID);
	

You may also initialize the InMobi Audience Bidder SDK with a GDPR consent object.

JSONObject consentObject = new JSONObject();

try {
consentObject.put("gdpr_consent_available", 1);

} catch (JSONException e) {

// Error handling here
}

InMobiAudienceBidder.initialize(this, IMAB_SITE_ID, consentObject);
	
  • Integration Step 4: Get the singleton instance of the IMAudienceBidder

Our IMAudienceBidder class will power the majority of the bidding functionality.

IMAudienceBidder inMobiAudienceBidder = IMAudienceBidder.getInstance();
	
  • Integration Step 5: Create a BidToken for later

To easily support banner refresh and subsequent ad requests for the InMobi Audience Bidder, InMobi provides a BidToken that you may use. InMobi recommends retaining a reference to this. Our bid methods will return this BidToken which you can then call our refreshBid on. Our bid token constructor will require you to pass in an InMobi placement (PLC). Contact your InMobi account manager if you have any questions about this.

private IMAudienceBidder.BidToken bidToken;
	
  • Integration Step 6: Make an Ad request using the BidToken

This step can be broken down into a couple smaller parts. Full example snippets for banner and interstitial is available below.

  • Ensure that your moPubView/MoPubInterstitial has already been constructed.
  • The banner bidder has a constructor method that will accept the current context, InMobi banner placement, MoPubView, and a listener (IMAudienceBidderBannerListener)
  • The interstitial bidder has a constructor method that will accept the current context, InMobi interstitial placement, MoPubInterstitial, and a listener(IMAudienceBidderInterstitialListener)
  • You may define multiple bidTokens.
  • Both banner and interstitial listeners will define a onBidReceived and onBidFailed callback method that must be implemented.

Option A: If you would like for InMobi to handle the keywords (thus simplifying your integration), implement the IMAudienceBidderBannerListener or IMAudienceBidderInterstitialListener interface

  • For onBidReceived (meaning a bid was received from the InMobi Audience Bidder), you get returned an updated MoPub ad object. You then may call load()/loadAd() on this updated MoPub ad object.
  • For onBidFailed (meaning InMobi Audience Bidder failed to give a bid), you get returned a reference of the MoPub ad object with unmodified keywords. You then may call loadAd() on this MoPub ad object.

Option B: If you would like to handle the keywords yourself instead, you may instead implement the IMAudienceBidderBannerKeywordListener / IMAudienceBidderInterstitialKeywordListener interface. In addition, you will have to call setLocalExtras on the MoPub ad view.

  • For onBidReceived (meaning a bid was received from the InMobi Audience Bidder), you get returned a IMABBidResponse. You can then retrieve the following pieces of information from the IMABBidResponse:
    1. getPlacement() - Returns a String that describes the InMobi placement
    2. getBuyer() - Returns a String that describes the buyer
    3. getPrice() - Returns a Double that describes the price
    4. getBidKeyword() - Returns a String that describes a keyword that should be provided to the MoPub ad object
    5. getGranularKeyword() - Returns a String that describes a granular keyword
  • For onBidFailed (meaning InMobi Audience Bidder failed to give a bid), you get returned an error. You then can call loadAd() on the original MoPub ad object.

Banner Code Examples

Option A: InMobi will handle the keywords for you in this snippet.

// Use a Boolean to keep track so we don't call loadAd() on the banner repeatedly.
public Boolean bannerLoaded = false;

bannerBidToken = inMobiAudienceBidder.createBidToken(this, AB_BannerPLC, mopubViewWidth,
mopubViewHeight, moPubView, new IMAudienceBidder.IMAudienceBidderBannerListener() {

@Override
public void onBidReceived(@NonNull final MoPubView m) {

    // Bid was received from InMobi Audience Bidder. Call loadAd() on the updated ad object.

    // If the banner has not yet been loaded, call loadAd() to load the ad into the view
    if (!bannerLoaded) {
        m.loadAd();
    }
}
@Override
public void onBidFailed(@NonNull MoPubView m, @NonNull final Error error) {

    // No Bid received from InMobi Audience Bidder. Call loadAd() on the ad object.

    // If the banner has not yet been loaded, call loadAd() on the updated ad view
    if (!bannerLoaded) {
        m.loadAd();
    }
}
});

// Call update bid to start this process
bannerBidToken.updateBid();
});
	

Option B: You will handle the keywords in this example. You will need to ensure mopub's adview localExtras is not null first. Below is an example of what you might do in your banner configuration code.

Map localExtras = new HashMap();
localExtras.put(IMAudienceBidder.AD_KEY, AB_BannerPLC);
moPubView.setLocalExtras(localExtras);
	

The key difference with this integration path is that you'll need to call setKeywords() yourself by retrieving the value from the IMABBidResponse.

// Use a Boolean to keep track so we don't call loadAd() on the banner repeatedly.
public Boolean bannerLoaded = false;

bannerBidToken = inMobiAudienceBidder.createBidToken(this, AB_BannerPLC, mopubViewWidth, mopubViewHeight, new IMAudienceBidder.IMAudienceBidderBannerKeywordListener() {

  @Override
  public void onBidReceived(IMAudienceBidder.IMABBidResponse imabBidResponse) {

      // Bid was received from InMobi Audience Bidder.

      // Parse the imaBidResponse for any additional information you need, and set them here as desired.
         moPubView.setKeywords(imabBidResponse.getBidKeyword());

      // If the banner has not yet been loaded, call loadAd to load the ad into the view
      if (!bannerLoaded) {
          moPubView.loadAd();
      }
  }
  @Override
  public void onBidFailed(Error error) {

      // No Bid received from InMobi Audience Bidder. Call loadAd on your MoPub view once you are ready.

      // Error handling here as desired

      // If the banner has not yet been loaded, call loadAd to load the ad into the view
      if (!bannerLoaded) {
          moPubView.loadAd();
      }
  }
});

// Call update bid to start this process
bannerBidToken.updateBid();
	

For more information about MoPub banner implementation specifics, you can consult the relevant MoPub documentation here: https://developers.mopub.com/docs/android/banner/

Interstitial Code Examples

Option A: InMobi will handle the keywords for you in this snippet.

interstitialBidToken = inMobiAudienceBidder.createBidToken(Activity.this,
AB_InterstitialPLC, mInterstitial, new IMAudienceBidder.IMAudienceBidderInterstitialListener() {

    @Override
    public void onBidReceived(@NonNull final MoPubInterstitial m) {

        // Bid was received from InMobi Audience Bidder. You may call load() on the updated ad object.
        m.load();
    }
    @Override
    public void onBidFailed(@NonNull MoPubInterstitial m, @NonNull final Error error) {

        // No Bid received from InMobi Audience Bidder. You may call load() on the ad object.
        m.load();
    }

    // Then, call update bid to kick off the bidding process
    interstitialBidToken.updateBid();
});
	

Option B: You will handle the keywords in this example. You will need to ensure mopub's adview localExtras is not null first. Below is an example of what you might do in your interstitial configuration code.

Map localExtras = new HashMap();
localExtras.put(IMAudienceBidder.AD_KEY, AB_InterstitialPLC);
mInterstitial.setLocalExtras(localExtras);
	

The key difference with this integration path is that you'll need to call setKeywords() yourself by retrieving the value from the IMABBidResponse.

interstitialBidToken = inMobiAudienceBidder.createBidToken(this, AB_InterstitialPLC, new IMAudienceBidder.IMAudienceBidderInterstitialKeywordListener() {

  @Override
  public void onBidReceived(IMAudienceBidder.IMABBidResponse imabBidResponse) {

      // Bid was received from InMobi Audience Bidder.

      // Parse the imaBidResponse for any additional information you need, and set them here as desired.
      mInterstitial.setKeywords(imabBidResponse.getBidKeyword());

      // Call load on the interstitial after all keywords have been set
      mInterstitial.load();
  }
  @Override
  public void onBidFailed(Error error) {

      // No bid received - you may call load on the interstitial after any additional keywords have been set

      // Error handling here as desired
      mInterstitial.load();
  }
});

// Then, call update bid to kick off the bidding process
interstitialBidToken.updateBid();
	

Remember to then show the interstitial! Consult MoPub documentation here regarding interstitials: https://developers.mopub.com/docs/android/interstitial/

public void onInterstitialLoaded(MoPubInterstitial interstitial) {
    if (interstitial.isReady()){  
       interstitial.show();  
    }
}
	
  • Integration Step 7: Implement Banner Callbacks to Support Banner Refresh

InMobi supports MoPub's automatic banner refresh in the InMobi Audience Bidder SDK through MoPub Plugin SDK. You'll need to include an updateBid method call in the MoPub onBannerLoaded / onBannerFailed. This will allow us to provide a fresh bid each time the banner is refreshed.

public void onBannerLoaded(MoPubView banner) {

    // Ensure that we do not call loadAd() again on the MoPubView
    bannerLoaded = true;

    // Update the bid for the next MoPub refresh ad call
    bannerBidToken.updateBid();
}
public void onBannerFailed(MoPubView banner, MoPubErrorCode errorCode) {

    // Ensure that we do not call loadAd() again on the MoPubView
    bannerLoaded = true;

    // Update the bid for the next MoPub refresh ad call
    bannerBidToken.updateBid();
}
	
  • Integration Step 8: Re-use the interstitial bid token

You can also re-use the interstitial bid token. As an example, you might include this in the onInterstitialDismissed callback from MoPub.

// Update bid for the next ad call
interstitialBidToken.updateBid();
	
  • Step 1.4.1.1.3: Testing your Audience Bidding Integration

In order to test your Audience Bidding implementation, you will need to:

  • Make sure you enable test mode on your placement through the UI
  • Set up a line item with
    • CPM 0.00
    • Keyword: IMAB:0.00
  • Two ways to verify:
    • Through Charles:
      • In the ad request you send to Mopub (ads.mopub.com/m/ad), check:
      • Under "Contents" & "JSON Text", you should see a key value pair of: "q: keywords, testing, IMAB:0.00"
    • Through Mopub Reporting:
      • Make sure the ad filled on testing
      • Make sure the numbers align for the newly generated line item at $0.00 (it might take a few minutes for Mopub to report it).

Step 1.4.2: Non-Audience Bidding

  • Step 1.4.2.1: Add the MoPub to AerServ Adapter

Add the following files from dist/network-support/MoPub/AerServCustomEvents to your project:

  • network-support/MoPub/AerServBidder.java
  • network-support/MoPub/AerServBidListener.java
  • network-support/MoPub/AerServCustomEventBanner.java
  • network-support/MoPub/AerServCustomEventInterstitial.java
  • network-support/MoPub/AerServCustomEventRewardedInterstitial.java
  • network-support/MoPub/AerServPluginUtil.java
  • Step 1.4.2.2: Configure Ad Setting on MoPub Dashboard
  1. (Optional) Create a new AdUnit with the ad type you'd like to use AerServ with - you can use an existing AdUnit if one already exists.
  2. Now go to the 'Orders' tab and click on Create order. Creating a new 'Order' is optional. You can use an existing order if one already exists. If you decide to use an existing order, you will need to create a new Line Item instead.
  3. When creating a new Order/ Line Item, use the following parameters:
    • Advertiser: AerServ
    • Type & Priority: Network
    • Network: Custom Native Network
    • Class: Use one of the following class name. If you changed the package name, please change the classpath to correspond with the new package name.
      • For banner: com.mopub.mobileads.AerServCustomEventBanner
      • For interstitial: com.mopub.mobileads.AerServCustomEventInterstitial
      • For rewarded video: com.mopub.mobileads.AerServCustomEventRewardedInterstitial
    • eCPM: You will need to insert the eCPM from the AerServ dashboard. If you have any questions please contact our support.
    • Data: AerServ ad parameters, in JSON format. This field will take any additional parameter for the AerServ SDK. Refer to Advanced Topics - Server Parameters for more information.
    • Select the newly created AdUnit or use an existing AdUnit

  • Step 1.4.2.3: AerServ Ad Parameter

AerServ server data that you entered on MoPub's web interface must be in JSON format. Currently we support these parameters:

NAME TYPE REQUIRED DEFAULT DESCRIPTION
placement String Yes N/A AerServ Placement
Sample AerServ Ad Parameter
{"placement": "1000741"}
		
  • Step 1.4.2.4: Event Mapping

AerServ banner events are mapped to MoPub's CustomEventBanner events, as follows:

  • AD_LOADEDonBannerLoaded()
  • AD_FAILEDonBannerLoaded()
  • AD_CLICKEDonBannerClicked()

AerServ interstitial events are mapped to MoPub's CustomEventInterstitial events, as follows:

  • PRELOAD_READYonInterstitialLoaded()
  • AD_FAILEDonInterstitialFailed()
  • AD_IMPRESSIONonInterstitialShown()
  • AD_CLICKEDonInterstitialClicked()
  • AD_DISMISSEDonInterstitialDismissed()

AerServ rewarded video events are mapped to MoPub's CustomEventRewardedVideo events, as follows:

  • PRELOAD_READYonRewardedVideoLoadSuccess()
  • AD_FAILEDonRewardedVideoLoadFailure()
  • VIDEO_STARTonRewardedVideoStarted()
  • AD_CLICKEDonRewardedVideoClicked()
  • AD_DISMISSEDonRewardedVideoClosed()
  • VC_REWARDEDonRewardedVideoCompleted()
  • Step 1.4.2.5: Error Codes

AerServ adapter will fire the following MoPub errors using their AdRequest error enum:

ADREQUEST ENUM CONDITION
NETWORK_NO_FILL AerServ SDK fired AD_FAILED event. See AerServ SDK documentation for more details.

Version History

SDK 9.0

  • 9.0.0: 9/20/19
    • Modular SDK

      - Added an ability to integrate Mediation as a separate module.

    • Added support for Android 10
    • Support for Mopub 5.8
    • Interface Changes
      • - APIs added
        • AerServTransactionInformation

          public String getCreativeID()

        • InMobiBanner

          public void destroy()

      • - APIs removed
        • InMobiNative

          public InMobiNative(Context context, long placementId, NativeAdListener listener)

          public void setNativeAdListener(NativeAdListener listener)

        • InMobiNative.NativeAdListener
        • InMobiBanner

          public void setListener(BannerAdListener listener)

        • InMobiBanner.BannerAdListener
        • InMobiInterstitial

          public InMobiInterstitial(Context context, long placementId, InterstitialAdListener2 listener)

          public void setInterstitialAdListener(InterstitialAdListener2 listener)

        • InMobiInterstitial.InterstitialAdListener2
    • Bug fixes and performance improvements
  • 8.2.1: 8/22/19
    • Bug Fixes for SDK and AudienceBidder Plugin
  • 8.2.0: 8/5/19
    • Chrome Custom tabs support
    • Thread Optimizations
    • Bug Fixes for SDK and AudienceBidder Plugin
  • 8.1.3: 7/18/19
    • Support for Audience Bidding for DFP
    • Bug Fixes
  • 8.1.2: 6/19/19
    • Updated AdColony SDK support to 3.3.10
    • Updated Audience Network (Facebook) support to 5.3.1
  • 8.1.1: 5/27/19
    • Support for new Picasso version 2.71828
    • Bug Fixes
  • 8.1.0: 5/14/19
    • DFP Plugin Support
    • Mopub Audience Bidding Plugin Keyword Handling
  • 8.0.9: 4/22/19
    • Bug Fixes
  • 8.0.8: 4/17/19
    • Bug Fixes
  • 8.0.7: 4/5/19
    • Bug Fixes
    • Updated AudienceBidder to v1.0.1
      • Support for granular keywords
      • Fixed issue with updateBid not working with MoPub's refresh
      • Replaced source file with a aar
      • Various API Changes (see documentation)
  • 8.0.5: 3/11/19
    • Audience Bidder for the Mopub Plugin
    • Telaria Adapter Deprecation
    • Flurry Banner Adapter Deprecation
    • Applovin 3rd Party API Reporting updates
    • Chartboost 3rd Party API Reporting updates
    • Mediated SDK updates
    • Bug Fixes
  • 8.0.1: 11/28/18
    • Unified InMobi + AerServ SDK