알립니다이 기능은 베타 서비스입니다. 문의사항은 에어브릿지 CSM을 통해 전달해 주세요. 담당 CSM이 없는 경우 문의하기를 통해 전달해 주세요.
권장하는 연동 방식더 정확한 광고 성과 측정과 활용을 위해 서버 투 서버 연동과 SDK 연동을 모두 설정하는 것을 권장합니다.에어브릿지는 SDK 연동으로 실시간으로 받은 데이터를 서버 투 서버 연동으로 받은 보정된 데이터로 자동 업데이트합니다. 또한 SDK 연동으로 받은 데이터는 SKAdNetwork(SKAN)에 활용할 수 있습니다.
준비하기
에어브릿지 SDK가 아래 버전 이상인지 확인해 주세요. 확인 시점에 에어브릿지 SDK가 아래 버전 미만이라면 서버 투 서버 연동 또는 SDK 연동 중에 1가지만 진행하는 것을 권장합니다.주의하세요서버 투 서버 연동과 SDK 연동을 모두 진행한다면 에어브릿지 SDK가 아래 버전 이상인지 반드시 확인해 주세요.충분히 많은 유저가 아래 버전 이상의 SDK가 설치된 앱으로 업데이트한 후에 모든 연동을 진행하는 것을 권장합니다. 아래 버전 미만의 에어브릿지 SDK가 설치된 앱을 사용하는 유저가 대부분일 때 서버 투 서버 연동과 SDK 연동을 모두 진행하면 유저 수가 정확히 집계되지 않습니다.
- 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 연동하기
아래 링크에 따라 아이언소스 SDK를 설치해 주세요.에어브릿지로 광고 수익 데이터 전송하기
유니티 레벨플레이(아이언소스)에서 발생한 광고 수익 데이터를 에어브릿지로 전송합니다. 아이언소스 SDK에 광고 수익 데이터 콜백을 설정합니다. 해당 콜백을 활용하여 광고 수익 데이터를 에어브릿지 SDK로 전송합니다.SDK 연동하기 (Android)
SDK 연동하기 (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 연동하기 (iOS)
SDK 연동하기 (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 연동하기 (Unity)
SDK 연동하기 (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);
}
}