Note
This feature is currently in beta. If you have any questions or suggestions for improvements, reach out to your Airbridge CSM. If you don't have a designated CSM, contact the Airbridge Help Center.
Airbridge supports server-to-server (S2S) and SDK integration with Unkity LevelPlay (ironSource). With the integration, you can import the ad revenue into Airbridge.
Recommended integration method
We recommend implementing both S2S integration and SDK integration for more accurate measurement.
Make sure to check the version of the SDK you initially installed before implementing both S2S integration and SDK integration. You must have a certain version or later of the initially installed SDK to set up all integrations properly. If your SDK version is earlier than the required version, the number of users may not be accurately counted after integration.
Airbridge automatically updates the data received in real-time through SDK integration with the enriched data received through S2S integration. Also, the data received through SDK integration can be used for SKAN conversion value setup.
Click the link below and install the ironSource SDK.
Configure the ad revenue data callback to send the ad revenue data to the Airbridge SDK.
IronSourceEvents.onImpressionDataReadyEvent += ImpressionDataReadyEvent;
private void ImpressionDataReadyEvent(IronSourceImpressionData impressionData)
{
if (impressionData != null)
{
AirbridgeEvent @event = new AirbridgeEvent("airbridge.adImpression");
var ironSource = new Dictionary<string, object>();
// optional fields
ironSource["auction_id"] = impressionData.auctionId;
ironSource["ad_unit"] = impressionData.adUnit;
ironSource["ad_network"] = impressionData.adNetwork;
ironSource["instance_name"] = impressionData.instanceName;
ironSource["instance_id"] = impressionData.instanceId;
ironSource["country"] = impressionData.country;
ironSource["placement"] = impressionData.placement;
ironSource["revenue"] = impressionData.revenue;
ironSource["precision"] = impressionData.precision;
ironSource["ab"] = impressionData.ab;
ironSource["segment_name"] = impressionData.segmentName;
ironSource["lifetime_revenue"] = impressionData.lifetimeRevenue;
ironSource["encrypted_cpm"] = impressionData.encryptedCPM;
var adPartners = new Dictionary<string, object>();
adPartners["ironSource"] = ironSource;
@event.SetAction(impressionData.adNetwork);
@event.SetLabel(impressionData.placement);
@event.SetValue(impressionData.revenue ?? 0);
@event.AddSemanticAttribute("adPartners", adPartners);
// ironSource has a default currency of USD
@event.AddSemanticAttribute("currency", "USD");
AirbridgeUnity.TrackEvent(@event);
}
}
import AirBridge
import IronSource
class ISImpressionDataManager: NSObject, ISImpressionDataDelegate {
func impressionDataDidSucceed(_ impressionData: ISImpressionData!) {
if let impressionData = impressionData {
var ironSource: [String: Any] = [:]
// optional fields
ironSource["auction_id"] = impressionData.auction_id
ironSource["ad_unit"] = impressionData.ad_unit
ironSource["ad_network"] = impressionData.ad_network
ironSource["instance_name"] = impressionData.instance_name
ironSource["instance_id"] = impressionData.instance_id
ironSource["country"] = impressionData.country
ironSource["placement"] = impressionData.placement
ironSource["revenue"] = impressionData.revenue
ironSource["precision"] = impressionData.precision
ironSource["ab"] = impressionData.ab
ironSource["segment_name"] = impressionData.segment_name
ironSource["lifetime_revenue"] = impressionData.lifetime_revenue
ironSource["encrypted_cpm"] = impressionData.encrypted_cpm
var adPartners: [String: Any] = [:]
adPartners["ironSource"] = ironSource
var semanticAttributes: [String: Any] = [:]
semanticAttributes["adPartners"] = adPartners
// ironSource has a default currency of USD
semanticAttributes["currency"] = "USD"
guard let event = ABInAppEvent() else { return }
event.setCategory("airbridge.adImpression")
event.setAction(impressionData.ad_network)
event.setLabel(impressionData.placement)
event.setValue(impressionData.revenue)
event.setSemantics(semanticAttributes)
event.send()
}
}
}
#import "AirBridge.h"
#import "ISImpressionDataManager.h"
@interface ISImpressionDataManager () <ISImpressionDataDelegate>
@end
@implementation ISImpressionDataManager
- (void)impressionDataDidSucceed:(ISImpressionData *)impressionData {
if (impressionData) {
NSMutableDictionary *ironSource = [NSMutableDictionary dictionary];
// optional fields
ironSource[@"auction_id"] = impressionData.auction_id;
ironSource[@"ad_unit"] = impressionData.ad_unit;
ironSource[@"ad_network"] = impressionData.ad_network;
ironSource[@"instance_name"] = impressionData.instance_name;
ironSource[@"instance_id"] = impressionData.instance_id;
ironSource[@"country"] = impressionData.country;
ironSource[@"placement"] = impressionData.placement;
ironSource[@"revenue"] = impressionData.revenue;
ironSource[@"precision"] = impressionData.precision;
ironSource[@"ab"] = impressionData.ab;
ironSource[@"segment_name"] = impressionData.segment_name;
ironSource[@"lifetime_revenue"] = impressionData.lifetime_revenue;
ironSource[@"encrypted_cpm"] = impressionData.encrypted_cpm;
NSMutableDictionary *adPartners = [NSMutableDictionary dictionary];
adPartners[@"ironSource"] = ironSource;
NSMutableDictionary *semanticAttributes = [NSMutableDictionary dictionary];
semanticAttributes[@"adPartners"] = adPartners;
// ironSource has a default currency of USD
semanticAttributes[@"currency"] = @"USD";
ABInAppEvent *event = [[ABInAppEvent alloc] init];
[event setCategory:@"airbridge.adImpression"];
[event setAction:impressionData.ad_network];
[event setLabel:impressionData.placement];
[event setValue:impressionData.revenue];
[event setSemantics:semanticAttributes];
[event send];
}
}
@end
@Override
public void onImpressionSuccess(ImpressionData impressionData) {
if (impressionData != null) {
Event event = new Event("airbridge.adImpression");
Map<String, Object> ironSource = new HashMap<>();
// optional fields
ironSource.put("auction_id", impressionData.getAuctionId());
ironSource.put("ad_unit", impressionData.getAdUnit());
ironSource.put("ad_network", impressionData.getAdNetwork());
ironSource.put("instance_name", impressionData.getInstanceName());
ironSource.put("instance_id", impressionData.getInstanceId());
ironSource.put("country", impressionData.getCountry());
ironSource.put("placement", impressionData.getPlacement());
ironSource.put("revenue", impressionData.getRevenue());
ironSource.put("precision", impressionData.getPrecision());
ironSource.put("ab", impressionData.getAb());
ironSource.put("segment_name", impressionData.getSegmentName());
ironSource.put("lifetime_revenue", impressionData.getLifetimeRevenue());
ironSource.put("encrypted_cpm", impressionData.getEncryptedCPM());
Map<String, Object> adPartners = new HashMap<>();
adPartners.put("ironSource", ironSource);
Map<String, Object> semanticAttributes = new HashMap<>();
semanticAttributes.put("adPartners", adPartners);
// ironSource has a default currency of USD
semanticAttributes.put("currency", "USD");
event.setAction(impressionData.getAdNetwork());
event.setLabel(impressionData.getPlacement());
event.setValue(impressionData.getRevenue());
event.setSemanticAttributes(semanticAttributes);
Airbridge.trackEvent(event);
}
}
override fun onImpressionSuccess(impressionData: ImpressionData?) {
if (impressionData != null) {
val event = Event("airbridge.adImpression")
val ironSource = mutableMapOf<String, Any?>()
// optional fields
ironSource["auction_id"] = impressionData.auctionId
ironSource["ad_unit"] = impressionData.adUnit
ironSource["ad_network"] = impressionData.adNetwork
ironSource["instance_name"] = impressionData.instanceName
ironSource["instance_id"] = impressionData.instanceId
ironSource["country"] = impressionData.country
ironSource["placement"] = impressionData.placement
ironSource["revenue"] = impressionData.revenue
ironSource["precision"] = impressionData.precision
ironSource["ab"] = impressionData.ab
ironSource["segment_name"] = impressionData.segmentName
ironSource["lifetime_revenue"] = impressionData.lifetimeRevenue
ironSource["encrypted_cpm"] = impressionData.encryptedCPM
val adPartners = mapOf("ironSource" to ironSource)
event.action = impressionData.adNetwork
event.label = impressionData.placement
event.value = impressionData.revenue
event.semanticAttributes = mutableMapOf(
"adPartners" to adPartners,
"currency" to "USD" // ironSource has a default currency of USD
)
Airbridge.trackEvent(event)
}
}
To implement the S2S integration, you need to enter the Secret Key and Refresh Token provided by Unity LevelPlay into the Airbridge dashboard.
For more detailed instructions, refer to the article below.
Was this page helpful?