Open Bidding Mediation Beta

This guide is intended to help you integrate Open Bidding mediation into your Android app.

Prerequisites

Open Bidding partners

There are two types of open bidding integrations: those that require a third-party SDK and those that don't.

  • An integration with a partner that doesn't require a separate third-party SDK or adapter library won't require an app update. You just need to add an Open Bidding ad source in the AdMob UI.

  • For partners that require an SDK, additional Google Mobile Ads SDK integration instructions are provided below.

SDK 1 & SDK-less Open Bidding partners
Partner Banner Interstitial Rewarded Video Native
Aarki
AdColony 1
AppLovin 1
Facebook 1
Fluct
Index Exchange
Liftoff
OpenX
PubMatic
Rubicon
Smaato
Tapjoy 1
TripleLift
UnrulyX

1 Partner requires third-party SDK.

Update your AndroidManifest.xml

Google Mobile Ads SDK versions 18.1.1 and 18.2.0 require that you explicitly enable Open Bidding in your AndroidManifest.xml file by adding the <meta-data> tag shown below. Failure to add this <meta-data> tag results in Open Bidding networks not serving. Open Bidding exchanges still work without this tag.

<manifest>
    <application>
        <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
        <meta-data
            android:name="com.google.android.gms.ads.flag.rtb_enabled"
            android:value="true"/>
    </application>
</manifest>

Initialize the Mobile Ads SDK

Before an open bidding adapter can participate in an ad request, it must first be initialized. The MobileAds.initialize(Context, OnInitializationCompleteListener) method initializes open bidding adapters and calls back the completion listener once all adapters complete initialization (or after a 30 second timeout).

Call this method as early as possible, ideally in the onCreate() method of your main Activity.


import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.AdapterStatus;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;

public class MainActivity extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
                Map<String, AdapterStatus> statusMap = initializationStatus.getAdapterStatusMap();
                for (String adapterClass : statusMap.keySet()) {
                    AdapterStatus status = statusMap.get(adapterClass);
                    Log.d("MyApp", String.format(
                            "Adapter name: %s, Description: %s, Latency: %d",
                            adapterClass, status.getDescription(), status.getLatency()));
                }

                // Start loading ads here...
            }
        });
    }
}

We recommend waiting to load ads until some point after the completion handler is called in order to ensure full participation from every ad network on the first ad request. If ads are loaded before some adapters have finished initializing, these adapters may not be ready to service ad requests and won't participate in that request.

Choose your open bidding networks

For each open bidding partner, you'll need to make changes in these places:

Third-party ad network UI
Sign up for the third-party ad network and create a placement in their UI.
AdMob UI
Update your ad unit's mediation settings to include the ad network.
App code
Update your app to include the third-party ad network's SDK, and an adapter library that communicates between Google and the third-party ad network to request and serve ads.

Click on the link of a network in the table for detailed instructions on how to incorporate its SDK.

Troubleshooting

The presence of the a3p parameter in any request after the first ad request indicates that at least one open bidding network is properly integrated into your app.

If a3p isn't in subsequent ad requests, here are some potential reasons:

  • You did not initialize the mobile ads SDK using the new initialization method.
  • You forgot to update your AndroidManifest.xml.
  • You loaded the ad before the third-party ad network's SDK was initialized. To ensure all open bidding partners can participate, we recommend waiting to load an ad until after your OnInitializationCompleteListener gets called.
  • Your AdMob ad unit doesn't target a mediation group that has an open bidding entry configured for that third-party ad network.
  • Your AdMob ad unit belongs to a different AdMob app than the one you updated in your AndroidManifest.xml file. When initialization occurs, the Google Mobile Ads SDK only pulls down information about the ad units associated with this AdMob app ID.

Make sure to disable refresh in all third-party ad networks UI for banner ad units used in AdMob mediation. This will prevent a double refresh since AdMob also triggers a refresh based on your banner ad unit's refresh rate.

Rewarded ads mediation

We recommend that you override all default reward values by setting reward values in the AdMob UI. To do this, select the Apply to all networks in Mediation groups box so that the reward is consistent across all networks. Some ad networks don't provide a reward value or type at all. By overriding the reward value, the reward is consistent no matter which ad network served the ad.

For more information on setting reward values in the AdMob UI, refer to create a rewarded ad unit.

Native ads mediation

The following are some best practices to consider when implementing native mediation.

Native ad presentation policy
Each ad network has its own policies. When using mediation, it's important to remember that your app still needs to abide by the policies of the mediated network that provided the ad.
Use loadAd() instead of loadAds()
The loadAds() method currently serves only Google ads. For mediated ads, use loadAd() instead.