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.
Airbridge supports SDK integration with Google AdMob. With the integration, you can import the ad revenue into Airbridge.
Click the link below and install the Google AdMob SDK.
Google AdMob iOS SDK Install Guide (Version 7.54.0 or later is required)
Google AdMob Android SDK Install Guide (Version 19.0.0 or later is required)
Google AdMob Unity SDK Install Guide (Versions 8.0.0 or later is required)
The code below allows you to pass the ad click data to the Airbridge SDK when the user engages with an ad.
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.
});
}
}
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.
});
}
}
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.
}
}
}
@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
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.
}
}
}
@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
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
}
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
}
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
}
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
}
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.
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.
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;
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 }
}
}
}
},
}
);
}
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;
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;
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);
}
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
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()
]
],
AirbridgeAttribute.CURRENCY: currencyCode
]
)
}
}
}
}
@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;
[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
}
},
AirbridgeAttribute.CURRENCY: currencyCode
}];
};
}];
}
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
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()
]
],
"currency": currencyCode
])
event?.send()
}
}
}
}
@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;
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
}
},
@"currency": currencyCode
}];
[event send];
};
}];
}
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
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
)
),
AirbridgeAttribute.CURRENCY to currencyCode
)
)
}
}
})
}
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();
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);
}});
}});
// ironSource has a default currency of USD
put(AirbridgeAttribute.CURRENCY, currencyCode);
}}
);
}
});
}
});
}
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
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
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)
}
}
})
}
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();
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);
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);
}
});
}
});
}
Was this page helpful?
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
}
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
}
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
}
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
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
)
),
AirbridgeAttribute.CURRENCY to currencyCode
)
)
}
}
})
}
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
}
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
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
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)
}
}
})
}
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.
});
}
}
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();
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);
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);
}
});
}
});
}
@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;
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
}
},
@"currency": currencyCode
}];
[event send];
};
}];
}