BidSmart

BidSmart is our optional system designed to improve monetization performance and help drive higher ad revenue in your title. If you’re interested in enabling it, please coordinate with your Lion Studios Manager so we can make sure your setup is ready and guide you through rollout/testing.

BidSmart runs on top of Lion Ads and does not interfere with standard ad loading. When an eligible higher-paying ad is available, BidSmart will serve that instead.

To enable BidSmart:

  1. Enable BidSmart from the Ads settings page.

  2. Fill out the required settings for each platform (iOS / Android).

  3. Provide BidSmart config to Lion Ads via Remote Config or a local fallback.

Remote Config

The default config and ad units will be provided to you by your Lion Studios Manager.

We keep BidSmart settings simple and handle the rest for you. BidSmart only enables after it receives a remote config, and it caches the last received config to speed up loading in the next session.

Sample remote config JSON value for LionAdsRemoteConfig:

  • BidSmart (Enabled): A boolean flag that controls whether the BidSmart system is active in your title. Default value: False

  • CanInterstitialReplaceRewarded: A boolean flag that determines whether an interstitial ad is allowed to be served in place of a rewarded ad when BidSmart identifies a higher-paying interstitial opportunity at a rewarded ad placement. Default value: False

Even when an interstitial ad is served in place of a rewarded ad, the rewarded ad's reward callback will still trigger as expected. The player will receive their reward without any issues, ensuring no disruption to gameplay or progression tied to the rewarded ad placement.

{
  "BidSmart": {
    "Enabled": true
  },
  "CanInterstitialReplaceRewarded": false
}

Once your remote configuration has been received, pass it to Lion Ads as early as possible by calling:

LionAdsRemoteConfigHandler.SetRemoteConfig(LionAdsRemoteConfig config)
Lion Remote Configs Package Implementation Sample
private const string LION_ADS_AB_TEST_NAME = ""; //Put your RC key here to get value

void Awake(){    
	if (!LionCore.IsInitialized)    
	{        
		LionCore.OnInitialized += delegate        
		{
			ApplyRC();
		};
	}
	else
	{
		ApplyRC();
	}
}

void ApplyRC()
{
	LionAdsRemoteConfig config = null;
	var json = RemoteConfigsController.GetValue<string>(LION_ADS_AB_TEST_NAME,null);
	
	if (string.IsNullOrEmpty(json))
	{
		Debug.LogError(LION_ADS_AB_TEST_NAME + " json returned null or empty!");
		return;
	}

	try
	{
		config = JsonConvert.DeserializeObject<LionAdsRemoteConfig>(json);
	}
	catch (JsonException e)
	{
		Debug.LogError($"Failed to parse {LION_ADS_AB_TEST_NAME} JSON. Error: {e.Message}");
		return;
	}
		
	LionAdsRemoteConfigHandler.SetRemoteConfig(config);
}

That’s it, BidSmart is now enabled and ready to use!

Advanced

More Remote Config

There are some extra configs but the default values works best already.

  • UpCoefBase: The base coefficient controlling how aggressively BidSmart raises the bid floor after a successful ad load. Higher values push the floor up faster to chase higher-paying ads; lower values increase more gradually. The default is tuned to balance revenue maximization against fill-rate stability.

  • DownCoefBase: The base coefficient controlling how aggressively BidSmart lowers the bid floor after no-fill errors. Higher values recover fill rate faster after failures; lower values keep the floor closer to its previous value. The decrease is capped and will never drop below the safety floor sourced from the standard ad unit.

  • FillRateMinimum: The minimum acceptable fill rate threshold (0–1) for BidSmart ad units. When the observed fill rate falls below this value during a failed load, the under-minimum fail streak counter is incremented, feeding into the auto-disable safety mechanism.

  • FailStreakUnderMinimumMax: The maximum number of consecutive failed loads under FillRateMinimum before BidSmart auto-disables itself for the affected ad type. Once triggered, BidSmart stops loading and falls back to the standard ad unit to prevent prolonged revenue loss from unfillable floors.

{
  "BidSmart": {
    "Enabled": true,
    "UpCoefBase": 2.0,
    "DownCoefBase": 0.35,
    "FillRateMinimum": 0.3,
    "FailStreakUnderMinimumMax": 5
  },
  "CanInterstitialReplaceRewarded": false
}

Extras

A few things worth knowing about LionAds:

  • When BidSmart is enabled, LionAnalytics automatically tags events with a bid_smart = true global property, so you can segment cohorts in analytics without extra code.

  • LionAdsRemoteConfigHandler.OnRemoteConfigUpdated fires whenever a new config is applied, if you need to react in your own modules.

Last updated

Was this helpful?