Unity LevelPlay Mediation(구 ironSource) 광고 수익 연동

Unity LevelPlay Mediation(구 ironSource) 광고 수익 연동을 진행하면 Unity LevelPlay Mediation을 통해서 획득한 광고 수익 데이터를 수집하고, 해당 데이터를 Airbridge Dashboard 에서 Attribution, User 별로 나누어 확인할 수 있습니다.

Unity LevelPlay Mediation 광고 수익 연동은 Unity LevelPlay Mediation 광고 수익 데이터를 ironSource SDK를 통해 받아와서 Airbridge SDK에 전달하는 방식으로 이루어집니다.

ironSource SDK 설치

Unity LevelPlay Mediation 광고 수익 데이터를 에어브릿지로 전달

ironSource SDK를 이용해서 광고 수익 데이터 콜백을 설정하고, 이를 이용해서 광고 수익 데이터를 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) } }