Google AdMob Ad Revenue Integration

This integration enables Airbridge to collect Google AdMob ad revenue data. The data can be shown on the Airbridge dashboard by attribution and user.

AdMob ad revenue data is collected from the AdMob SDK and sent to the Airbridge SDK. "Impression-level ad revenue" in the AdMob dashboard must be configured in order to collect data. Please make sure that the AdMob SDK is installed and that the "Impression-level ad revenue" is activated.



AdMob SDK Installation



AdMob "Impression-level ad revenue" Setup


Forwarding AdMob Ad Revenue Data to Airbridge

Please setup data callbacks to send ad revenue data to the Airbridge SDK, using the AdMob SDK.

private void RequestRewardedAd()
{
    RewardedAd.LoadAd(adUnitId, new AdRequest.Builder().Build(), (rewardedAd, error) => {
        if (error != null) { return; }

        this.rewardedAd = rewardedAd;
        this.rewardedAd.OnPaidEvent += this.HandleAdPaidEvent;
    }
}

public void HandleAdPaidEvent(object sender, AdValueEventArgs args)
{
    AdValue adValue = args.AdValue;
    var adUnitId = this.rewardedAd.adUnitId;
    var adNetworkAdapter = this.rewardedAd.MediationAdapterClassName();
  
    AirbridgeEvent @event = new AirbridgeEvent("airbridge.adImpression");

    var admob = new Dictionary<string, object>();
    admob["value_micros"] = adValue.Value;
    admob["currency_code"] = adValue.CurrencyCode;
    admob["precision"] = adValue.Precision;
  
    admob["ad_unit_id"] = adUnitId;
    admob["ad_network_adapter"] = adNetworkAdapter;
     
    var adPartners = new Dictionary<string, object>();
    adPartners["admob"] = admob;
  
    @event.SetAction(adUnitId);
    @event.SetLabel(adNetworkAdapter);
    @event.SetValue(adValue.Value);
    @event.AddSemanticAttribute("adPartners", adPartners);
  
    AirbridgeUnity.TrackEvent(@event);
}
import GoogleMobileAds
import AirBridge
import UIKit

class ViewController: UIViewController {
    var rewardedAd: GADRewardedAd? = nil
    
    func requestRewardedAd() {
        let request = GADRequest()
        GADRewardedAd.load(
            withAdUnitID: "ad unit ID",
            request: request
        ) { ad, error in
            if let error {
                print("Rewarded ad failed to load with error: \(error.localizedDescription)")
                return
            }
            
            self.rewardedAd = ad
            self.rewardedAd?.paidEventHandler = { value in
                let (value, currencyCode, precision) = (
                    value.value,
                    value.currencyCode,
                    value.precision
                )
                
                let adUnitID = self.rewardedAd?.adUnitID
                let adNetworkAdapter = self.rewardedAd?.responseInfo.adNetworkClassName
                
                let event = ABInAppEvent()
                event?.setCategory("airbridge.adImpression")
                event?.setAction(adUnitID)
                event?.setLabel(adNetworkAdapter)
                event?.setValue(value)
                event?.setSemantics([
                    "adPartners": [
                        "admob": [
                            "value_micros": value,
                            "currency_code": currencyCode,
                            "precision": precision,
                            
                            "ad_unit_id": adUnitID ?? NSNull(),
                            "ad_network_adapter": adNetworkAdapter ?? NSNull(),
                        ]
                    ]
                ])

                event?.send()
            }
        }
    }
}
@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()
@property(nonatomic, strong) GADRewardedAd *rewardedAd;
@end

@implementation ViewController
- (void)requestRewardedAd {
    __weak ViewController *weakSelf = self;

    GADRequest *request = [GADRequest request];
    [GADRewardedAd loadWithAdUnitID:@"ad unit ID"
                            request:request
                  completionHandler:^(GADRewardedAd *ad, NSError *error) 
    {
        if (error) {
            NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
            return;
        }
        self.rewardedAd = ad;
        self.rewardedAd.paidEventHandler = ^void(GADAdValue *_Nonnull value){
            ViewController *strongSelf = weakSelf;

            // Extract the impression-level ad revenue data.
            NSDecimalNumber *value; = value.value;
            NSString *currencyCode = value.currencyCode;
            GADAdValuePrecision precision = value.precision;

            // Get the ad unit ID.
            NSString *adUnitId = strongSelf.rewardedAd.adUnitID;
            NSString *adNetworkAdapter = strongSelf.rewardedAd.adNetworkClassName;

            ABInAppEvent* event = [[ABInAppEvent alloc] init];
            [event setCategory:@"airbridge.adImpression"];
            [event setAction:adUnitId];
            [event setLabel:adNetworkAdapter];
            [event setValue:value];
            [event setSemantics:@{
                @"adPartners": @{
                    @"admob": @{
                        @"value_micros": value,
                        @"currency_code": currencyCode,
                        @"precision": precision,
                        
                        @"ad_unit_id": adUnitId,
                        @"ad_network_adapter": adNetworkAdapter
                    }
                }
            }];
            

            [event send];
        };
    }];
}
import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {
    private RewardedAd rewardedAd;
    private final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        AdRequest adRequest = new AdRequest.Builder().build();

        RewardedAd.load(this, "ad unit ID", adRequest, new RewardedAdLoadCallback(){
            @Override
            public void onAdLoaded(@NonNull RewardedAd ad) {
                rewardedAd = ad;
                // Set paid event listener
                rewardedAd.setOnPaidEventListener(new OnPaidEventListener() {
                    @Override
                    public void onPaidEvent(AdValue adValue) {
                        // Extract the impression-level ad revenue data.
                        long valueMicros = adValue.getValueMicros();
                        String currencyCode = adValue.getCurrencyCode();
                        String precision = adValue.getPrecisionType();

                        // Get the ad unit ID.
                        String adUnitId = rewardedAd.getAdUnitId();
                        String adNetworkAdapter = rewardedAd.getMediationAdapterClassName();
              
                        Event event = new Event("airbridge.adImpression");
                        Map<String, Object> admob = new HashMap<>();
                        admob.put("value_micros", valueMicros);
                        admob.put("currency_code", currencyCode);
                        admob.put("precision", precision);
              
                        admob.put("ad_unit_id", adUnitId);
                        admob.put("ad_network_adapter", adNetworkAdapter);
              
                        Map<String, Object> adPartners = new HashMap<>();
                        adPartners.put("admob", admob);
                        Map<String, Object> semanticAttributes = new HashMap<>();
                        semanticAttributes.put("adPartners", adPartners);
              
                        event.setAction(adUnitId);
                        event.setLabel(adNetworkAdapter);
                        event.setValue(valueMicros);
                        event.setSemanticAttributes(semanticAttributes);
                        Airbridge.trackEvent(event);
                    }
                });
            }
        });
    }
}
import com.google.android.gms.ads.rewarded.RewardedAd

