> ## Documentation Index
> Fetch the complete documentation index at: https://help.airbridge.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Google AdMob

<Info>
  **Note**

  This feature is currently in beta. If you have any questions or suggestions for improvements, reach out to your Airbridge CSM. If you don't have a dedicated CSM, contact us through the [Airbridge Help Center](https://app.airbridge.io/supports).
</Info>

Airbridge supports SDK integration with Google AdMob. With the integration, you can import the ad revenue into Airbridge.

## SDK Integration

Click the link below and install the Google AdMob SDK.

* [Google AdMob Android SDK Install Guide ](https://developers.google.com/admob/android/quick-start)(Version 19.0.0 or later is required)
* [Google AdMob iOS SDK Install Guide ](https://developers.google.com/admob/ios/quick-start)(Version 7.54.0 or later is required)
* [Google AdMob Flutter SDK Install Guide](https://developers.google.com/admob/flutter/quick-start): (Versions 3.24.0 or later is required)
* [Google AdMob Unity SDK Install Guide](https://developers.google.com/admob/unity/quick-start) (Versions 8.0.0 or later is required)

### Send Google AdMob ad revenue data to Airbridge

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

* [Google AdMob Impression-level ad revenue](https://support.google.com/admob/answer/11322405)

Configure data callbacks in the Google AdMob SDK to send ad revenue data to the Airbridge SDK.

The ad revenue data passed by the Google AdMob SDK varies depending on the platform. For example, for 0.005 USD, 5000 will be returned in Unity and Android, whereas 0.005 will be returned in iOS. By using the code below, 0.005 will be sent to Airbridge SDK for all platforms. The micro dollar value, which is 5000 in this case, will be sent as `semanticAttributes.adPartners.admob.value_micros.`

<AccordionGroup>
  <Accordion title="SDK integration (Android)">
    #### Android SDK

    <CodeGroup>
      ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      fun requestRewardedAd(context: Context) {
          val adRequest = AdRequest.Builder().build()

          RewardedAd.load(context, "ad unit ID", adRequest, object : RewardedAdLoadCallback() {
              override fun onAdLoaded(ad: RewardedAd) {
                  ad.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 = ad.adUnitId
                      val adNetworkAdapter = ad.responseInfo.mediationAdapterClassName
                      val loadedAdapterResponseInfo = ad.responseInfo.loadedAdapterResponseInfo

                      // Available adFormat values:
                      // "rewarded_video" - for rewarded ads
                      // "interstitial" - for interstitial ads
                      // "banner" - for banner ads
                      // "native" - for native ads
                      val adFormat = "rewarded_video"

                      Airbridge.trackEvent(AirbridgeCategory.AD_IMPRESSION,
                          mapOf(
                              AirbridgeAttribute.ACTION to adUnitId,
                              AirbridgeAttribute.LABEL to adNetworkAdapter,
                              AirbridgeAttribute.VALUE to valueMicros / 1000000.0,
                              AirbridgeAttribute.AD_PARTNERS to mapOf(
                                  "admob" to mapOf(
                                      "value_micros" to valueMicros,
                                      "currency_code" to currencyCode,
                                      "precision" to precision,
                                      "ad_unit_id" to adUnitId,
                                      "ad_network_adapter" to adNetworkAdapter,
                                      "ad_network" to loadedAdapterResponseInfo?.adSourceName,
                                      "ad_revenue_format" to adFormat
                                  )
                              ),
                              AirbridgeAttribute.CURRENCY to currencyCode
                          )
                      )
                  }
              }
          })
      }
      ```

      ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      void requestRewardedAd(Context context) {
          AdRequest adRequest = new AdRequest.Builder().build();

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

                          // Get the ad unit ID.
                          String adUnitId = ad.getAdUnitId();
                          String adNetworkAdapter = ad.getResponseInfo().getMediationAdapterClassName();
                          AdapterResponseInfo loadedAdapterResponseInfo = ad.getResponseInfo().getLoadedAdapterResponseInfo();
                          String adSourceName = loadedAdapterResponseInfo.getAdSourceName();

                          // Available adFormat values:
                          // "rewarded_video" - for rewarded ads
                          // "interstitial" - for interstitial ads
                          // "banner" - for banner ads
                          // "native" - for native ads
                          String adFormat = "rewarded_video";

                          Airbridge.trackEvent(AirbridgeCategory.AD_IMPRESSION,
                              new HashMap<String, Object>() {{
                                  put(AirbridgeAttribute.ACTION, adUnitId);
                                  put(AirbridgeAttribute.LABEL, adNetworkAdapter);
                                  put(AirbridgeAttribute.VALUE, valueMicros / 1000000.0);
                                  put(AirbridgeAttribute.AD_PARTNERS, new HashMap<String, Object>() {{
                                      put("admob", new HashMap<String, Object>() {{
                                          put("value_micros", valueMicros);
                                          put("currency_code", currencyCode);
                                          put("precision", precision);
                                          put("ad_unit_id", adUnitId);
                                          put("ad_network_adapter", adNetworkAdapter);
                                          put("ad_network", adSourceName);
                                          put("ad_revenue_format", adFormat);
                                      }});
                                  }});
                                  // ironSource has a default currency of USD
                                  put(AirbridgeAttribute.CURRENCY, currencyCode);
                              }}
                          );
                      }
                  });
              }
          });
      }
      ```
    </CodeGroup>

    #### Android SDK (Deprecated)

    <CodeGroup>
      ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      fun requestRewardedAd(context: Context) {
          val adRequest = AdRequest.Builder().build()

          RewardedAd.load(context, "ad unit ID", adRequest, object : RewardedAdLoadCallback() {
              override fun onAdLoaded(ad: RewardedAd) {
                  ad.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 = ad.adUnitId
                      val adNetworkAdapter = ad.responseInfo.mediationAdapterClassName
                      val loadedAdapterResponseInfo = ad.responseInfo.loadedAdapterResponseInfo

                      // Available adFormat values:
                      // "rewarded_video" - for rewarded ads
                      // "interstitial" - for interstitial ads
                      // "banner" - for banner ads
                      // "native" - for native ads
                      val adFormat = "rewarded_video"

                      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
                      admob["ad_network"] = loadedAdapterResponseInfo?.adSourceName
                      admob["ad_revenue_format"] = adFormat

                      val adPartners = mapOf("admob" to admob)
                      event.action = adUnitId
                      event.label = adNetworkAdapter
                      event.value = valueMicros / 1000000.0
                      event.semanticAttributes = mutableMapOf(
                          "adPartners" to adPartners,
                          "currency" to currencyCode
                      )
                      Airbridge.trackEvent(event)
                  }
              }
          })
      }
      ```

      ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      void requestRewardedAd(Context context) {
          AdRequest adRequest = new AdRequest.Builder().build();

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

                          // Get the ad unit ID.
                          String adUnitId = ad.getAdUnitId();
                          String adNetworkAdapter = ad.getResponseInfo().getMediationAdapterClassName();
                          AdapterResponseInfo loadedAdapterResponseInfo = ad.getResponseInfo().getLoadedAdapterResponseInfo();
                          String adSourceName = loadedAdapterResponseInfo.getAdSourceName();

                          // Available adFormat values:
                          // "rewarded_video" - for rewarded ads
                          // "interstitial" - for interstitial ads
                          // "banner" - for banner ads
                          // "native" - for native ads
                          String adFormat = "rewarded_video";

                          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);
                          admob.put("ad_network", adSourceName);
                          admob.put("ad_revenue_format", adFormat);

                          Map<String, Object> adPartners = new HashMap<>();
                          adPartners.put("admob", admob);
                          Map<String, Object> semanticAttributes = new HashMap<>();
                          semanticAttributes.put("adPartners", adPartners);
                          semanticAttributes.put("currency", currencyCode);

                          event.setAction(adUnitId);
                          event.setLabel(adNetworkAdapter);
                          event.setValue(valueMicros / 1000000.0);
                          event.setSemanticAttributes(semanticAttributes);

                          Airbridge.trackEvent(event);
                      }
                  });
              }
          });
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="SDK integration (iOS)">
    #### iOS SDK

    <CodeGroup>
      ```swift Swift lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      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 adSourceName = self.rewardedAd?.responseInfo?.loadedAdNetworkResponseInfo?.adSourceName

                      // Available adFormat values:
                      // "rewarded_video" - for rewarded ads
                      // "interstitial" - for interstitial ads
                      // "banner" - for banner ads
                      // "native" - for native ads
                      let adFormat = "rewarded_video"

                      Airbridge.trackEvent(
                          category: AirbridgeCategory.AD_IMPRESSION,
                          semanticAttributes: [
                              AirbridgeAttribute.ACTION: adUnitID,
                              AirbridgeAttribute.LABEL: adNetworkAdapter,
                              AirbridgeAttribute.VALUE: value,
                              AirbridgeAttribute.AD_PARTNERS: [
                                  "admob": [
                                      "value_micros": value * 1000000.0,
                                      "currency_code": currencyCode,
                                      "precision": precision,
                                      "ad_unit_id": adUnitID,
                                      "ad_network_adapter": adNetworkAdapter ?? NSNull(),
                                      "ad_network": adSourceName ?? NSNull(),
                                      "ad_revenue_format": adFormat
                                  ]
                              ],
                              AirbridgeAttribute.CURRENCY: currencyCode
                          ]
                      )
                  }
              }
          }
      }
      ```

      ```objective-c Objective-C lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      @import GoogleMobileAds;
      @import Airbridge;
      @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 adValue) {
                  ViewController* strongSelf = weakSelf;

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

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

                  // Available adFormat values:
                  // "rewarded_video" - for rewarded ads
                  // "interstitial" - for interstitial ads
                  // "banner" - for banner ads
                  // "native" - for native ads
                  NSString *adFormat = @"rewarded_video"

                  [Airbridge trackEventWithCategory:AirbridgeCategory.AD_IMPRESSION semanticAttributes:@{
                      AirbridgeAttribute.ACTION: adUnitID,
                      AirbridgeAttribute.LABEL: adNetworkAdapter,
                      AirbridgeAttribute.VALUE: value,
                      AirbridgeAttribute.AD_PARTNERS: @{
                          @"admob": @{
                              @"value_micros": [value decimalNumberByMultiplyingByPowerOf10:6],
                              @"currency_code": currencyCode,
                              @"precision": precision,
                              @"ad_unit_id": adUnitID,
                              @"ad_network_adapter": adNetworkAdapter ?: NSNull.null,
                              @"ad_network": adSourceName ?: NSNull.null,
                              @"ad_revenue_format": adFormat
                          }
                      },
                      AirbridgeAttribute.CURRENCY: currencyCode
                  }];
              };
          }];
      }
      ```
    </CodeGroup>

    #### iOS SDK (Deprecated)

    <CodeGroup>
      ```swift Swift lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      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 adSourceName = self.rewardedAd?.responseInfo?.loadedAdNetworkResponseInfo?.adSourceName

                      // Available adFormat values:
                      // "rewarded_video" - for rewarded ads
                      // "interstitial" - for interstitial ads
                      // "banner" - for banner ads
                      // "native" - for native ads
                      let adFormat = "rewarded_video"

                      let event = ABInAppEvent()
                      event?.setCategory("airbridge.adImpression")
                      event?.setAction(adUnitID)
                      event?.setLabel(adNetworkAdapter)
                      event?.setValue(value)
                      event?.setSemantics([
                          "adPartners": [
                              "admob": [
                                  "value_micros": value * 1000000.0,
                                  "currency_code": currencyCode,
                                  "precision": precision,
                                  "ad_unit_id": adUnitID,
                                  "ad_network_adapter": adNetworkAdapter ?? NSNull(),
                                  "ad_network": adSourceName ?? NSNull(),
                                  "ad_revenue_format": adFormat
                              ]
                          ],
                            "currency": currencyCode
                      ])

                      event?.send()
                  }
              }
          }
      }
      ```

      ```objective-c Objective-C lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      @import GoogleMobileAds;
      @import AirBridge;
      @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 adValue){
                  ViewController* strongSelf = weakSelf;

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

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

                  NSString *adNetworkAdapter = strongSelf.rewardedAd.responseInfo.adNetworkClassName;
                  GADAdNetworkResponseInfo *loadedAdNetworkResponseInfo =
                          strongSelf.rewardedAd.responseInfo.loadedAdNetworkResponseInfo;
                  NSString *adSourceName = loadedAdNetworkResponseInfo.adSourceName;

                  // Available adFormat values:
                  // "rewarded_video" - for rewarded ads
                  // "interstitial" - for interstitial ads
                  // "banner" - for banner ads
                  // "native" - for native ads
                  NSString *adFormat = @"rewarded_video";

                  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 decimalNumberByMultiplyingByPowerOf10:6],
                              @"currency_code": currencyCode,
                              @"precision": precision,
                              @"ad_unit_id": adUnitId,
                              @"ad_network_adapter": adNetworkAdapter ?: NSNull.null,
                              @"ad_network": adSourceName ?: NSNull.null,
                              @"ad_revenue_format": adFormat
                          }
                      },
                      @"currency": currencyCode
                  }];

                  [event send];
              };
          }];
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="SDK integration (Flutter)">
    #### Flutter SDK

    ```dart lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
    RewardedAd.load(
      adUnitId: adUnitId,
      request: const AdRequest(),
      rewardedAdLoadCallback: RewardedAdLoadCallback(
          onAdLoaded: (ad) {
            ad.onPaidEvent = (Ad ad, double valueMicros,
                PrecisionType precision, String currencyCode) {
              var adUnitID = ad.adUnitId;
              var adNetworkAdapter =
                  ad.responseInfo?.mediationAdapterClassName ?? "";
              var adSourceName =
                  ad.responseInfo?.loadedAdapterResponseInfo?.adSourceName ?? "";

              // Available adFormat values:
              // "rewarded_video" - for rewarded ads
              // "interstitial" - for interstitial ads
              // "banner" - for banner ads
              // "native" - for native ads
              var adFormat = 'rewarded_video';

              Map admob = {
                'value_micros': valueMicros,
                'currency_code': currencyCode,
                'precision': precision.toString(),
                'ad_unit_id': adUnitID,
                'ad_network_adapter': adNetworkAdapter,
                'ad_network': adSourceName,
                'ad_revenue_format': adFormat
              };

              Airbridge.trackEvent(
                  category: AirbridgeCategory.AD_IMPRESSION,
                  semanticAttributes: {
                    AirbridgeAttribute.ACTION: adUnitID,
                    AirbridgeAttribute.LABEL: adNetworkAdapter,
                    AirbridgeAttribute.VALUE: valueMicros / 1000000.0,
                    AirbridgeAttribute.AD_PARTNERS: {
                      'admob': admob
                    }
                  });
            };
          },
          onAdFailedToLoad: (error) {}
      )
    );
    ```

    #### Flutter SDK (Deprecated)

    ```dart lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
    RewardedAd.load(
      adUnitId: adUnitId,
      request: const AdRequest(),
      rewardedAdLoadCallback: RewardedAdLoadCallback(
          onAdLoaded: (ad) {
            ad.onPaidEvent = (Ad ad, double valueMicros,
                PrecisionType precision, String currencyCode) {
              var adUnitID = ad.adUnitId;
              var adNetworkAdapter =
                  ad.responseInfo?.mediationAdapterClassName ?? "";
              var adSourceName =
                  ad.responseInfo?.loadedAdapterResponseInfo?.adSourceName ?? "";

              // Available adFormat values:
              // "rewarded_video" - for rewarded ads
              // "interstitial" - for interstitial ads
              // "banner" - for banner ads
              // "native" - for native ads
              var adFormat = 'rewarded_video';

              Map admob = {
                'value_micros': valueMicros,
                'currency_code': currencyCode,
                'precision': precision.toString(),
                'ad_unit_id': adUnitID,
                'ad_network_adapter': adNetworkAdapter,
                'ad_network': adSourceName,
                'ad_revenue_format': adFormat
              };

              Airbridge.event.trackEvent(
                  AirbridgeCategory.AD_IMPRESSION,
                  AirbridgeEventOption(
                    action: adUnitID,
                    label: adNetworkAdapter,
                    value: valueMicros / 1000000.0,
                    semanticAttributes: {
                        'adPartners': {
                          'admob': admob
                        }
                    }
                  )
              );
            };
          },
          onAdFailedToLoad: (error) {}
      )
    );
    ```
  </Accordion>

  <Accordion title="SDK integration (Unity)">
    #### Unity SDK

    <CodeGroup>
      ```c# C# lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      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)
      {
          if (adInfo == null) {
              return;
          }

          AdValue adValue = args.AdValue;
          var adUnitId = this.rewardedAd.adUnitId;
          var adNetworkAdapter = this.rewardedAd.GetMediationAdapterClassName();
          var loadedAdapterResponseInfo = this.rewardedAd.GetResponseInfo().GetLoadedAdapterResponseInfo();
          var adSourceName = loadedAdapterResponseInfo.AdSourceName;

          // Available adFormat values:
          // "rewarded_video" - for rewarded ads
          // "interstitial" - for interstitial ads
          // "banner" - for banner ads
          // "native" - for native ads
          val adFormat = "rewarded_video";
          
          Airbridge.TrackEvent(
              category: AirbridgeCategory.AD_IMPRESSION,
              semanticAttributes: new Dictionary<string, object>()
              {
                  { AirbridgeAttribute.ACTION, adUnitId },
                  { AirbridgeAttribute.LABEL, adNetworkAdapter },
                  { AirbridgeAttribute.VALUE, adValue.Value / 1000000.0 },
                  { AirbridgeAttribute.CURRENCY, adValue.CurrencyCode },
                  {
                      AirbridgeAttribute.AD_PARTNERS, new Dictionary<string, object>()
                      {
                          {
                              "admob", new Dictionary<string, object>()
                              {
                                  { "value_micros", adValue.Value },
                                  { "currency_code", adValue.CurrencyCode },
                                  { "precision", adValue.Precision },
                                  { "ad_unit_id", adUnitId },
                                  { "ad_network_adapter", adNetworkAdapter },
                                  { "ad_network", adSourceName },
                                  { "ad_revenue_format", adFormat }
                              }
                          }
                      }
                  },
              }
          );
      }
      ```
    </CodeGroup>

    #### Unity SDK (Deprecated)

    <CodeGroup>
      ```c# C# lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      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)
      {
          if (adInfo == null) {
              return;
          }

          AdValue adValue = args.AdValue;
          var adUnitId = this.rewardedAd.adUnitId;
          var adNetworkAdapter = this.rewardedAd.GetMediationAdapterClassName();
          var loadedAdapterResponseInfo = this.rewardedAd.GetResponseInfo().GetLoadedAdapterResponseInfo();
          var adSourceName = loadedAdapterResponseInfo.AdSourceName;

          // Available adFormat values:
          // "rewarded_video" - for rewarded ads
          // "interstitial" - for interstitial ads
          // "banner" - for banner ads
          // "native" - for native ads
          val adFormat = "rewarded_video"
        
          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;
          admob["ad_network"] = adSourceName;
          admob["ad_revenue_format"] = adFormat;
           
          var adPartners = new Dictionary<string, object>();
          adPartners["admob"] = admob;
        
          @event.SetAction(adUnitId);
          @event.SetLabel(adNetworkAdapter);
          @event.SetValue(adValue.Value / 1000000.0);
          @event.AddSemanticAttribute("adPartners", adPartners);
          @event.AddSemanticAttribute("currency", adValue.CurrencyCode);
        
          AirbridgeUnity.TrackEvent(@event);
      }
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

### Send Google AdMob ad click data to Airbridge

The code below allows you to pass the ad click data to the Airbridge SDK when the user engages with an ad.

<AccordionGroup>
  <Accordion title="SDK integration (Android)">
    #### Android SDK

    <CodeGroup>
      ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      rewardedAd?.let { ad ->
          val adUnitId = ad.adUnitId
          val adNetworkAdapter = ad.responseInfo.mediationAdapterClassName
          val loadedAdapterResponseInfo = ad.responseInfo.loadedAdapterResponseInfo

          Airbridge.trackEvent(AirbridgeCategory.AD_CLICK,
              mapOf(
                  AirbridgeAttribute.ACTION to adUnitId,
                  AirbridgeAttribute.LABEL to adNetworkAdapter
                  AirbridgeAttribute.AD_PARTNERS to mapOf(
                      "admob" to mapOf(
                          "ad_unit_id" to adUnitId,
                          "ad_network_adapter" to adNetworkAdapter,
                          "ad_network" to loadedAdapterResponseInfo?.adSourceName
                      )
                  )
              )
          )

          ad.show(activityContext, OnUserEarnedRewardListener { rewardItem ->
              // Handle the reward.
          })
      } ?: run {
          // ad wasn't ready yet
      }
      ```

      ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      if (rewardedAd != null) {
          String adUnitId = ad.getAdUnitId();
          String adNetworkAdapter = ad.getResponseInfo().getMediationAdapterClassName();
          AdapterResponseInfo loadedAdapterResponseInfo = ad.getResponseInfo().getLoadedAdapterResponseInfo();
          String adSourceName = loadedAdapterResponseInfo.getAdSourceName();

          Airbridge.trackEvent(AirbridgeCategory.AD_CLICK,
              new HashMap<String, Object>() {{
                  put(AirbridgeAttribute.ACTION, adUnitId);
                  put(AirbridgeAttribute.LABEL, adNetworkAdapter);
                  put(AirbridgeAttribute.AD_PARTNERS, new HashMap<String, Object>() {{
                      put("admob", new HashMap<String, Object>() {{
                          put("ad_unit_id", adUnitId);
                          put("ad_network_adapter", adNetworkAdapter);
                          put("ad_network", adSourceName);
                      }});
                  }});
              }}
          );

          rewardedAd.show(activityContext, new OnUserEarnedRewardListener() {
              @Override
              public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
                  // Handle the reward.
              }
          });
      } else {
        // ad wasn't ready yet
      }
      ```
    </CodeGroup>

    #### Android SDK (Deprecated)

    <CodeGroup>
      ```kotlin Kotlin lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      rewardedAd?.let { ad ->
          val adUnitId = ad.adUnitId
          val adNetworkAdapter = ad.responseInfo.mediationAdapterClassName
          val loadedAdapterResponseInfo = ad.responseInfo.loadedAdapterResponseInfo

          val event = Event("airbridge.adClick")
          val admob = mutableMapOf<String, Any?>()
          admob["ad_unit_id"] = adUnitId
          admob["ad_network_adapter"] = adNetworkAdapter
          admob["ad_network"] = loadedAdapterResponseInfo?.adSourceName

          val adPartners = mapOf("admob" to admob)
          event.action = adUnitId
          event.label = adNetworkAdapter
          event.semanticAttributes = mutableMapOf(
              "adPartners" to adPartners,
              "currency" to currencyCode
          )

          Airbridge.trackEvent(event)

          ad.show(activityContext, OnUserEarnedRewardListener { rewardItem ->
              // Handle the reward.
          })
      } ?: run {
          // ad wasn't ready yet
      }
      ```

      ```java Java lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      if (rewardedAd != null) {
          String adUnitId = ad.getAdUnitId();
          String adNetworkAdapter = ad.getResponseInfo().getMediationAdapterClassName();
          AdapterResponseInfo loadedAdapterResponseInfo = ad.getResponseInfo().getLoadedAdapterResponseInfo();
          String adSourceName = loadedAdapterResponseInfo.getAdSourceName();

          Event event = new Event("airbridge.adClick")
          Map<String, Object> admob = new HashMap<>();
          admob.put("ad_unit_id", adUnitId);
          admob.put("ad_network_adapter", adNetworkAdapter);
          admob.put("ad_network", adSourceName);

          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.setSemanticAttributes(semanticAttributes);

          Airbridge.trackEvent(event);

          rewardedAd.show(activityContext, new OnUserEarnedRewardListener() {
              @Override
              public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
                  // Handle the reward.
              }
          });
      } else {
        // ad wasn't ready yet
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="SDK integration (iOS)">
    #### iOS SDK

    <CodeGroup>
      ```swift Swift lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      class ViewController: UIViewController {
          
          var rewardedAd: GADRewardedAd?

          func load() {
              let request = GADRequest()
              GADRewardedAd.load(withAdUnitID: "ad unit ID", request: request) { [weak self] ad, error in
                  if let error = error {
                      print("Failed to load rewarded ad: \(error.localizedDescription)")
                      return
                  }
                  self?.rewardedAd = ad
              }
          }

          func show() {
              guard let rewardedAd = rewardedAd else {
                  // Ad wasn't ready
                  return
              }

              let adUnitID = rewardedAd?.adUnitID
              let adNetworkAdapter = rewardedAd?.responseInfo?.adNetworkClassName
              let adSourceName = rewardedAd?.responseInfo?.loadedAdNetworkResponseInfo?.adSourceName

              Airbridge.trackEvent(
                  category: AirbridgeCategory.AD_CLICK,
                  semanticAttributes: [
                      AirbridgeAttribute.ACTION: adUnitID,
                      AirbridgeAttribute.LABEL: adNetworkAdapter,
                      AirbridgeAttribute.AD_PARTNERS: [
                          "admob": [
                              "ad_unit_id": adUnitID,
                              "ad_network_adapter": adNetworkAdapter ?? NSNull(),
                              "ad_network": adSourceName ?? NSNull()
                          ]
                      ]
                  ]
              )
              
              rewardedAd.present(fromRootViewController: self) {
                  let reward = rewardedAd.adReward
                  // TODO: Reward the user.
              }
          }
      }
      ```

      ```objective-c Objective-C lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      @interface ViewController () <GADFullScreenContentDelegate>
      @property(nonatomic, strong) GADRewardedAd *rewardedAd;
      @end

      @implementation ViewController

      - (void)load {
          GADRequest* request = [GADRequest request];
          [GADRewardedAd loadWithAdUnitID:@"ad unit ID"
                                  request:request
                        completionHandler:^(GADRewardedAd *ad, NSError *error) {
              self.rewardedAd = ad;
          }];
      }

      - (void)show {
          if (self.rewardedAd) {
              NSString* adUnitId = self.rewardedAd.adUnitID;
              NSString *adNetworkAdapter = strongSelf.rewardedAd.responseInfo.adNetworkClassName;
              GADAdNetworkResponseInfo *loadedAdNetworkResponseInfo =
                              self.rewardedAd.responseInfo.loadedAdNetworkResponseInfo;
              NSString *adSourceName = loadedAdNetworkResponseInfo.adSourceName;
              
              // Send Event
              [Airbridge trackEventWithCategory:AirbridgeCategory.AD_CLICK semanticAttributes:@{
                  AirbridgeAttribute.ACTION: adUnitID,
                  AirbridgeAttribute.LABEL: adNetworkAdapter,
                  AirbridgeAttribute.AD_PARTNERS: @{
                      @"admob": @{
                          @"ad_unit_id": adUnitID,
                          @"ad_network_adapter": adNetworkAdapter ?: NSNull.null,
                          @"ad_network": adSourceName ?: NSNull.null
                      }
                  }
              }];
              
              [self.rewardedAd presentFromRootViewController:self
                  userDidEarnRewardHandler:^{
                  GADAdReward *reward = self.rewardedAd.adReward;
                  // TODO: Reward the user!
              }];
          } else {
              // Ad wasn't ready
          }
      }

      @end
      ```
    </CodeGroup>

    #### iOS SDK (Deprecated)

    <CodeGroup>
      ```swift Swift lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      class ViewController: UIViewController {
          
          var rewardedAd: GADRewardedAd?

          func load() {
              let request = GADRequest()
              GADRewardedAd.load(withAdUnitID: "ad unit ID", request: request) { [weak self] ad, error in
                  if let error = error {
                      print("Failed to load rewarded ad: \(error.localizedDescription)")
                      return
                  }
                  self?.rewardedAd = ad
              }
          }

          func show() {
              guard let rewardedAd = rewardedAd else {
                  // Ad wasn't ready
                  return
              }

              let adUnitID = rewardedAd.adUnitID
              let adNetworkAdapter = rewardedAd.responseInfo?.adNetworkClassName
              let adSourceName = rewardedAd.responseInfo?.loadedAdNetworkResponseInfo?.adSourceName

              let event = ABInAppEvent()
              event?.setCategory("airbridge.adClick")
              event?.setAction(adUnitID)
              event?.setLabel(adNetworkAdapter)
              event?.setSemantics([
                  "adPartners": [
                      "admob": [
                          "ad_unit_id": adUnitId,
                          "ad_network_adapter": adNetworkAdapter ?? NSNull(),
                          "ad_network": adSourceName ?? NSNull()
                      ]
                  ]
              ])
              
              event?.send()

              rewardedAd.present(fromRootViewController: self) {
                  let reward = rewardedAd.adReward
                  // TODO: Reward the user.
              }
          }
      }
      ```

      ```objective-c Objective-C lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      @interface ViewController () <GADFullScreenContentDelegate>
      @property(nonatomic, strong) GADRewardedAd *rewardedAd;
      @end

      @implementation ViewController

      - (void)load {
          GADRequest* request = [GADRequest request];
          [GADRewardedAd loadWithAdUnitID:@"ad unit ID"
                                  request:request
                        completionHandler:^(GADRewardedAd *ad, NSError *error) {
              self.rewardedAd = ad;
          }];
      }

      - (void)show {
          if (self.rewardedAd) {
              NSString* adUnitId = self.rewardedAd.adUnitID;
              NSString *adNetworkAdapter = strongSelf.rewardedAd.responseInfo.adNetworkClassName;
              GADAdNetworkResponseInfo *loadedAdNetworkResponseInfo =
                              self.rewardedAd.responseInfo.loadedAdNetworkResponseInfo;
              NSString *adSourceName = loadedAdNetworkResponseInfo.adSourceName;
              
              // Send Event
              ABInAppEvent* event = [[ABInAppEvent alloc] init];
              [event setAction:adUnitId];
              [event setCategory:@"airbridge.adClick"];
              [event setLabel:adNetworkAdapter];
              [event setSemantics:@{
                  @"adPartners": @{
                      @"admob": @{
                          @"ad_unit_id": adUnitId,
                          @"ad_network_adapter": adNetworkAdapter ?: NSNull.null,
                          @"ad_network": adSourceName ?: NSNull.null
                      }
                  },
              }];
              [event send];
              
              [self.rewardedAd presentFromRootViewController:self
                  userDidEarnRewardHandler:^{
                  GADAdReward *reward = self.rewardedAd.adReward;
                  // TODO: Reward the user!
              }];
          } else {
              // Ad wasn't ready
          }
      }

      @end
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="SDK integration (Flutter)">
    #### Flutter SDK

    ```dart lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
    RewardedAd.load(
      adUnitId: adUnitId,
      request: const AdRequest(),
      rewardedAdLoadCallback: RewardedAdLoadCallback(
          onAdLoaded: (ad) {
            ad.fullScreenContentCallback = FullScreenContentCallback(
              onAdClicked: (ad) {
                var adUnitID = ad.adUnitId;
                var adNetworkAdapter = ad.responseInfo?.mediationAdapterClassName ?? "";
                var adSourceName = ad.responseInfo?.loadedAdapterResponseInfo?.adSourceName ?? ""; 
                Map admob = {
                  'ad_unit_id': adUnitID,
                  'ad_network_adapter': adNetworkAdapter,
                  'ad_network': adSourceName,
                };

                Airbridge.trackEvent(
                  category: AirbridgeCategory.AD_CLICK,
                  semanticAttributes: {
                    AirbridgeAttribute.ACTION: adUnitID,
                    AirbridgeAttribute.LABEL: adNetworkAdapter,
                    AirbridgeAttribute.AD_PARTNERS: {
                      'admob': admob
                    }
                  }
                );
              },
            );
          },
          onAdFailedToLoad: (error) {

          }
       )
    );
    ```

    #### Flutter SDK (Deprecated)

    ```dart lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
    RewardedAd.load(
      adUnitId: adUnitId,
      request: const AdRequest(),
      rewardedAdLoadCallback: RewardedAdLoadCallback(
          onAdLoaded: (ad) {
            ad.fullScreenContentCallback = FullScreenContentCallback(
              onAdClicked: (ad) {
                var adUnitID = ad.adUnitId;
                var adNetworkAdapter = ad.responseInfo?.mediationAdapterClassName ?? "";
                var adSourceName = ad.responseInfo?.loadedAdapterResponseInfo?.adSourceName ?? ""; 
                Map admob = {
                  'ad_unit_id': adUnitID,
                  'ad_network_adapter': adNetworkAdapter,
                  'ad_network': adSourceName,
                };

                Airbridge.event.trackEvent(
                  AirbridgeCategory.AD_CLICK,
                  AirbridgeEventOption(
                    action: adUnitID,
                    label: adNetworkAdapter,
                    semanticAttributes: {
                        'adPartners': {
                          'admob': admob
                        }
                    }
                  )
                );
              },
            );
          },
          onAdFailedToLoad: (error) {

          }
       )
    );
    ```
  </Accordion>

  <Accordion title="SDK integration (Unity)">
    #### Unity SDK

    <CodeGroup>
      ```c# C# lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      public void Show()
      {   
          if (rewardedAd != null && rewardedAd.CanShowAd())
          {
              var adUnitId = this.rewardedAd.adUnitId;
              var adNetworkAdapter = this.rewardedAd.GetMediationAdapterClassName();
              var loadedAdapterResponseInfo = this.rewardedAd.GetResponseInfo().GetLoadedAdapterResponseInfo();
              var adSourceName = loadedAdapterResponseInfo.AdSourceName;

              Airbridge.TrackEvent(
                  category: AirbridgeCategory.AD_CLICK,
                  semanticAttributes: new Dictionary<string, object>()
                  {
                      { AirbridgeAttribute.ACTION, adUnitId },
                      { AirbridgeAttribute.LABEL, adNetworkAdapter },
                      { AirbridgeAttribute.CURRENCY, adValue.CurrencyCode },
                      {
                          AirbridgeAttribute.AD_PARTNERS, new Dictionary<string, object>()
                          {
                              {
                                  "admob", new Dictionary<string, object>()
                                  {
                                      { "ad_unit_id", adUnitId },
                                      { "ad_network_adapter", adNetworkAdapter },
                                      { "ad_network", adSourceName }
                                  }
                              }
                          }
                      },
                  }
              );

              rewardedAd.Show((Reward reward) =>
              {
                  // TODO: Reward the user.
              });
          }
      }
      ```
    </CodeGroup>

    #### Unity SDK (Deprecated)

    <CodeGroup>
      ```c# C# lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
      public void Show()
      {   
          if (rewardedAd != null && rewardedAd.CanShowAd())
          {
              var adUnitId = this.rewardedAd.adUnitId;
              var adNetworkAdapter = this.rewardedAd.GetMediationAdapterClassName();
              var loadedAdapterResponseInfo = this.rewardedAd.GetResponseInfo().GetLoadedAdapterResponseInfo();
              var adSourceName = loadedAdapterResponseInfo.AdSourceName;

              AirbridgeEvent @event = new AirbridgeEvent("airbridge.adClick");
              
              var admob = new Dictionary<string, object>();
              admob["ad_unit_id"] = adUnitId;
              admob["ad_network_adapter"] = adNetworkAdapter;
              admob["ad_network"] = adSourceName;

              var adPartners = new Dictionary<string, object>();
              adPartners["admob"] = admob;

              @event.SetAction(adUnitId);
              @event.SetLabel(adNetworkAdapter);
              @event.AddSemanticAttribute("adPartners", adPartners);
          
              AirbridgeUnity.TrackEvent(@event);

              rewardedAd.Show((Reward reward) =>
              {
                  // TODO: Reward the user.
              });
          }
      }
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

<link rel="alternate" hrefLang="en" href="https://help.airbridge.io/en/developers/google-admob-ad-revenue-integration" />

<link rel="alternate" hrefLang="ko" href="https://help.airbridge.io/ko/developers/google-admob-ad-revenue-integration" />
