This guide shows how to configure the InMobi SDK to pass custom signals for ad auction pricing or first-party data. Additionally, you can send custom user or request-level signals to the InMobi SDK with each ad request. This enhances ad relevance, leading to higher fills and eCPMs.
Supported from InMobi SDK 10.7.8 onwards
The signals should be passed to InMobi SDK directly as format-level instances are not available on bidding integrations. You can use putPublisherSignals
method on InMobi SDK instance and pass the first-party signals. These will be included in all subsequent ad requests.
putPublisherSignals
method. This method must be called after InMobi SDK is successfully initialized.getPublisherSignals
method to check what signals are set already.resetPublisherSignals
method if you want to clear all the signals data for the user.
Some signals such as floor price, impression depth, user ctr, etc. have different values for each format while signals such as paying user, and retention have the same value across formats.
// ensure InMobi SDK is initialised
// create map with required values
val publisherSignals = mapOf(
"iap" to true, // User has made IAP
"ua_type" to "paid", // User is acquired via paid medium
"iap_type" to "minnow", //User has made low purchases
"iaa_type" to "whale", //User has seen high number of ads
"s_dep_rew" to 4, //User has seen 4 rewarded ads in current session
"i_dep_rew" to 10, //User has seen 10 rewarded ads in lifetime
"ctr_rew" to 9.25, //Historical CTR for user is 9.25%
"abp_5_rew" to 0.01720 //average winning bid price for last 5 rewarded auctions was $0.01720, eCPM is $17.2
)
// Set the extras on InMobiSdk
InMobiSdk.PublisherSignals.putPublisherSignals(publisherSignals)
// Ensure InMobi SDK is initialized
// Create a map with required values
Map<String, Object> publisherSignals = new HashMap<>();
publisherSignals.put("iap", true); // User has made IAP
publisherSignals.put("ua_type", "paid"); // User is acquired via paid medium
publisherSignals.put("iap_type", "minnow"); // User has made low purchases
publisherSignals.put("iaa_type", "whale"); // User has seen high number of ads
publisherSignals.put("s_dep_rew", 4); // User has seen 4 rewarded ads in current session
publisherSignals.put("i_dep_rew", 10); // User has seen 10 rewarded ads in lifetime
publisherSignals.put("ctr_rew", 9.25); // Historical CTR for user is 9.25%
publisherSignals.put("abp_5_rew", 0.01720); // Average winning bid price for last 5 rewarded auctions was $0.01720, eCPM is $17.2
// Set the extras on InMobiSdk
InMobiSdk.PublisherSignals.INSTANCE.putPublisherSignals(publisherSignals);
// ensure InMobi SDK is initialised
// create map with required values
let publisherSignals: [String: Any] = [
"iap": true, // User has made IAP
"ua_type": "paid", // User is acquired via paid medium
"iap_type": "minnow", // User has made low purchases
"iaa_type": "whale", // User has seen high number of ads
"s_dep_rew": 4, // User has seen 4 rewarded ads in current session
"i_dep_rew": 10, // User has seen 10 rewarded ads in lifetime
"ctr_rew": 9.25, // Historical CTR for user is 9.25%
"abp_5_rew": 0.01720 // Average winning bid price for last 5 rewarded auctions was $0.01720, eCPM is $17.2
]
// Set the extras on InMobiSdk
IMSdk.putPublisherSignals(publisherSignals)
// create a dictionary with all required signals and corresponding values
Dictionary<string, object> publisherSignals = new Dictionary<string, object> { };
publisherSignals.Add("iap", "true"); // User has made IAP
publisherSignals.Add("ua_type", "paid"); // User is acquired via paid medium
publisherSignals.Add("iap_type", "minnow"); // User has made low purchases
publisherSignals.Add("iaa_type", "whale"); // User has seen high number of ads
publisherSignals.Add("s_dep_rew", 4); // User has seen 4 rewarded ads in current session
publisherSignals.Add("i_dep_rew", 10); // User has seen 10 rewarded ads in lifetime
publisherSignals.Add("ctr_rew", 9.25); // Historical CTR for user is 9.25%
publisherSignals.Add("abp_5_rew", 0.01720); // Average winning bid price for last 5 rewarded auctions was $0.01720, eCPM is $17.2
// example for passing signals in rewarded requests
IMSdk.PutPublisherSignals(publisherSignals);
Use suffixes as ‘ban’, ‘int’, ‘rew’, ‘nat’ for banner, interstitial, rewarded and native ad placements respectively.
Signal | Key(case-sensitive) | Data Type Supported | Allowed values |
Impression depth |
i_dep_(ad_type) e.g. i_dep_ban, i_dep_int, i_dep_rew, etc. |
integer | Total number of ads user has seen in lifetime. |
Paying user | iap | bool | ‘true’ if user has done IAP, else ‘false’ |
The average clearing price for the last n auctions |
abp_10_(ad_type) e.g. abp_10_ban, abp_10_int, abp_10_rew, abp_rew, abp_5_ban, abp_5_int, abp_5_rew |
double | value in USD and the bid values(not cpm). |
Acquisition source | ua_type | string | ‘paid' → if user was acquired using paid advertising, 'organic’ → if user was acquired organically |
Session depth |
s_dep_(ad_type) e.g. s_dep_ban, s_dep_int, etc |
integer | ‘10’, ‘15’, ‘20’, or any integer value based on number of ads the user has seen in the current session. |
User average click-through rate |
ctr_(ad_type) e.g. ctr_ban, ctr_int, etc. |
double | ‘0.5’, ‘5.5', '10’, or any double value between 0 to 100 based on the click-through rate for the user. |
User average view-through rate |
vcr_(ad_type) e.g. vcr_ban, vcr_int, etc. |
double | ‘0.5’, ‘5.5', '10’, or any double value between 0 to 100 based on the view-through rates for the user. |
Purchasing user cohort | iap_type | string | Applicable only when iapis set to true and based on in-app purchase value.
'minnow'(<$5), 'dolphin'(>$5 & <=$10), 'shark'(>$10 & <=$50), 'whale'(>$50) |
Ad user cohort | iaa_type | string |
Based on the number of full-screen or rewarded ads seen by the user. ‘minnow'(<5 ads), ‘dolphin'(>5 & <=10), ‘shark'(>10 & <=25), 'whale'(>25) |
The supported data types is applicable only when passing signals using putPublisherSignals
method. The setExtras
method expects all values to be passed as string only.
If available, you can also signal users age and gender to InMobi SDK. These signals help in campaign targeting and generate better yield. Ensure InMobi SDK is initialized before calling the following functions.
InMobiSdk.setGender(InMobiSdk.Gender.MALE) // or InMobiSdk.Gender.FEMALE
InMobiSdk.setAge(age)
InMobiSdk.setAgeGroup(InMobiSdk.AgeGroup.BELOW_18)
InMobiSdk.setGender(InMobiSdk.Gender.MALE); // or InMobiSdk.Gender.FEMALE
InMobiSdk.setAge(age);
InMobiSdk.setAgeGroup(InMobiSdk.AgeGroup.BELOW_18); // other enums: BETWEEN_18_AND_20, BETWEEN_21_AND_24, BETWEEN_25_AND_34 // BETWEEN_35_AND_5, ABOVE_55
IMSdk.setGender(.female)
IMSdk.setAge(28)
IMSdk.setAgeGroup(.between25And29)
By installing this SDK update, you agree that your Children Privacy Compliance setting remains accurate or that you will update that setting, whenever there is a change in your app's audience. You may update the app's Children Privacy Compliance settings at https://publisher.inmobi.com/my-inventory/app-and-placements.