class MainActivity : AppCompatActivity() {
    private var rewardedAd: RewardedAd? = null
    private final var TAG = "MainActivity"

    override fun onCreate(savedInstanceState: Bundle?) {
        AdRequest adRequest = new AdRequest.Builder().build()

        RewardedAd.load(this, "ad unit ID", adRequest, object: RewardedAdLoadCallback() {
            override fun onAdLoaded(ad: RewardedAd) {
                rewardedAd = ad
                // Set paid event listener
                rewardedAd.onPaidEventListener = OnPaidEventListener { adValue ->
                    // Extract the impression-level ad revenue data.
                    val valueMicros = adValue.valueMicros
                    val currencyCode = adValue.currencyCode
                    val precision = adValue.precisionType

                    // Get the ad unit ID.
                    val adUnitId = rewardedAd.adUnitId
                    val adNetworkAdapter = rewardedAd.mediationAdapterClassName

                    val event = Event("airbridge.adImpression")
                    val admob = mutableMapOf<String, Any?>()
                    admob["value_micros"] = valueMicros
                    admob["currency_code"] = currencyCode
                    admob["precision"] = precision
                    
                    admob["ad_unit_id"] = adUnitId
                    admob["ad_network_adapter"] = adNetworkAdapter
                  
                    val adPartners = mapOf("admob" to admob)
                    event.action = adUnitId
                    event.label = adNetworkAdapter
                    event.value = valueMicros
                    event.semanticAttributes = mutableMapOf("adPartners" to adPartners)
                    Airbridge.trackEvent(event)
                }
            }
        })
    }
}