Saat tayangan terjadi, Google Mobile Ads SDK akan memanggil pengendali peristiwa berbayar dengan data pendapatan terkait. Dengan menerapkan pengendali ini, Anda dapat menggunakan data untuk menghitung nilai umur pengguna, atau meneruskan data ke sistem lain yang relevan.
Panduan ini dimaksudkan untuk membantu Anda menerapkan pengambilan data LTV di aplikasi iOS Anda.
Prasyarat
- Pastikan Anda telah mengaktifkan fitur pendapatan iklan di tingkat tayangan iklan di UI AdMob.
- Impor Google Mobile Ads SDK 9.10.0 atau yang lebih tinggi.
- Siapkan Google Mobile Ads SDK.
Sebelum dapat menerima pendapatan iklan di tingkat tayangan iklan, Anda harus menerapkan minimal satu format iklan:
Menerapkan pengendali peristiwa berbayar
Setiap format iklan memiliki properti paidEventHandler dari jenis
GADPaidEventHandler.
Selama siklus proses peristiwa iklan, Google Mobile Ads SDK memantau peristiwa tayangan iklan dan memanggil pengendali dengan nilai yang diperoleh.
Contoh berikut menangani peristiwa berbayar untuk iklan reward:
Swift
rewardedAd?.paidEventHandler = { adValue in
// 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
rewardedAd.paidEventHandler = ^(GADAdValue *_Nonnull 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);
};
Mengidentifikasi nama sumber iklan peristiwa kustom
Untuk sumber iklan peristiwa kustom, properti adSourceName
memberi Anda nama sumber iklan Custom event. Jika Anda menggunakan beberapa peristiwa kustom, nama sumber iklan tidak cukup terperinci untuk membedakan beberapa peristiwa kustom. Untuk menemukan peristiwa kustom tertentu, lakukan langkah-langkah berikut:
- Dapatkan properti
adNetworkClassName. - Tetapkan nama sumber iklan yang unik.
Contoh berikut menetapkan nama sumber iklan unik untuk peristiwa kustom:
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;
}Untuk mengetahui informasi selengkapnya tentang sumber iklan pemenang, lihat Mengambil informasi tentang respons iklan.
Berintegrasi dengan Partner Atribusi Aplikasi (AAP)
Untuk mengetahui detail lengkap tentang meneruskan data pendapatan iklan ke platform analisis, lihat panduan partner:
| Partner SDK |
|---|
| Adjust |
| AppsFlyer |
| Singular |
| Tenjin |
Contoh berikut menunjukkan cara mengirim data pendapatan tingkat tayangan iklan ke partner AAP menggunakan Google Mobile Ads SDK:
Sesuaikan
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];
};
}Singular
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);
}
};
}Praktik terbaik penerapan
- Tetapkan handler segera setelah Anda membuat atau mendapatkan akses ke objek iklan, dan pastikan sebelum menampilkan iklan. Hal ini memastikan Anda tidak melewatkan callback peristiwa berbayar.
- Kirim informasi peristiwa berbayar ke server analisis pilihan Anda segera saat metode
paidEventHandlerdipanggil. Hal ini memastikan Anda tidak menghapus callback secara tidak sengaja dan menghindari perbedaan data.
GADAdValue
GADAdValue adalah class yang mewakili nilai uang yang diperoleh untuk iklan,
termasuk kode mata uang nilai dan jenis presisinya yang dienkode sebagai berikut.
| GADAdValuePrecision | Deskripsi |
|---|---|
GADAdValuePrecisionUnknown
|
Nilai iklan yang tidak diketahui. Ini ditampilkan saat pingback LTV diaktifkan, tetapi tidak ada cukup data yang tersedia. |
GADAdValuePrecisionEstimated
|
Nilai iklan yang diperkirakan dari data gabungan. |
GADAdValuePrecisionPublisherProvided
|
Nilai iklan yang diberikan penayang, seperti CPM manual dalam grup mediasi. |
GADAdValuePrecisionPrecise
|
Nilai akurat yang dibayarkan untuk iklan ini. |
Menguji tayangan iklan dari sumber iklan bidding
Setelah peristiwa pendapatan iklan di tingkat tayangan iklan terjadi untuk sumber iklan bidding melalui permintaan pengujian, Anda hanya akan menerima nilai berikut:
GADAdValuePrecisionUnknown: menunjukkan jenis presisi.
0: menunjukkan nilai iklan.
GADAdValuePrecisionUnknown dan nilai iklan lebih dari 0.
Untuk mengetahui detail tentang cara mengirim permintaan iklan pengujian, lihat Mengaktifkan perangkat pengujian.