Compreender a atribuição de receitas de anúncios
A atribuição de receitas de anúncios ajuda-o a associar as suas receitas de anúncios às campanhas específicas que trouxeram utilizadores à sua aplicação. Isto dá-lhe uma imagem clara do desempenho dos seus anúncios, mostrando o custo da campanha, as receitas in-app e as receitas de anúncios, tudo num único local. Esta funcionalidade também lhe permite enviar dados sobre as receitas de anúncios para as suas redes de anúncios, de modo a melhorar o desempenho dos mesmos.
Pontos principais:
- O que faz: a atribuição de receitas de anúncios associa as receitas de anúncios de aplicações móveis às campanhas de marketing que geraram utilizadores para a sua aplicação. Desta forma, pode ver quanto ganhou com cada campanha e como isso afecta o ROI geral dos anúncios.
- Fonte de dados: Estes dados provêm normalmente da sua plataforma de mediação e podem estar ao nível do utilizador ou ao nível da impressão. O Singular oferece suporte a diferentes maneiras de obter esses dados de atribuição.
- Saiba mais: Para obter mais detalhes, consulte o artigo Perguntas frequentes e solução de problemas sobre a atribuição de receita de anúncios da Singular.
Notas importantes:
- Códigos de moeda: Use códigos de moeda ISO 4217 de três letras (por exemplo, "USD" para dólares americanos, "EUR" para euros, "INR" para rúpias indianas). Muitas plataformas de mediação utilizam "USD", por isso certifique-se de que o seu código corresponde a este código, se o estiver a utilizar. Se utilizar uma moeda diferente, actualize o código de validação em conformidade.
- Exatidão dos dados: Sempre verifique se seus dados de receita e moeda estão corretos antes de enviá-los para a Singular. Os dados incorrectos não podem ser corrigidos mais tarde, pelo que é crucial garantir a sua exatidão.
Implementação da atribuição de receita de anúncios
- Atualizar o SDK: Certifique-se de ter a versão mais recente do Singular SDK.
- Adicionar snippets de código: Dependendo da sua plataforma de mediação, adicione os snippets de código corretos à configuração do SDK do Singular.
Seguir estas etapas ajudará você a configurar a Atribuição de receita de anúncios corretamente e a aproveitar ao máximo seus dados de anúncios.
Notas do parceiro
- Esta funcionalidade tem de ser activada na sua conta AdMob.
Consulte Suporte da AdMob.
-
Quando carregar um formato de anúncio (como "App Open", "Banner", "Interstitial", "Native" ou "Rewarded"), configure um paidEventHandler como uma função de retorno de chamada que é acionada sempre que um anúncio gera receitas. O SDK do Google Mobile Ads monitoriza os eventos de impressão e chama este manipulador com a receita gerada pelo anúncio.
Para o fazer, modifique a função"load" do formato do anúncio para incluir o paidEventHandler. Dentro dessa chamada de retorno, você gerencia os dados de receita do anúncio, valida-os e envia-os para o Singular usando a função Singular.adRevenue.
Por exemplo, quando um "Anúncio recompensado" é carregado com êxito, o paidEventHandler receberá as informações de receita do anúncio (adValue). Nesta função, trate os dados da receita e envie-os para o Singular.
Para obter mais detalhes, consulte a documentação da AdMob.
IMPORTANTE: o SDK da AdMob informa a receita de forma diferente, dependendo da plataforma. Por exemplo, a receita de anúncios de US$ 0,005 será retornada como 5000 nas plataformas Unity e Android, mas como 0,005 no iOS. Para iOS, envie 0,005 diretamente para o SDK Singular. Em outras plataformas, converta adValue de micros para dólares antes de enviá-lo para a Singular.
Selecione a base de código para a implementação do seu SDK:
Como funciona:
- Implemente o SDK do Google AdMob Mobile Ads (iOS): Consulte o Guia de Introdução.
- Integração com a AdMob: Carregue o anúncio da AdMob e defina um setOnPaidEventListener para lidar com eventos de receita de anúncios.
- Validação de receita: Adicione uma verificação para garantir que a receita seja maior que 0. Isso evita o envio de valores de receita zero ou negativos.
- Validação de moeda: Certifique-se de que a moeda não seja nula ou vazia antes de enviar dados para a Singular.
- Registo de dados inválidos: Se os dados falharem na validação, imprima uma mensagem de log para depuração e não envie os dados para a Singular.
import Singular
private let adUnitID = "AD_UNIT_ID"
var rewardedAd: GADRewardedAd?
func loadRewardedAd() {
let request = GADRequest()
GADRewardedAd.load(withAdUnitID: adUnitID, request: request) { [weak self] ad, error in
guard let self = self else { return }
if let error = error {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
return
}
self.rewardedAd = ad
self.rewardedAd?.paidEventHandler = { adValue in
// Ensure valid revenue data
let revenue = adValue.value
let currency = adValue.currencyCode
// Validate the revenue and currency before sending to Singular
guard revenue > 0, let currency = currency, !currency.isEmpty else {
print("Invalid ad revenue data: revenue = \(revenue), currency = \(String(describing: currency))")
return
}
let data = SingularAdData(
adPlatform: "Admob",
currency: currency,
revenue: revenue
)
// Send Ad Revenue data to Singular
Singular.adRevenue(data: data)
// Log the data for debugging
print("Ad Revenue reported to Singular: \(data)")
}
}
}
Como funciona:
- Implemente o SDK do Google AdMob Mobile Ads (iOS): Consulte o Guia de Introdução.
- Integração com o AdMob: Carregue o anúncio do AdMob e defina um paidEventHandler para lidar com eventos de receita de anúncios.
- Validação de receita: Adicione uma verificação para garantir que a receita seja maior que 0. Isso evita o envio de valores de receita zero ou negativos.
- Validação de moeda: Certifique-se de que a moeda não seja nula ou vazia antes de enviar dados para a Singular.
- Registo de dados inválidos: Se os dados falharem na validação, imprima uma mensagem de log para depuração e não envie os dados para o Singular.
#import <Singular/Singular.h>
static NSString *const adUnitID = @"AD_UNIT_ID";
// Initialize and load the rewarded ad
@interface YourClassName () <GADRewardedAdDelegate>
@property(nonatomic, strong) GADRewardedAd *rewardedAd;
@end
@implementation YourClassName
- (void)loadRewardedAd {
GADRequest *request = [[GADRequest alloc] init];
[GADRewardedAd loadWithAdUnitID:adUnitID
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.fullScreenContentDelegate = self;
self.rewardedAd.paidEventHandler = ^(GADAdValue *adValue) {
// Ensure valid revenue data
NSDecimalNumber *revenue = adValue.value;
NSString *currency = adValue.currencyCode;
if (revenue.doubleValue > 0 && currency.length > 0) {
SingularAdData *data = [[SingularAdData alloc] initWithAdPlatfrom:@"Admob"
currency:currency
revenue:revenue.doubleValue];
// Send Ad Revenue data to Singular
[Singular adRevenue:data];
// Log the data for debugging
NSLog(@"Ad Revenue reported to Singular: %@", data);
} else {
NSLog(@"Invalid ad revenue data: revenue = %@, currency = %@", revenue, currency);
}
};
}];
}
@end
Notas do parceiro
- Compartilhe dados de receita de anúncios em nível de impressão usando a API de receita de usuário em nível de impressão da Applovin.
Selecione a base de código para sua implementação do SDK:
Como funciona:
- Utiliza a AppLovin Impression-Level User Revenue API (iOS): Consulte o Guia de Introdução.
- Integração com o AppLovin: Carregue um anúncio recompensado do AppLovin MAX e use a função didReceive para lidar com eventos de receita de anúncios.
- Validação de receita: Adicione uma verificação para garantir que a receita seja maior que 0. Isso evita o envio de valores de receita zero ou negativos.
- Validação de moeda: No exemplo abaixo, a moeda é codificada como "USD". Certifique-se de que a moeda é exata e não nula ou vazia antes de enviar dados para a Singular.
- Registo de dados inválidos: Se os dados falharem na validação, imprima uma mensagem de log para depuração e não envie os dados para o Singular.
import Singular
func didReceive(_ message: ALCMessage) {
if "max_revenue_events" == message.topic {
// Safely unwrap values from the message data
guard
let revenueValue = message.data["revenue"] as? Double,
revenueValue > 0
else {
print("Failed to parse valid revenue value from message data or revenue is not greater than 0")
return
}
let data = SingularAdData(
adPlatform: "AppLovin",
currency: "USD", // Update this if a different currency is needed
revenue: revenueValue
)
// Send the revenue data to Singular
Singular.adRevenue(data)
}
}
Como funciona:
- Usa a API AppLovin Impression-Level User Revenue (iOS): Consulte o Guia de Introdução.
- Integração com o AppLovin: Carregue um anúncio recompensado do AppLovin MAX e use a função didReceive para lidar com eventos de receita de anúncios.
- Validação de receita: Adicione uma verificação para garantir que a receita seja maior que 0. Isso evita o envio de valores de receita zero ou negativos.
- Validação de moeda: Na amostra abaixo, a moeda é codificada como "USD". Certifique-se de que a moeda é exata e não nula ou vazia antes de enviar dados para a Singular.
- Registo de dados inválidos: Se os dados falharem na validação, imprima uma mensagem de log para depuração e não envie os dados para o Singular.
#import <Singular/Singular.h>
- (void)didReceive:(ALCMessage *)message {
if ([@"max_revenue_events" isEqualToString:message.topic]) {
NSDictionary *data = message.data;
NSNumber *revenueNumber = data[@"revenue"];
double revenueValue = [revenueNumber doubleValue];
if (revenueValue > 0) {
SingularAdData *adData = [[SingularAdData alloc] initWithAdPlatfrom:@"AppLovin"
currency:@"USD"
revenue:revenueValue];
// Send the revenue data to Singular
[Singular adRevenue:adData];
} else {
NSLog(@"Failed to parse valid revenue value from message data or revenue is not greater than 0");
}
}
}
Notas do parceiro
- A API do SDK Impression Level Revenue (ILR) fornece dados de nível de impressão para o ironSource Ads e outras redes mediadas, usando o SDK do ironSource. Leia mais em[developers.is.com].
- Certifique-se de que o sinalizador ARM SDK Postbacks no IronSource esteja ativado
Selecione a base de código para a implementação do SDK:
Como funciona:
- Utiliza o SDK do ironSource para obter o Impression-Level User Revenue (iOS): Consulte o Guia de Introdução.
- Integração com o Ironsource: Carrega um anúncio premiado da Ironsource e utiliza a função impressionDataDidSucceed para tratar os eventos de receitas de anúncios.
- Validação de receita: Adicione uma verificação para garantir que a receita seja maior que 0. Isso evita o envio de valores de receita zero ou negativos.
- Validação de moeda: Na amostra abaixo, a moeda é codificada como "USD". Certifique-se de que a moeda é exata e não nula ou vazia antes de enviar dados para a Singular.
- Registo de dados inválidos: Se os dados falharem na validação, imprima uma mensagem de log para depuração e não envie os dados para o Singular.
import Singular
class IronSourceRewardedAdViewController: UIViewController {
func impressionDataDidSucceed(impressionData: ISImpressionData?) {
logCallback(#function)
// Ensure impressionData is not nil
guard let impressionData = impressionData else {
print("No impression data available.")
return
}
// Ensure revenue value is valid
let revenue = impressionData.revenue
guard revenue > 0 else {
print("Invalid revenue value: \(revenue)")
return
}
// Create SingularAdData object with appropriate values
let data = SingularAdData(
adPlatform: "IronSource",
currency: "USD",
revenue: revenue
)
// Send the Ad Revenue data to Singular
Singular.adRevenue(data)
// Log the data for debugging
print("Ad Revenue reported to Singular: AdPlatform: \(data.adPlatform), Currency: \(data.currency), Revenue: \(data.revenue)")
}
private func logCallback(_ functionName: String) {
// Implement logging if needed
print("Function called: \(functionName)")
}
}
Como funciona:
- Usa o SDK do ironSource para obter a receita do usuário em nível de impressão (iOS): Consulte o Guia de Introdução.
- Integração com o Ironsource: Carrega um anúncio premiado da Ironsource e usa a função impressionDataDidSucceed para lidar com eventos de receita de anúncios.
- Validação de receita: Adicione uma verificação para garantir que a receita seja maior que 0. Isso evita o envio de valores de receita zero ou negativos.
- Validação de moeda: Na amostra abaixo, a moeda é codificada como "USD". Certifique-se de que a moeda é exata e não nula ou vazia antes de enviar dados para a Singular.
- Registo de dados inválidos: Se os dados falharem na validação, imprima uma mensagem de log para depuração e não envie os dados para o Singular.
#import <Singular/Singular.h>
@implementation IronSourceRewardedAdViewController
- (void)impressionDataDidSucceed:(ISImpressionData *)impressionData {
[self logCallback:NSStringFromSelector(_cmd)];
// Ensure impressionData is not nil
if (!impressionData) {
NSLog(@"No impression data available.");
return;
}
// Ensure revenue value is valid
double revenue = impressionData.revenue;
if (revenue <= 0) {
NSLog(@"Invalid revenue value: %f", revenue);
return;
}
// Create SingularAdData object with appropriate values
SingularAdData *data = [[SingularAdData alloc] initWithAdPlatfrom:@"IronSource"
currency:@"USD"
revenue:revenue];
// Send the Ad Revenue data to Singular
[Singular adRevenue:data];
// Log the data for debugging
NSLog(@"Ad Revenue reported to Singular: AdPlatform: %@, Currency: %@, Revenue: %f",
data.adPlatform, data.currency, data.revenue);
}
- (void)logCallback:(NSString *)functionName {
// Implement logging if needed
NSLog(@"Function called: %@", functionName);
}
@end
Notas do parceiro
- Definir o impressionDelegate
- Adicionar Singular ao retorno de chamada TradPlusAdImpression
Selecione a base de código para sua implementação do SDK:
Como funciona:
- Integração com o TradPlus: Carrega um anúncio premiado do TradPlus e usa a função tradPlusAdImpression para lidar com eventos de receita de anúncios.
- Validação de receita: Adicionar uma verificação para garantir que a receita é superior a 0. Isto evita o envio de valores de receita nulos ou negativos. O dicionário adInfo contém uma chave"ecpm" com um valor NSNumber válido. Ele converte esse valor em um Double e o dimensiona(normalmente, o ecpm é fornecido em miliunidades, portanto, a divisão por 1000,0 o converte em dólares).
- Validação de moeda: Na amostra abaixo, a moeda é codificada como "USD". Certifique-se de que a moeda é exata e não nula ou vazia antes de enviar dados para o Singular.
- Registo de dados inválidos: Se os dados falharem na validação, imprima uma mensagem de log para depuração e não envie os dados para o Singular.
import Singular
// Set up the delegate
TradPlus.sharedInstance().impressionDelegate = self
// Delegate method for handling ad impressions
func tradPlusAdImpression(_ adInfo: [String: Any]) {
let currency = "USD" // Assuming USD, adjust if necessary
// Ensure adInfo contains the necessary key and its value is valid
if let ecpmValue = adInfo["ecpm"] as? NSNumber {
let revenue = ecpmValue.doubleValue / 1000.0
// Validate the revenue value
guard revenue > 0 else {
print("Ad Revenue value out of expected range: \(revenue)")
return
}
// Create SingularAdData object with required fields
let data = SingularAdData(
adPlatform: "TradPlus",
currency: currency,
revenue: revenue
)
// Send the Ad Revenue data to Singular
Singular.adRevenue(data)
print("Ad Revenue reported to Singular: \(data)")
} else {
// Log the issue for debugging
print("No eCPM data available in adInfo")
}
}
Como funciona:
- Integração com o TradPlus: Carregue um anúncio premiado do TradPlus e use a função tradPlusAdImpression para lidar com eventos de receita de anúncios.
- Validação de receita: Adicione uma verificação para garantir que a receita seja maior que 0. Isso evita o envio de valores de receita zero ou negativos. O dicionário adInfo contém uma chave"ecpm" com um valor NSNumber válido. Ele converte esse valor em um Double e o dimensiona(normalmente, o ecpm é fornecido em miliunidades, portanto, a divisão por 1000,0 o converte em dólares).
- Validação de moeda: Na amostra abaixo, a moeda é codificada como "USD". Certifique-se de que a moeda é exata e não nula ou vazia antes de enviar dados para o Singular.
- Registo de dados inválidos: Se os dados falharem na validação, imprima uma mensagem de log para depuração e não envie os dados para o Singular.
#import <Singular/Singular.h>
// Set up the delegate
TradPlus.sharedInstance.impressionDelegate = self;
// Delegate method for handling ad impressions
- (void)tradPlusAdImpression:(NSDictionary<NSString *, id> *)adInfo {
NSString *currency = @"USD"; // Assuming USD, adjust if necessary
// Ensure adInfo contains the necessary key and its value is valid
NSNumber *ecpmValue = adInfo[@"ecpm"];
if (ecpmValue) {
double revenue = [ecpmValue doubleValue] / 1000.0;
// Validate the revenue value
if (revenue <= 0) {
NSLog(@"Ad Revenue value out of expected range: %f", revenue);
return;
}
// Create SingularAdData object with required fields
SingularAdData *data = [[SingularAdData alloc] initWithAdPlatfrom:@"TradPlus"
currency:currency
revenue:revenue];
// Send the Ad Revenue data to Singular
[Singular adRevenue:data];
NSLog(@"Ad Revenue reported to Singular: AdPlatform: %@, Currency: %@, Revenue: %f", data.adPlatform, data.currency, data.revenue);
} else {
// Log the issue for debugging
NSLog(@"No eCPM data available in adInfo");
}
}
Notas do parceiro
- Integração genérica: Inicialize um objeto SingularAdData e passe os dados necessários. Os dados devem incluir a adPlatform como uma cadeia de caracteres, a moeda como uma cadeia de caracteres e a receita como um Double.
- Relatório de receita: Verifique se os dados de receita e moeda estão corretos antes de enviá-los para a Singular. Dados incorretos NÃO podem ser corrigidos posteriormente, por isso é crucial garantir que sejam precisos.
- Dica: Registre informações para fins de depuração.
Selecione a base de código para a implementação do SDK:
import Singular
// Function to send Ad Revenue data to Singular
func reportAdRevenue(adPlatform: String, currency: String, revenue: Double) {
// Validate the revenue value
guard revenue > 0 else {
print("Invalid revenue value: \(revenue)")
return
}
// Create a SingularAdData object with the provided fields
let data = SingularAdData(
adPlatform: adPlatform,
currency: currency,
revenue: revenue
)
// Send the Ad Revenue data to Singular
Singular.adRevenue(data)
// Log the data for debugging
print("Ad Revenue reported to Singular: AdPlatform: \(data.adPlatform), Currency: \(data.currency), Revenue: \(data.revenue)")
}
#import <Singular/Singular.h>
// Function to send Ad Revenue data to Singular
- (void)reportAdRevenueWithPlatform:(NSString *)adPlatform currency:(NSString *)currency revenue:(double)revenue {
// Validate the revenue value
if (revenue <= 0) {
NSLog(@"Invalid revenue value: %f", revenue);
return;
}
// Create a SingularAdData object with the provided fields
SingularAdData *data = [[SingularAdData alloc] initWithAdPlatfrom:adPlatform currency:currency revenue:revenue];
// Send the Ad Revenue data to Singular
[Singular adRevenue:data];
// Log the data for debugging
NSLog(@"Ad Revenue reported to Singular: AdPlatform: %@, Currency: %@, Revenue: %f", data.adPlatform, data.currency, data.revenue);
}