Lorsqu'une impression se produit, Google Mobile Ads SDK fournit les données de revenus publicitaires associées à cette impression. Vous pouvez utiliser les données pour calculer la valeur vie d'un utilisateur ou les transférer en aval vers d'autres systèmes pertinents.
Ce guide est destiné à vous aider à implémenter la capture des données de LTV dans votre application iOS.
Prérequis
- Assurez-vous d'avoir activé la fonctionnalité de revenus publicitaires au niveau des impressions dans l'interface utilisateur d'AdMob.
- Importez Google Mobile Ads SDK 9.10.0 ou version ultérieure.
- Configurez Google Mobile Ads SDK.
Avant de pouvoir recevoir des revenus publicitaires au niveau des impressions, vous devez implémenter au moins un format d'annonce :
Gérer les événements payants
Le protocole délégué de chaque format d'annonce inclut une méthode didRecordPaidEventWithAdValue:. Pendant le cycle de vie d'une annonce, Google Mobile Ads SDK surveille les événements d'impression et appelle cette méthode déléguée avec un objet GADAdValue obtenu.
L'exemple suivant gère les événements payants pour une annonce avec récompense :
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);
}
Identifier le nom d'une source d'annonce d'événement personnalisé
Pour les sources d'annonces d'événements personnalisés, la propriété adSourceName vous donne le nom de la source d'annonces Custom event. Si vous utilisez plusieurs événements personnalisés, le nom de la source d'annonce n'est pas assez précis pour les distinguer. Pour localiser un événement personnalisé spécifique, procédez comme suit :
- Obtenez la propriété
adNetworkClassName. - Définissez un nom de source d'annonce unique.
L'exemple suivant définit un nom de source d'annonce unique pour un événement personnalisé :
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;
}Pour en savoir plus sur la source d'annonce gagnante, consultez Récupérer des informations sur la réponse d'annonce.
Intégrer des App Attribution Partners (AAP)
Pour en savoir plus sur le transfert des données de revenus publicitaires vers les plates-formes d'analyse, consultez le guide du partenaire :
| SDK partenaire |
|---|
| Adjust |
| AppsFlyer |
| Singular |
| Tenjin |
Les exemples suivants montrent comment envoyer des données sur les revenus au niveau des impressions aux partenaires AAP à l'aide de Google Mobile Ads SDK :
Ajuster
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];
};
}Singulier
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);
}
};
}Bonnes pratiques pour l'implémentation
- Définissez le délégué immédiatement après avoir créé l'objet d'annonce ou obtenu l'accès à celui-ci, et impérativement avant d'afficher l'annonce. Cela vous permet de ne manquer aucun rappel d'événement payant.
- Envoyez les informations sur l'événement payant à votre serveur d'analyse préféré dès que la méthode déléguée
didRecordPaidEventWithAdValue:est appelée. Cela permet de s'assurer que vous ne supprimez pas accidentellement des rappels et d'éviter les écarts de données.
GADAdValue
GADAdValue est une classe qui représente la valeur monétaire générée par une annonce, y compris le code de la devise de la valeur et son type de précision encodé comme suit.
| GADAdValuePrecision | Description |
|---|---|
GADAdValuePrecisionUnknown
|
Valeur d'annonce inconnue. Cette valeur est renvoyée lorsque le pingback de la valeur vie est activé, mais qu'il n'y a pas assez de données disponibles. |
GADAdValuePrecisionEstimated
|
La valeur de l'annonce est estimée à partir de données globales. |
GADAdValuePrecisionPublisherProvided
|
Une valeur d'annonce fournie par l'éditeur, comme les CPM manuels dans un groupe de médiation. |
GADAdValuePrecisionPrecise
|
Il s'agit du montant exact payé pour cette annonce. |
Tester les impressions provenant de sources d'annonces pour l'enchère
Lorsqu'un événement de revenus publicitaires au niveau des impressions se produit pour une source d'annonces pour l'enchère via une demande de test, vous ne recevez que les valeurs suivantes :
GADAdValuePrecisionUnknown: indique le type de précision.
0: indique la valeur de l'annonce.
GADAdValuePrecisionUnknown et une valeur d'annonce supérieure à 0.
Pour savoir comment envoyer une demande d'annonce test, consultez Activer les appareils de test.