Unity LevelPlay (ironSource)

    お知らせ

    この機能はBetaサービスです。改善のためのご意見やお問い合わせはAirbridge CSMまでお願いします。正式サービスではより良い機能を実装できるよう努めてまいります。

    Airbridge supports server-to-server (S2S) and SDK integration with Unity LevelPlay (ironSource). With the integration, you can import the ad revenue into Airbridge.

    We 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.

    Attention

    If 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.

    Configure the ad revenue data callback to send the ad revenue data to the Airbridge SDK.

    Android SDK (v4)

    123456789101112131415161718192021222324252627282930313233
    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"
                )
            )
        }
    }
    12345678910111213141516171819202122232425262728293031323334
    @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 (Previous)

    1234567891011121314151617181920212223242526272829303132333435
    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)
        }
    }
    
    1234567891011121314151617181920212223242526272829303132333435363738
    @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);
        }
    }

    iOS SDK (v4)

    123456789101112131415161718192021222324252627282930313233343536373839
    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"
                    ]
                )
            }
        }
    }
    1234567891011121314151617181920212223242526272829303132333435363738394041
    #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 (Previous)

    12345678910111213141516171819202122232425262728293031323334353637383940414243
    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()
            }
        }
    }
    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
    #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

    Unity SDK (v4)

    12345678910111213141516171819202122232425262728293031323334353637383940414243
    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 (Previous)

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

    S2S Integration

    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.