NoteThis 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 dedicated CSM, contact us through the Airbridge Help Center.
Recommended integration methodWe recommend implementing both S2S integration and SDK integration for more accurate measurement.Make sure to check the version of the SDK you installed before implementing both S2S integration and SDK integration. You must have a certain version or later of the installed SDK to set up all integrations properly. If your SDK version is earlier than the required version, the user count will not be accurately aggregated after integration.Airbridge automatically updates the data received through SDK integration in real-time with the enriched data received through S2S integration. The data received through SDK integration can also be used to set up SKAN conversion values.
Prerequisite
Check the Airbridge SDK version installed in the app. If it is earlier than the versions listed below, proceed with only S2S integration or SDK integration.AttentionIf you want to proceed with both S2S and SDK integrations, make sure the Airbridge SDK version installed in the app meets the requirements.It is advised to proceed with the integrations once a sufficient number of users have updated their app to the version with the required Airbridge SDK version. If most of your users still have the app with the Airbridge SDK version earlier than the required version, the user count may not be accurately aggregated in Airbridge.
- Android SDK 2.25.0
- iOS SDK 1.37.3
- React Native SDK 2.8.6
- Flutter SDK 3.5.6
- Cordova SDK 2.6.6
- Expo SDK 2.6.6
- Unity SDK 1.14.5
- Unreal SDK 1.3.5
SDK Integration
Click the link below and install the ironSource SDK.- ironSource Android SDK install guide
- ironSource iOS SDK install guide
- ironSource Unity SDK install guide
SDK integration (Android)
SDK integration (Android)
Android SDK
override fun onImpressionSuccess(impressionData: ImpressionData) {
if (impressionData != null) {
Airbridge.trackEvent(
AirbridgeCategory.AD_IMPRESSION,
mapOf(
AirbridgeAttribute.ACTION to impressionData.adNetwork,
AirbridgeAttribute.LABEL to impressionData.placement,
AirbridgeAttribute.VALUE to impressionData.revenue,
AirbridgeAttribute.AD_PARTNERS to mapOf(
// optional fields
"ironSource" to mapOf(
"auction_id" to impressionData.auctionId,
"ad_unit" to impressionData.adUnit,
"ad_network" to impressionData.adNetwork,
"instance_name" to impressionData.instanceName,
"instance_id" to impressionData.instanceId,
"country" to impressionData.country,
"placement" to impressionData.placement,
"revenue" to impressionData.revenue,
"precision" to impressionData.precision,
"ab" to impressionData.ab,
"segment_name" to impressionData.segmentName,
"lifetime_revenue" to impressionData.lifetimeRevenue,
"encrypted_cpm" to impressionData.encryptedCPM
)
),
// ironSource has a default currency of USD
AirbridgeAttribute.CURRENCY to "USD"
)
)
}
}
@Override
public void onImpressionSuccess(ImpressionData impressionData) {
if (impressionData != null) {
Airbridge.trackEvent(
AirbridgeCategory.AD_IMPRESSION,
new HashMap() {{
put(AirbridgeAttribute.ACTION, impressionData.getAdNetwork());
put(AirbridgeAttribute.LABEL, impressionData.getPlacement());
put(AirbridgeAttribute.VALUE, impressionData.getRevenue());
put(AirbridgeAttribute.AD_PARTNERS, new HashMap() {{
put("ironSource", new HashMap() {{
// optional fields
put("auction_id", impressionData.getAuctionId());
put("ad_unit", impressionData.getAdUnit());
put("ad_network", impressionData.getAdNetwork());
put("instance_name", impressionData.getInstanceName());
put("instance_id", impressionData.getInstanceId());
put("country", impressionData.getCountry());
put("placement", impressionData.getPlacement());
put("revenue", impressionData.getRevenue());
put("precision", impressionData.getPrecision());
put("ab", impressionData.getAb());
put("segment_name", impressionData.getSegmentName());
put("lifetime_revenue", impressionData.getLifetimeRevenue());
put("encrypted_cpm", impressionData.getEncryptedCPM());
}});
}});
// ironSource has a default currency of USD
put(AirbridgeAttribute.CURRENCY, "USD");
}}
);
}
}
Android SDK (Deprecated)
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,
// ironSource has a default currency of USD
"currency" to "USD"
)
Airbridge.trackEvent(event)
}
}
@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);
}
}
SDK integration (iOS)
SDK integration (iOS)
iOS SDK
import AirBridge
import IronSource
class ISImpressionDataManager: NSObject, ISImpressionDataDelegate {
func impressionDataDidSucceed(_ impressionData: ISImpressionData!) {
if let impressionData = impressionData {
var ironSource: [String: Any] = [:]
Airbridge.trackEvent(
category: AirbridgeCategory.AD_IMPRESSION,
semanticAttributes: [
AirbridgeAttribute.ACTION: impressionData.ad_network,
AirbridgeAttribute.LABEL: impressionData.placement,
AirbridgeAttribute.VALUE: impressionData.revenue,
AirbridgeAttribute.AD_PARTNERS: [
"ironSource": [
// optional fields
"auction_id": impressionData.auction_id,
"ad_unit": impressionData.ad_unit,
"ad_network": impressionData.ad_network,
"instance_name": impressionData.instance_name,
"instance_id": impressionData.instance_id,
"country": impressionData.country,
"placement": impressionData.placement,
"revenue": impressionData.revenue,
"precision": impressionData.precision,
"ab": impressionData.ab,
"segment_name": impressionData.segment_name,
"lifetime_revenue": impressionData.lifetime_revenue,
"encrypted_cpm": impressionData.encrypted_cpm
]
],
// ironSource has a default currency of USD
AirbridgeAttribute.CURRENCY: "USD"
]
)
}
}
}
#import "AirBridge.h"
#import "ISImpressionDataManager.h"
@interface ISImpressionDataManager () <ISImpressionDataDelegate>
@end
@implementation ISImpressionDataManager
- (void)impressionDataDidSucceed:(ISImpressionData *)impressionData {
if (impressionData) {
NSMutableDictionary *ironSource = [NSMutableDictionary dictionary];
[Airbridge trackEventWithCategory:AirbridgeCategory.AD_IMPRESSION semanticAttributes:@{
AirbridgeAttribute.ACTION: impressionData.ad_network,
AirbridgeAttribute.LABEL: impressionData.placement,
AirbridgeAttribute.VALUE: impressionData.revenue,
AirbridgeAttribute.AD_PARTNERS: @{
@"ironSource": @{
// optional fields
@"auction_id": impressionData.auction_id;
@"ad_unit": impressionData.ad_unit;
@"ad_network": impressionData.ad_network;
@"instance_name": impressionData.instance_name;
@"instance_id": impressionData.instance_id;
@"country": impressionData.country;
@"placement": impressionData.placement;
@"revenue": impressionData.revenue;
@"precision": impressionData.precision;
@"ab": impressionData.ab;
@"segment_name": impressionData.segment_name;
@"lifetime_revenue": impressionData.lifetime_revenue;
@"encrypted_cpm": impressionData.encrypted_cpm;
}
},
// ironSource has a default currency of USD
@"currency": @"USD"
}];
}
}
@end
iOS SDK (Deprecated)
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
SDK integration (Unity)
SDK integration (Unity)
Unity SDK
IronSourceEvents.onImpressionDataReadyEvent += ImpressionDataReadyEvent;
private void ImpressionDataReadyEvent(IronSourceImpressionData impressionData)
{
if (impressionData != null)
{
Airbridge.TrackEvent(
category: AirbridgeCategory.AD_IMPRESSION,
semanticAttributes: new Dictionary<string, object>()
{
{ AirbridgeAttribute.ACTION, impressionData.adNetwork },
{ AirbridgeAttribute.LABEL, impressionData.placement },
{ AirbridgeAttribute.VALUE, impressionData.revenue ?? 0 },
{
AirbridgeAttribute.AD_PARTNERS, new Dictionary<string, object>()
{
{
"ironSource", new Dictionary<string, object>()
{
// optional fields
{ "auction_id", impressionData.auctionId },
{ "ad_unit", impressionData.adUnit },
{ "ad_network", impressionData.adNetwork },
{ "instance_name", impressionData.instanceName },
{ "instance_id", impressionData.instanceId },
{ "country", impressionData.country },
{ "placement", impressionData.placement },
{ "revenue", impressionData.revenue },
{ "precision", impressionData.precision },
{ "ab", impressionData.ab },
{ "segment_name", impressionData.segmentName },
{ "lifetime_revenue", impressionData.lifetimeRevenue },
{ "encrypted_cpm", impressionData.encryptedCPM }
}
}
}
},
// ironSource has a default currency of USD
{ AirbridgeAttribute.CURRENCY, "USD" }
}
);
}
}
Unity SDK (Deprecated)
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);
}
}