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)
	}
}