Bir gösterim gerçekleştiğinde Google Mobile Ads SDK, bu gösterimle ilişkili reklam geliri verilerini sağlar. Bu verileri, bir kullanıcının yaşam boyu değerini hesaplamak için kullanabilir veya diğer ilgili sistemlere iletebilirsiniz.
Bu kılavuz, iOS uygulamanızda YBD verilerini yakalama özelliğini uygulamanıza yardımcı olmak için hazırlanmıştır.
Ön koşullar
- AdMob kullanıcı arayüzünde gösterim düzeyinde reklam geliri özelliğini etkinleştirdiğinizden emin olun.
- Google Mobile Ads SDK 9.10.0 veya sonraki bir sürümü içe aktarın.
- Kurulum Google Mobile Ads SDK.
Gösterim düzeyinde reklam geliri elde edebilmek için en az bir reklam biçimi uygulamanız gerekir:
Ücretli etkinlikleri yönetme
Her reklam biçiminin temsilci protokolü bir didRecordPaidEventWithAdValue:
yöntemi içerir. Reklam yaşam döngüsü sırasında Google Mobile Ads SDK, gösterim etkinliklerini izler ve bu temsilci yöntemini kazanılan bir GADAdValue nesnesiyle çağırır.
Aşağıdaki örnekte, ödüllü reklamlar için ücretli etkinlikler işlenmektedir:
Swift
func ad(_ ad: FullScreenPresentingAd, didRecordPaidEventWith adValue: AdValue) {
// TODO: Send the impression-level ad revenue information to your preferred
// analytics server directly within this callback.
// Extract the impression-level ad revenue data.
let value = adValue.value
let currencyCode = adValue.currencyCode
let precision = adValue.precision
print(
"Ad paid event. Value: \(value) \(currencyCode), with precision: \(precision)."
)
}
Objective-C
- (void)ad:(id<GADFullScreenPresentingAd>)ad didRecordPaidEventWithAdValue:(GADAdValue *)adValue {
// TODO: Send the impression-level ad revenue information to your preferred
// analytics server directly within this callback.
// Extract the impression-level ad revenue data.
NSDecimalNumber *value = adValue.value;
NSString *currencyCode = adValue.currencyCode;
GADAdValuePrecision precision = adValue.precision;
NSLog(@"Ad paid event. Value: %@ %@, with precision: %ld.", value, currencyCode, (long)precision);
}
Özel etkinlik reklam kaynağı adı belirleme
Özel etkinlik reklam kaynakları için adSourceName özelliği, reklam kaynağı adını (Custom event) verir. Birden fazla özel etkinlik kullanıyorsanız reklam kaynağı adı, birden fazla özel etkinlik arasında ayrım yapacak kadar ayrıntılı değildir. Belirli bir özel etkinliği bulmak için aşağıdaki adımları uygulayın:
adNetworkClassNameözelliğini alın.- Benzersiz bir reklam kaynağı adı belirleyin.
Aşağıdaki örnekte, özel bir etkinlik için benzersiz bir reklam kaynağı adı ayarlanmaktadır:
Swift
func uniqueAdSourceName(for loadedAdNetworkResponseInfo: AdNetworkResponseInfo) -> String {
var adSourceName: String = loadedAdNetworkResponseInfo.adSourceName ?? ""
if adSourceName == "Custom Event" {
if loadedAdNetworkResponseInfo.adNetworkClassName
== "MediationExample.SampleCustomEventSwift"
{
adSourceName = "Sample Ad Network (Custom Event)"
}
}
return adSourceName
}Objective-C
- (NSString *)uniqueAdSourceNameForAdNetworkResponseInfo:
(GADAdNetworkResponseInfo *)loadedAdNetworkResponseInfo {
NSString *adSourceName = loadedAdNetworkResponseInfo.adSourceName;
if ([adSourceName isEqualToString:@"Custom Event"]) {
if ([loadedAdNetworkResponseInfo.adNetworkClassName isEqualToString:@"SampleCustomEvent"]) {
adSourceName = @"Sample Ad Network (Custom Event)";
}
}
return adSourceName;
}Kazanan reklam kaynağı hakkında daha fazla bilgi için Reklam yanıtı hakkında bilgi alma bölümüne bakın.
Uygulama İlişkilendirme Ortakları (AAP) ile entegrasyon
Reklam geliri verilerini analiz platformlarına yönlendirme hakkında ayrıntılı bilgi için iş ortağının kılavuzuna bakın:
| İş Ortağı SDK'sı |
|---|
| Adjust |
| AppsFlyer |
| Singular |
| Tenjin |
Aşağıdaki örneklerde, Google Mobile Ads SDK kullanılarak AAP iş ortaklarına gösterim düzeyinde gelir verilerinin nasıl gönderileceği gösterilmektedir:
Ayarla
Swift
func setPaidEventHandler(rewardAd: RewardedAd) {
rewardAd.paidEventHandler = { adValue in
guard let adRevenue = ADJAdRevenue(source: "admob_sdk") else { return }
adRevenue.setRevenue(adValue.value.doubleValue, currency: adValue.currencyCode)
if let adSourceName = rewardAd.responseInfo.loadedAdNetworkResponseInfo?.adSourceName {
adRevenue.setAdRevenueNetwork(adSourceName)
}
Adjust.trackAdRevenue(adRevenue)
}
}Objective-C
- (void)setPaidEventHandler:(GADRewardedAd *)rewardAd {
NSString *adSourceName = rewardAd.responseInfo.loadedAdNetworkResponseInfo.adSourceName;
rewardAd.paidEventHandler = ^(GADAdValue *_Nonnull adValue) {
ADJAdRevenue *adRevenue = [[ADJAdRevenue alloc] initWithSource:@"admob_sdk"];
if (!adRevenue) {
return;
}
[adRevenue setRevenue:adValue.value.doubleValue currency:adValue.currencyCode];
if (adSourceName) {
[adRevenue setAdRevenueNetwork:adSourceName];
}
[Adjust trackAdRevenue:adRevenue];
};
}AppsFlyer
Swift
func setPaidEventHandler(rewardedAd: RewardedAd) {
rewardedAd.paidEventHandler = { adValue in
let adRevenueData = AFAdRevenueData(
monetizationNetwork: "AdMob Mediation", mediationNetwork: MediationNetworkType.googleAdMob,
currencyIso4217Code: adValue.currencyCode, eventRevenue: adValue.value)
var additionalParameters = [:]
additionalParameters[kAppsFlyerAdRevenueCountry] = "US"
additionalParameters[kAppsFlyerAdRevenueAdUnit] = rewardedAd.adUnitID
additionalParameters[kAppsFlyerAdRevenueAdType] = "Rewarded"
AppsFlyerLib.shared().logAdRevenue(adRevenueData, additionalParameters: additionalParameters)
}
}Objective-C
- (void)setPaidEventHandler:(GADRewardedAd *)rewardedAd {
NSString *adUnitID = rewardedAd.adUnitID;
rewardedAd.paidEventHandler = ^(GADAdValue *_Nonnull adValue) {
AFAdRevenueData *adRevenueData = [[AFAdRevenueData alloc]
initWithMonetizationNetwork:@"AdMob Mediation"
mediationNetwork:AppsFlyerAdRevenueMediationNetworkTypeGoogleAdMob
currencyIso4217Code:adValue.currencyCode
eventRevenue:adValue.value];
NSMutableDictionary *additionalParameters = [[NSMutableDictionary alloc] init];
additionalParameters[kAppsFlyerAdRevenueCountry] = @"US";
additionalParameters[kAppsFlyerAdRevenueAdUnit] = adUnitID;
additionalParameters[kAppsFlyerAdRevenueAdType] = @"Rewarded";
[[AppsFlyerLib shared] logAdRevenue:adRevenueData additionalParameters:additionalParameters];
};
}Tekil
Swift
func setPaidEventHandler(rewardedAd: RewardedAd) {
rewardedAd.paidEventHandler = { adValue in
// Extract revenue and currency from AdValue.
let revenue = adValue.value.doubleValue
let currency = adValue.currencyCode
// Validate revenue and currency before sending.
guard revenue > 0, !currency.isEmpty else {
print(
"Invalid ad revenue data: revenue = \(revenue), currency = \(String(describing: currency))"
)
return
}
// Create ad revenue data object.
let data = SingularAdData(
adPlatform: "AdMob",
withCurrency: currency,
withRevenue: NSNumber(value: revenue)
)
// Send to Singular.
Singular.adRevenue(data)
print("Ad revenue sent: \(revenue) \(currency)")
}
}Objective-C
- (void)setPaidEventHandler:(GADRewardedAd *)rewardedAd {
rewardedAd.paidEventHandler = ^(GADAdValue *_Nonnull adValue) {
// Extract revenue and currency from AdValue.
double revenue = adValue.value.doubleValue;
NSString *currency = adValue.currencyCode;
// Validate revenue and currency before sending.
if (revenue <= 0 || currency.length == 0) {
NSLog(@"Invalid ad revenue data: revenue = %f, currency = %@", revenue, currency);
return;
}
// Create ad revenue data object.
SingularAdData *data =
[[SingularAdData alloc] initWithAdPlatform:@"AdMob"
withCurrency:currency
withRevenue:[NSNumber numberWithDouble:revenue]];
// Send to Singular.
[Singular adRevenue:data];
NSLog(@"Ad revenue sent: %f %@", revenue, currency);
};
}Tenjin
Swift
func setPaidEventHandler(rewardedAd: RewardedAd) {
rewardedAd.paidEventHandler = { adValue in
var jsonDict = [:]
jsonDict["ad_unit_id"] = rewardedAd.adUnitID
jsonDict["value_micros"] = adValue.value
jsonDict["currency_code"] = adValue.currencyCode
let responseInfo = rewardedAd.responseInfo
if let responseIdentifier = responseInfo.responseIdentifier {
jsonDict["response_id"] = responseIdentifier
}
if let adNetworkClassName = responseInfo.loadedAdNetworkResponseInfo?.adNetworkClassName {
jsonDict["mediation_adapter_class_name"] = adNetworkClassName
}
do {
let jsonData = try JSONSerialization.data(withJSONObject: jsonDict, options: [])
let jsonString = String(data: jsonData, encoding: .utf8)
TenjinSDK.adMobImpression(fromJSON: jsonString)
} catch {
print("Failed to log AdMob impression: \(error)")
}
}
}Objective-C
- (void)setPaidEventHandler:(GADRewardedAd *)rewardedAd {
NSString *adUnitID = rewardedAd.adUnitID;
GADResponseInfo *responseInfo = rewardedAd.responseInfo;
rewardedAd.paidEventHandler = ^(GADAdValue *_Nonnull adValue) {
NSMutableDictionary *jsonDict = [[NSMutableDictionary alloc] init];
jsonDict[@"ad_unit_id"] = adUnitID;
jsonDict[@"value_micros"] = adValue.value;
jsonDict[@"currency_code"] = adValue.currencyCode;
NSString *responseIdentifier = responseInfo.responseIdentifier;
if (responseIdentifier) {
jsonDict[@"response_id"] = responseIdentifier;
}
NSString *adNetworkClassName = responseInfo.loadedAdNetworkResponseInfo.adNetworkClassName;
if (adNetworkClassName) {
jsonDict[@"mediation_adapter_class_name"] = adNetworkClassName;
}
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict options:0 error:&error];
if (jsonData) {
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[TenjinSDK adMobImpressionFromJSON:jsonString];
} else {
NSLog(@"Failed to log AdMob impression: %@", error);
}
};
}Kullanımla ilgili en iyi uygulamalar
- Reklam nesnesini oluşturduktan veya nesneye erişim elde ettikten hemen sonra ve kesinlikle reklamı göstermeden önce temsilciyi ayarlayın. Bu sayede, ücretli etkinlik geri çağırmalarını kaçırmazsınız.
- Ücretli etkinlik bilgilerini,
didRecordPaidEventWithAdValue:temsilci yöntemi çağrıldığı anda hemen tercih ettiğiniz analiz sunucusuna gönderin. Bu sayede, geri çağırmaları yanlışlıkla silmez ve veri tutarsızlıklarını önlersiniz.
GADAdValue
GADAdValue, bir reklamdan kazanılan maddi değeri temsil eden bir sınıftır.
Değerin para birimi kodu ve kesinlik türü aşağıdaki gibi kodlanır.
| GADAdValuePrecision | Açıklama |
|---|---|
GADAdValuePrecisionUnknown
|
Bilinmeyen bir reklam değeri. Bu, YBD geri pingi etkinleştirildiğinde ancak yeterli veri olmadığında döndürülür. |
GADAdValuePrecisionEstimated
|
Birleştirilmiş verilerden tahmin edilen bir reklam değeridir. |
GADAdValuePrecisionPublisherProvided
|
Uyumlulaştırma grubundaki manuel BGBM'ler gibi yayıncı tarafından sağlanan reklam değeri. |
GADAdValuePrecisionPrecise
|
Bu reklam için ödenen kesin değer. |
Teklifli sistem reklam kaynaklarından gelen test gösterimleri
Bir teklifli sistem reklam kaynağı için test isteği aracılığıyla gösterim düzeyinde reklam geliri etkinliği gerçekleştiğinde yalnızca aşağıdaki değerleri alırsınız:
GADAdValuePrecisionUnknown: Kesinlik türünü gösterir.
0: Reklam değerini gösterir.
GADAdValuePrecisionUnknown dışında bir değer, reklam değerini ise 0 değerinden yüksek olarak görmüş olabilirsiniz.
Test reklamı isteği gönderme hakkında ayrıntılı bilgi için Test cihazlarını etkinleştirme başlıklı makaleyi inceleyin.