Yandex Mobile Ads

    お知らせ

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

    Airbridge supports SDK integration with Yandex Mobile Ads. With the integration, you can import the ad revenue into Airbridge.

    SDK Integration

    Click the link below and install theYandex Mobile Ads SDK.

    Send Yandex Mobile Ad revenue data to Airbridge

    The impression-level ad revenue should be enabled in Yandex Mobile Ads to send ad revenue data to Airbridge. Refer to the following article on enabling impression-level ad revenue.

    Android SDK (v4)

    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
    data class ImpressionDataModel(
        val ad_unit_id: String,
        val adType: String,
        val currency: String,
        val revenue: String,
        val revenueUSD: String,
        val precision: String,
        val network: NetworkData
    )
    
    data class NetworkData(
        val name: String,
        val ad_unit_id: String
    )
    
    
    class ExampleNativeAdEventListener : NativeAdEventListener {
        // ...
        override fun onImpression(data: ImpressionData?) {
            val impressionData = data?.rawData?.let {
                try {
                    Gson().fromJson(it, ImpressionDataModel::class.java)
                } catch (_: Throwable) {
                    null
                }
            } ?: return
    
            Airbridge.trackEvent(
                AirbridgeCategory.AD_IMPRESSION, mutableMapOf(
                    AirbridgeAttribute.ACTION to impressionData.network.name,
                    AirbridgeAttribute.LABEL to impressionData.adType,
                    AirbridgeAttribute.VALUE to impressionData.revenue.toDoubleOrNull(),
                    AirbridgeAttribute.CURRENCY to impressionData.currency,
                    AirbridgeAttribute.AD_PARTNERS to mapOf(
                        "yandex" to mapOf(
                            "revenue" to impressionData.revenue,
                            "revenue_usd" to impressionData.revenueUSD,
                            "precision" to impressionData.precision,
                            "ad_unit_id" to impressionData.ad_unit_id,
                            "ad_network" to impressionData.network.name,
                            "ad_network_ad_unit_id" to impressionData.network.ad_unit_id,
                        )
                    )
                )
            )
        }
        // ...
    }
    12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
    public class ExampleNativeAdEventListener implements NativeAdEventListener {
        class ImpressionDataModel {
            String ad_unit_id;
            String adType;
            String currency;
            String revenue;
            String revenueUSD;
            String precision;
            NetworkData network;
        }
    
        class NetworkData {
            String name;
            String ad_unit_id;
        }
    
        @Override
        public void onImpression(@Nullable ImpressionData data) {
            if (data == null || data.getRawData() == null) {
                return;
            }
            ImpressionDataModel impressionData;
            try {
                impressionData = new Gson().fromJson(data.getRawData(), ImpressionDataModel.class);
            } catch (Throwable throwable) {
                return;
            }
    
            Airbridge.trackEvent(
                    AirbridgeCategory.AD_IMPRESSION,
                    new HashMap<String, Object>() {{
                        put(AirbridgeAttribute.ACTION, impressionData.network.name);
                        put(AirbridgeAttribute.LABEL, impressionData.adType);
                        try {
                            put(AirbridgeAttribute.VALUE, Double.parseDouble(impressionData.revenue));
                        } catch (NumberFormatException e) {
                            // Handle exception
                        }
                        put(AirbridgeAttribute.CURRENCY, impressionData.currency);
                        put(AirbridgeAttribute.AD_PARTNERS, new HashMap<String, Object>() {{
                            put("yandex", new HashMap<String, Object>() {{
                                put("revenue", impressionData.revenue);
                                put("revenue_usd", impressionData.revenueUSD);
                                put("precision", impressionData.precision);
                                put("ad_unit_id", impressionData.ad_unit_id);
                                put("ad_network", impressionData.network.name);
                                put("ad_network_ad_unit_id", impressionData.network.ad_unit_id);
                            }});
                        }});
                    }});
        }
    }

    Android SDK (Previous)

    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
    data class ImpressionDataModel(
        val ad_unit_id: String,
        val adType: String,
        val currency: String,
        val revenue: String,
        val revenueUSD: String,
        val precision: String,
        val network: NetworkData
    )
    
    data class NetworkData(
        val name: String,
        val ad_unit_id: String
    )
    
    
    class ExampleNativeAdEventListener : NativeAdEventListener {
        // ...
        override fun onImpression(data: ImpressionData?) {
            val impressionData = data?.rawData?.let {
                try {
                    Gson().fromJson(it, ImpressionDataModel::class.java)
                } catch (_: Throwable) {
                    null
                }
            } ?: return
    
            val event = Event("airbridge.adImpression")
            val yandex = mutableMapOf<String, Any?>()
            yandex["revenue"] = impressionData.revenue
            yandex["revenue_usd"] = impressionData.revenueUSD
            yandex["precision"] = impressionData.precision
            yandex["ad_unit_id"] = impressionData.ad_unit_id
            yandex["ad_network"] = impressionData.network.name
            yandex["ad_network_ad_unit_id"] = impressionData.network.ad_unit_id
    
            val adPartners = mapOf("yandex" to yandex)
            event.action = impressionData.network.name
            event.label = impressionData.adType
            impressionData.revenue.toDoubleOrNull()?.let {
                event.value = it
            }
            event.semanticAttributes = mutableMapOf(
                "adPartners" to adPartners,
                "currency" to impressionData.currency
            )
    
            Airbridge.trackEvent(event)
        }
        // ...
    }
    12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
    public class ExampleNativeAdEventListener implements NativeAdEventListener {
        class ImpressionDataModel {
            String ad_unit_id;
            String adType;
            String currency;
            String revenue;
            String revenueUSD;
            String precision;
            NetworkData network;
        }
    
        class NetworkData {
            String name;
            String ad_unit_id;
        }
    
        @Override
        public void onImpression(@Nullable ImpressionData data) {
            if (data == null || data.getRawData() == null) {
                return;
            }
            ImpressionDataModel impressionData;
            try {
                impressionData = new Gson().fromJson(data.getRawData(), ImpressionDataModel.class);
            } catch (Throwable throwable) {
                return;
            }
    
            Event event = new Event("airbridge.adImpression");
            Map<String, Object> yandex = new HashMap<>();
            yandex.put("revenue", impressionData.revenue);
            yandex.put("revenue_usd", impressionData.revenueUSD);
            yandex.put("precision", impressionData.precision);
            yandex.put("ad_unit_id", impressionData.ad_unit_id);
            yandex.put("ad_network", impressionData.network.name);
            yandex.put("ad_network_ad_unit_id", impressionData.network.ad_unit_id);
    
            Map<String, Object> adPartners = new HashMap<>();
            adPartners.put("yandex", yandex);
    
            Map<String, Object> semanticAttributes = new HashMap<>();
            semanticAttributes.put("adPartners", adPartners);
            semanticAttributes.put("currency", impressionData.currency);
    
            event.setAction(impressionData.network.name);
            event.setLabel(impressionData.adType);
            try {
                event.setValue(Double.parseDouble(impressionData.revenue));
            } catch (NumberFormatException e) {
                // Handle exception
            }
            event.setSemanticAttributes(semanticAttributes);
            Airbridge.trackEvent(event);
        }
    }

    iOS SDK (v4)

    12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
    struct NetworkData: Decodable {
    	let name: String
    	let ad_unit_id: String
    }
    struct ImpressionDataModel: Decodable {
    	let ad_unit_id: String
    	let adType: String
    	let currency: String
    	let revenue: String
    	let revenueUSD: String
    	let precision: String
    	let network: NetworkData
    }
    
    extension ViewController: AdViewDelegate {
    	// ...
    	func adView(_ adView: AdView, didTrackImpressionWith impressionData: ImpressionData?) {
    		guard
    			let raw = impressionData?.rawData,
    			let jsonData = raw.data(using: .utf8)
    		else {
    			return
    		}
    		
    		do {
    			let parsedData = try JSONDecoder().decode(ImpressionDataModel.self, from: jsonData)
    
    			var semanticAttributes: [String: Any] = [
    				AirbridgeAttribute.ACTION: parsedData.network.name,
    				AirbridgeAttribute.LABEL: parsedData.adType,
    				AirbridgeAttribute.CURRENCY: parsedData.currency,
    				AirbridgeAttribute.AD_PARTNERS: [
    					"yandex": [
    						"revenue": parsedData.revenue,
    						"revenue_usd": parsedData.revenueUSD,
    						"precision": parsedData.ad_unit_id,
    						"ad_unit_id": parsedData.network.ad_unit_id,
    						"ad_network": parsedData.network.name,
    						"ad_network_ad_unit_id": parsedData.precision
    					]
    				]
    			]
    			if let value = Double(parsedData.revenue) {
    				semanticAttributes[AirbridgeAttribute.VALUE] = value
    			}
    
    			Airbridge.trackEvent(
    				category: AirbridgeCategory.AD_IMPRESSION,
    				semanticAttributes: semanticAttributes
    			)
    		} catch {
    			print("Failed to parse JSON: \(error.localizedDescription)")
    		}
    	}
    }
    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
    @interface NetworkData : NSObject
    @property (nonatomic, strong) NSString *name;
    @property (nonatomic, strong) NSString *ad_unit_id;
    @end
    
    @implementation NetworkData
    @end
    
    @interface ImpressionDataModel : NSObject
    @property (nonatomic, strong) NSString *ad_unit_id;
    @property (nonatomic, strong) NSString *adType;
    @property (nonatomic, strong) NSString *currency;
    @property (nonatomic, strong) NSString *revenue;
    @property (nonatomic, strong) NSString *revenueUSD;
    @property (nonatomic, strong) NSString *precision;
    @property (nonatomic, strong) NetworkData *network;
    @end
    
    @implementation ImpressionDataModel
    @end
    
    @implementation ViewController
    
    - (void)adView:(AdView *)adView didTrackImpressionWith:(ImpressionData *)impressionData {
        NSString *raw = impressionData.rawData;
        if (!raw) return;
    
        NSData *jsonData = [raw dataUsingEncoding:NSUTF8StringEncoding];
        if (!jsonData) return;
    
        NSError *error;
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
    
        if (error) {
            NSLog(@"Failed to parse JSON: %@", error.localizedDescription);
            return;
        }
    
        ImpressionDataModel *parsedData = [[ImpressionDataModel alloc] init];
        parsedData.ad_unit_id = dict[@"ad_unit_id"];
        parsedData.adType = dict[@"adType"];
        parsedData.currency = dict[@"currency"];
        parsedData.revenue = dict[@"revenue"];
        parsedData.revenueUSD = dict[@"revenueUSD"];
        parsedData.precision = dict[@"precision"];
        
        NSDictionary *networkDict = dict[@"network"];
        if ([networkDict isKindOfClass:[NSDictionary class]]) {
            NetworkData *network = [[NetworkData alloc] init];
            network.name = networkDict[@"name"];
            network.ad_unit_id = networkDict[@"ad_unit_id"];
            parsedData.network = network;
        }
    
        NSMutableDictionary *semanticAttributes = [NSMutableDictionary dictionary];
        semanticAttributes[AirbridgeAttribute.ACTION] = parsedData.network.name;
        semanticAttributes[AirbridgeAttribute.LABEL] = parsedData.adType;
        double revenueValue = [parsedData.revenue doubleValue];
        if (revenueValue > 0) {
            semanticAttributes[AirbridgeAttribute.VALUE] = revenueValue;
        }
        semanticAttributes[AirbridgeAttribute.CURRENCY] = parsedData.currency;
        semanticAttributes[AirbridgeAttribute.AD_PARTNERS] = @{
            @"yandex": @{
                @"revenue": parsedData.revenue,
                @"revenue_usd": parsedData.revenueUSD,
                @"precision": parsedData.ad_unit_id,
                @"ad_unit_id": parsedData.network.ad_unit_id,
                @"ad_network": parsedData.network.name,
                @"ad_network_ad_unit_id": parsedData.precision
            }
        }
        [Airbridge trackEventWithCategory:AirbridgeCategory.AD_IMPRESSION 
                   semanticAttributes:semanticAttributes];
    }
    
    @end

    iOS SDK (Previous)

    12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
    struct NetworkData: Decodable {
    	let name: String
    	let ad_unit_id: String
    }
    struct ImpressionDataModel: Decodable {
    	let ad_unit_id: String
    	let adType: String
    	let currency: String
    	let revenue: String
    	let revenueUSD: String
    	let precision: String
    	let network: NetworkData
    }
    
    
    extension ViewController: AdViewDelegate {
    	// ...
    	func adView(_ adView: AdView, didTrackImpressionWith impressionData: ImpressionData?) {
    		guard
    			let raw = impressionData?.rawData,
    			let jsonData = raw.data(using: .utf8)
    		else {
    			return
    		}
    		
    		do {
    			let parsedData = try JSONDecoder().decode(ImpressionDataModel.self, from: jsonData)
    		
    			let event = ABInAppEvent()
    			event?.setCategory("airbridge.adImpression")
    			event?.setAction(parsedData.network.name)
    			event?.setLabel(parsedData.adType)
    			if let value = Double(parsedData.revenue) {
    				event?.setValue(value)
    			}
    			event?.setSemantics([
    				"adPartners": [
    					"yandex": [
    						"revenue": parsedData.revenue,
    						"revenue_usd": parsedData.revenueUSD,
    						"precision": parsedData.ad_unit_id,
    						"ad_unit_id": parsedData.network.ad_unit_id,
    						"ad_network": parsedData.network.name,
    						"ad_network_ad_unit_id": parsedData.precision
    					]
    				],
    				"currency": parsedData.currency
    			])
    
    			event?.send()
    		} catch {
    			print("Failed to parse JSON: \(error.localizedDescription)")
    		}
    	}
    }
    12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
    @interface NetworkData : NSObject
    @property (nonatomic, strong) NSString *name;
    @property (nonatomic, strong) NSString *ad_unit_id;
    @end
    
    @implementation NetworkData
    @end
    
    @interface ImpressionDataModel : NSObject
    @property (nonatomic, strong) NSString *ad_unit_id;
    @property (nonatomic, strong) NSString *adType;
    @property (nonatomic, strong) NSString *currency;
    @property (nonatomic, strong) NSString *revenue;
    @property (nonatomic, strong) NSString *revenueUSD;
    @property (nonatomic, strong) NSString *precision;
    @property (nonatomic, strong) NetworkData *network;
    @end
    
    @implementation ImpressionDataModel
    @end
    
    @implementation ViewController
    
    - (void)adView:(AdView *)adView didTrackImpressionWith:(ImpressionData *)impressionData {
        NSString *raw = impressionData.rawData;
        if (!raw) return;
    
        NSData *jsonData = [raw dataUsingEncoding:NSUTF8StringEncoding];
        if (!jsonData) return;
    
        NSError *error;
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
    
        if (error) {
            NSLog(@"Failed to parse JSON: %@", error.localizedDescription);
            return;
        }
    
        ImpressionDataModel *parsedData = [[ImpressionDataModel alloc] init];
        parsedData.ad_unit_id = dict[@"ad_unit_id"];
        parsedData.adType = dict[@"adType"];
        parsedData.currency = dict[@"currency"];
        parsedData.revenue = dict[@"revenue"];
        parsedData.revenueUSD = dict[@"revenueUSD"];
        parsedData.precision = dict[@"precision"];
        
        NSDictionary *networkDict = dict[@"network"];
        if ([networkDict isKindOfClass:[NSDictionary class]]) {
            NetworkData *network = [[NetworkData alloc] init];
            network.name = networkDict[@"name"];
            network.ad_unit_id = networkDict[@"ad_unit_id"];
            parsedData.network = network;
        }
        
        ABInAppEvent* event = [[ABInAppEvent alloc] init];
    	[event setCategory:@"airbridge.adImpression"];
    	[event setAction:parsedData.network.name];
    	[event setLabel:parsedData.adType];
        double revenueValue = [parsedData.revenue doubleValue];
        if (revenueValue > 0) {
            [event setValue:revenueValue];
        }
    	[event setSemantics:@{
    		@"adPartners": @{
    			@"yandex": @{
                    @"revenue": parsedData.revenue,
                    @"revenue_usd": parsedData.revenueUSD,
    				@"precision": parsedData.ad_unit_id,
    				@"ad_unit_id": parsedData.network.ad_unit_id,
    				@"ad_network": parsedData.network.name,
    				@"ad_network_ad_unit_id": parsedData.precision
                }
    		},
    		@"currency": parsedData.currency
    	}];
        [event send];
    }
    
    @end

    Unity SDK (v4)

    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
    [Serializable]
    public class ImpressionDataModel
    {
        public string ad_unit_id;
        public string adType;
        public string currency;
        public string revenue;
        public string revenueUSD;
        public string precision;
        public NetworkData network;
    }
    [Serializable]
    public class NetworkData
    {
        public string name;
        public string ad_unit_id;
    }
    class ExampleNativeAdEventListener : NativeAdEventListener
    {
        // ...
        public void HandleImpression(object sender, ImpressionData impressionData)
        {
            var data = impressionData == null ? "null" : impressionData.rawData;
            try
            {
                var parsedData = Newtonsoft.Json.JsonConvert.DeserializeObject<ImpressionDataModel>(data);
               
                var semanticAttributes = new Dictionary<string, object>()
                {
                    { AirbridgeAttribute.ACTION, parsedData.network.name },
                    { AirbridgeAttribute.LABEL, parsedData.adType },
                    { AirbridgeAttribute.CURRENCY, parsedData.currency },
                    {
                        AirbridgeAttribute.AD_PARTNERS, new Dictionary<string, object>()
                            {
                            "yandex", new Dictionary<string, object>()
                                {
                                    { "revenue", parsedData.revenue },
                                    { "revenue_usd", parsedData.revenueUSD }
                                    { "precision", parsedData.precision },
                                    { "ad_unit_id", parsedData.ad_unit_id },
                                    { "ad_network", parsedData.network.name },
                                    { "ad_network_ad_unit_id", parsedData.network.ad_unit_id }
                                }
                            }
                    }
                }
                if (double.TryParse(parsedData.revenue, out double result))
                {
                    semanticAttributes[AirbridgeAttribute.VALUE] = result;
                }
    
    
                Airbridge.TrackEvent(
                    category: AirbridgeCategory.AD_IMPRESSION,
                    semanticAttributes: semanticAttributes
                );
            }
            catch (Exception ex)
            {
                Debug.LogError($"Error parsing impression data: {ex.Message}");
            }
        }
        //..
    }

    Unity SDK (Previous)

    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
    [Serializable]
    public class ImpressionDataModel
    {
        public string ad_unit_id;
        public string adType;
        public string currency;
        public string revenue;
        public string revenueUSD;
        public string precision;
        public NetworkData network;
    }
    [Serializable]
    public class NetworkData
    {
        public string name;
        public string ad_unit_id;
    }
    class ExampleNativeAdEventListener : NativeAdEventListener
    {
        // ...
        public void HandleImpression(object sender, ImpressionData impressionData)
        {
            var data = impressionData == null ? "null" : impressionData.rawData;
            try
            {
                var parsedData = Newtonsoft.Json.JsonConvert.DeserializeObject<ImpressionDataModel>(data);
               
                AirbridgeEvent @event = new AirbridgeEvent("airbridge.adImpression");
                var yango = new Dictionary<string, object>();
                yango["revenue"] = parsedData.revenue;
                yango["revenue_usd"] = parsedData.revenueUSD;
                yango["precision"] = parsedData.precision;
                yango["ad_unit_id"] = parsedData.ad_unit_id;
                yango["ad_network"] = parsedData.network.name;
                yango["ad_network_ad_unit_id"] = parsedData.network.ad_unit_id;
    
                var adPartners = new Dictionary<string, object>();
                adPartners["yandex"] = yango;
    
                @event.SetAction(parsedData.network.name);
                @event.SetLabel(parsedData.adType);
                if (double.TryParse(parsedData.revenue, out double result))
                {
                    @event.SetValue(result);
                }
                @event.AddSemanticAttribute("adPartners", adPartners);
                @event.AddSemanticAttribute("currency", parsedData.currency);
    
                AirbridgeUnity.TrackEvent(@event);
            }
            catch (Exception ex)
            {
                Debug.LogError($"Error parsing impression data: {ex.Message}");
            }
        }
        //..
    }

    このページは役に立ちましたか?

    ご質問やご提案はありますか?