Configure advanced SDK settings such as custom parameters, price floors, and user segmentation to optimize ad delivery and monetization.
Read time 5 minutesLast updated 2 months ago
Set UserID
If you’re using server-to-server callbacks to reward your users with ironSource rewarded ad units, or using Ad Quality user journey, you must define a unique identifier for each user (“UserID”), using the setUserID method. Set the UserID before the init request, to make sure you avoid any data losses, related to the user. Use a unique identifier, with a format of 64 characters NSString.
IronSource.setUserId(userID)
Note
To ensure UserID is available and unique for all users, you should not use IDFA as an identifier.
Define Segments
You can now easily tailor the way you serve your ads to fit a specific audience! You'll need to inform our servers of the users' details so the SDK will know to serve ads according to the segment the user belongs to.ironSource supports three methods to convey data to our servers to outline the user segment, namely:
Device Properties: the LevelPlay SDK collects certain standard parameters that pertain to the users' device automatically such as device model, device manufacturer, app version, OS, etc. You do not need to convey this data to us
User Properties: user data which is not collected by our SDK, such as age, gender, creation date, etc. (see full list of supported segment properties with descriptions below) must be relayed through the API. Follow the instructions to send us these details so our SDK can apply the relevant ad settings to the segments you defined on the ironSource platform
Custom Segments: you can create a custom segment with predefined conditions without conveying user details to our servers and tailor ad settings for that user segment on the ironSource platform
Note
If you're using LevelPlay SDK 7.2.0+, you can use ISSegment API to change your segmentation during the session. This will affect the next loaded ad, and can be called before loading each ad unit, to dynamically affect the waterfall. You can learn more about LevelPlay segmentation here.
Pass User Properties
Once you've defined segments on the ironSource platform, you should inform our servers of the user's particulars.First, init the segment:
let segment: ISSegment = ISSegment()
Define what properties to send to our servers on which to base the segments. You can transmit this information through one of the following methods:
If you are familiar with the segment that the user belongs to, enter the segment name:
segment.segmentName = "YOUR_SEGMENT_NAME"
Send us the user details. ironSource provides a range of standard user properties that you can set to attribute a user to a segment in the API. See table below for descriptions.
// Set user agesegment.age = USER_AGE// Set user gendersegment.gender = ISGender.IRONSOURCE_USER_FEMALE// Set user's total in-app purchasessegment.iapTotal = USER_IAP_TOTAL// Set user's levelsegment.level = USER_LEVEL// Set user's paying statussegment.paying = USER_PAYING_STATUS// Set user creation datesegment.userCreationDate = NSDate() as Date!
In addition, you can set up to 5 custom user properties per segment:
The LevelPlay SDK supports custom parameters for Rewarded Video. You can pass custom parameters upon the initialization of the ad unit and receive the parameters upon a user's completion event.You can now pass custom parameters for all mediation networks on Unity LevelPlay.
Note
Custom parameters work in conjunction with server-to-server completion callbacks only. You will receive the parameter as part of the callback string.
You may insert more than one custom parameter in the init request.
Implementation Code
Rewarded Video
Custom Parameters can be set several times per session.
To reset the value, use clearRewardedVideoServerParameters, and then set the new value.
The Floor Configuration API lets you set a price floor for a specific ad unit. By setting a price floor for each user, you can improve targeting efficiency, reduce latency, and optimize ad performance. The price floor must be assigned when creating the ad object, and it applies to all subsequent loads for that object.Note: Min SDK version for this feature is 8.9.0.
Properties
Type
Description
Bid floor
double
The price in USD that defines the minimum eCPM applied to traditional instances and bidders.
Intersitial Ads Example
// Define a price floor configurationLPMInterstitialAdConfig *adConfig = [[[LPMInterstitialAdConfigBuilder new] setBidFloor: 1.23] build]; // Set the price floor in USD// Apply the configuration to an interstitial ad unitLPMInterstitialAd *interstitialAd = [[LPMInterstitialAd alloc] initWithAdUnitId:@"adUnitId" config:adConfig];
// Define a price floor configurationlet adConfig = LPMInterstitialAdConfigBuilder().set(bidFloor: 1.23) // Set the price floor in USD.build()// Apply the configuration to an interstitial ad unitlet interstitialAd = LPMInterstitialAd(adUnitId: "adUnitId", config: adConfig)
// Define a price floor configurationLPMRewardedAdConfig *adConfig = [[[LPMRewardedAdConfigBuilder new] setBidFloor: 1.23] build]; // Set the price floor in USD// Apply the configuration to a rewarded ad unitLPMRewardedAd *rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId" config:adConfig];
// Define a price floor configurationval adConfig = LevelPlayRewardedAd.Config.Builder().setBidFloor(1.23) // Set the price floor in USD.build()// Apply the configuration to a rewarded ad unitval rewardedAd = LevelPlayRewardedAd("adUnitId", adConfig)
Full rewarded ads implementation is available here.
Banner ads example
// Define a price floor configurationLPMBannerAdViewConfig *adConfig = [[[LPMBannerAdViewConfigBuilder new] setBidFloor: 1.23] build]; // Set the price floor in USD// Apply the configuration to a banner ad unitLPMBannerAdView *bannerAd = [[LPMBannerAdView alloc] initWithAdUnitId:@"adUnitId" config:adConfig];
// Define a price floor configurationlet adConfig = LPMBannerAdViewConfigBuilder().set(bidFloor: 1.23) // Set the price floor in USD.build()// Apply the configuration to a banner ad unitlet bannerAd = LPMBannerAdView(adUnitId: "adUnitId", adConfig)
LevelPlay SDK Error Codes
ironSource provides an error feedback mechanism to provide an explanation for any failure in the SDK integration. You will receive these errors when something went wrong or an aspect of the integration wasn't completed correctly.The ironSource Error object contains an error code and message. These are all the possible errors and their message based on their functions:
Error Codes
Ad Unit
Description
508
N/A
Init failure of the mediation/Network
Calling a Demand Only API in non Demand Only mode
Calling a non Demand Only API in Demand Only mode
509
Interstitial, Rewarded Video
Show Fail: No ads to show
510
Interstitial, Rewarded Video, Banner
Load Fail: Server response failed
520
Interstitial, Rewarded Video
Show Fail: No internet connection; ShouldTrackNetworkState is enabled
Show Fail: No internet connection
524
Interstitial, Rewarded Video
Show Fail: Placement %@ has reached its limit as defined per pace
Show Fail: Placement %@ has reached its capping limit
526
Interstitial, Rewarded Video
Show Fail: Ad unit has reached its daily cap per session
604
Banner
Can’t load because the placement is capped
605
Banner
Unexpected exception while loading the banner
606
Banner
No banner fill on all the networks on the first load
1007
Interstitial, Rewarded Video
Auction Fail: Auction request did not contain all required information
1022
Rewarded Video
Show Fail: Cannot show an RV while another RV is showing
1023
Rewarded Video
Show Fail: Show RV called when there are no available ads to show
1035
Interstitial
Empty Waterfall
1036
Interstitial
Show Fail: Cannot show an interstitial while another interstitial is showing
1037
Interstitial
Load Fail: Cannot load an interstitial while another interstitial is showing