وقتی ظهوری رخ میدهد، Google Mobile Ads SDK دادههای درآمد آگهی مربوط به آن ظهور را ارائه میدهد. میتوانید از این دادهها برای محاسبه ارزش طول عمر کاربر استفاده کنید یا دادهها را به سیستمهای مرتبط دیگر ارسال کنید.
این راهنما برای کمک به شما در پیادهسازی ضبط دادههای «ارزش طول عمر» در برنامه iOS شما درنظر گرفته شده است.
پیشنیازها
- مطمئن شوید که ویژگی درآمد آگهی در سطح ظهور را در میانای کاربری AdMob روشن کردهاید.
- Google Mobile Ads SDK نسخه ۹.۱۰.۰ یا بالاتر را وارد کنید.
- Google Mobile Ads SDK را راهاندازی کنید.
قبلاز اینکه بتوانید درآمد آگهی در سطح ظهور دریافت کنید، باید حداقل یک قالب آگهی را پیادهسازی کنید:
مدیریت رویدادهای پولی
پروتکل نماینده هر قالب آگهی شامل یک روش didRecordPaidEventWithAdValue: است. درطول چرخه حیات آگهی، Google Mobile Ads SDK رویدادهای ظهور را پایش میکند و این روش نماینده را با شیء GADAdValue کسبشده فراخوانی میکند.
مثال زیر رویدادهای پولی را برای آگهی پاداشدار مدیریت میکند:
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)."
)
}
آبجکتیو-سی
- (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);
}
شناسایی نام منبع آگهی رویداد سفارشی
برای منابع آگهی رویداد سفارشی، adSourceName
ویژگی نام منبع آگهی Custom event را به شما میدهد. اگر از چند رویداد سفارشی استفاده میکنید، نام منبع آگهی بهاندازه کافی جزئی نیست که بتواند بین چند رویداد سفارشی تمایز قائل شود. برای پیدا کردن رویداد سفارشی خاص، مراحل زیر را انجام دهید:
- خصوصیت
adNetworkClassNameرا دریافت کنید. - نام منبع آگهی منحصربهفردی تنظیم کنید.
مثال زیر نام منبع آگهی منحصربهفردی را برای رویداد سفارشی تنظیم میکند:
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
}آبجکتیو-سی
- (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;
}برای اطلاعات بیشتر درباره منبع آگهی برنده، به بازیابی اطلاعات درباره پاسخ آگهی مراجعه کنید.
ادغام با «شرکای ارجاع برنامه» (AAP)
برای جزئیات کامل درباره بازارسال دادههای درآمد آگهی به پلاتفرمهای تجزیهوتحلیل، به راهنمای شریک مراجعه کنید:
| کیت توسعه نرمافزار شریک |
|---|
| تنظیم کردن |
| AppsFlyer |
| Singular |
| Tenjin |
مثالهای زیر نشان میدهند که چگونه میتوان دادههای درآمد سطح ظهور را بااستفاده از Google Mobile Ads SDK به شرکای AAP ارسال کرد:
میزان کردن
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)
}
}آبجکتیو-سی
- (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)
}
}آبجکتیو-سی
- (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];
};
}مفرد
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)")
}
}آبجکتیو-سی
- (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);
};
}تنجین
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)")
}
}
}آبجکتیو-سی
- (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);
}
};
}روالهای مطلوب پیادهسازی
- بهمحض ایجاد یا دسترسی به شیء آگهی، نماینده را تنظیم کنید، و حتماً قبلاز نمایش آگهی این کار را انجام دهید. این کار تضمین میکند که هیچکدام از فراخوانیهای رویداد پولی را ازدست ندهید.
- اطلاعات رویداد پولی را بلافاصله پساز فراخوانی روش نماینده
didRecordPaidEventWithAdValue:به سرور تجزیهوتحلیل دلخواهتان ارسال کنید. این کار باعث میشود که بهطور تصادفی هیچکدام از تماسهای برگشتی را ازدست ندهید و از مغایرت دادهها جلوگیری میکند.
GADAdValue
GADAdValue کلاسی است که ارزش پولی کسبشده برای آگهی را نشان میدهد،
ازجمله کد واحد پول ارزش و نوع دقت آن که بهصورت زیر کدگذاری شده است.
| GADAdValuePrecision | شرح |
|---|---|
GADAdValuePrecisionUnknown
|
مقدار آگهی که ناشناخته است. این خطا زمانی برگردانده میشود که پینگبک LTV فعال باشد اما دادههای کافی دردسترس نباشد. |
GADAdValuePrecisionEstimated
|
مقدار آگهی تخمینزدهشده از دادههای تجمیعی. |
GADAdValuePrecisionPublisherProvided
|
مقدار آگهی ارائهشده توسط ناشر، مانند هزارظهوربهای دستی در گروه میانجیگری. |
GADAdValuePrecisionPrecise
|
مبلغ دقیقی که برای این آگهی پرداخت شده است. |
آزمایش ظهورها از منابع آگهی مناقصه
پساز اینکه رویداد درآمد آگهی در سطح ظهور برای منبع آگهی مزایدهای ازطریق درخواست آزمایشی رخ میدهد، فقط مقادیر زیر را دریافت میکنید:
-
GADAdValuePrecisionUnknown: نوع دقت را نشان میدهد.
0: نشاندهنده ارزش آگهی است.
GADAdValuePrecisionUnknown و مقدار آگهی را بیشتر از 0 ببینید.
برای جزئیات مربوط به ارسال درخواست آگهی آزمایشی، به فعال کردن دستگاههای آزمایشی مراجعه کنید.