알립니다이 기능은 현재 베타 버전으로 제공되고 있습니다. 서비스 안정화 과정에서 일부 사양이 변경될 수 있습니다.
SDK 연동하기
아래 링크에 따라 애드몹 SDK를 설치해 주세요.- 애드몹 안드로이드 SDK 설치 가이드: 19.0.0 버전 이상이어야 합니다.
- 애드몹 iOS SDK 설치 가이드: 7.54.0 버전 이상이어야 합니다.
- 애드몹 플러터 SDK 설치 가이드: 3.24.0 버전 이상이어야 합니다.
- 애드몹 유니티 SDK 설치 가이드: 8.0.0 버전 이상이어야 합니다.
에어브릿지로 광고 수익 데이터 전송하기
애드몹의 광고 수익 데이터는 노출 수준 광고 수익 기능을 설정해야 수집할 수 있습니다. 애드몹 가이드를 참고해 주세요. 애드몹에서 발생한 광고 수익 데이터를 에어브릿지로 전송합니다. 애드몹 SDK에 광고 수익 데이터 콜백을 설정합니다. 해당 콜백을 활용하여 광고 수익 데이터를 에어브릿지 SDK로 전송합니다. 애드몹 SDK는 플랫폼에 따라 전송하는 광고 수익 데이터가 다릅니다. 예를 들어, 서비스에서 발생한 광고 수익이 0.005 달러라면 유니티와 안드로이드에서는 5000이 전송됩니다. iOS에서는 0.005가 전송됩니다. 아래 코드에서는 모든 플랫폼에서 에어브릿지 SDK에 value로 0.005를 입력합니다. 또한,semanticAttributes.adPartners.admob.value_micros에는 5000을 입력합니다.
SDK 연동하기 (Android)
SDK 연동하기 (Android)
Android SDK
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
)
)
}
}
})
}
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);
}}
);
}
});
}
});
}
Android SDK (Deprecated)
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)
}
}
})
}
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);
}
});
}
});
}
SDK 연동하기 (iOS)
SDK 연동하기 (iOS)
iOS SDK
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
]
)
}
}
}
}
@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
}];
};
}];
}
iOS SDK (Deprecated)
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()
}
}
}
}
@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];
};
}];
}
SDK 연동하기 (Flutter)
SDK 연동하기 (Flutter)
Flutter SDK
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)
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) {}
)
);
SDK 연동하기 (Unity)
SDK 연동하기 (Unity)
Unity 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)
{
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 }
}
}
}
},
}
);
}
Unity SDK (Deprecated)
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);
}
에어브릿지로 광고 클릭 데이터 전송하기
애드몹에서 발생한 광고 클릭 데이터를 에어브릿지로 전송합니다. 광고를 보여질때 광고 클릭 데이터를 에어브릿지 SDK로 전송합니다.SDK 연동하기 (Android)
SDK 연동하기 (Android)
Android SDK
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
}
Android SDK (Deprecated)
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
}
SDK 연동하기 (iOS)
SDK 연동하기 (iOS)
iOS SDK
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
iOS SDK (Deprecated)
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
SDK 연동하기 (Flutter)
SDK 연동하기 (Flutter)
Flutter SDK
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)
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) {
}
)
);
SDK 연동하기 (Unity)
SDK 연동하기 (Unity)
Unity SDK
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.
});
}
}
Unity SDK (Deprecated)
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.
});
}
}