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 levaram os 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 os dados das 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 Atribuição de receita de anúncios 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 trechos 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). Nessa função, manipule os dados de 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 a 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
Como funciona:
- Implemente o SDK do Google AdMob Mobile Ads (Android): Consulte o Guia de Introdução.
- Integração com o AdMob: Carregue o anúncio do 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 com.singular.sdk.Singular
import com.singular.sdk.SingularAdData
private const val AD_UNIT_ID = "AD_UNIT_ID"
class AdManager(private val context: Context) {
private var rewardedAd: RewardedAd? = null
fun loadRewardedAd() {
val adRequest = AdRequest.Builder().build()
RewardedAd.load(context, AD_UNIT_ID, adRequest, object : RewardedAdLoadCallback() {
override fun onAdLoaded(ad: RewardedAd) {
rewardedAd = ad
rewardedAd?.fullScreenContentCallback = object : FullScreenContentCallback() {
override fun onAdShowedFullScreenContent() {
Log.d("AdManager", "Rewarded ad displayed.")
}
override fun onAdFailedToShowFullScreenContent(adError: AdError) {
Log.d("AdManager", "Rewarded ad failed to show with error: ${adError.message}")
}
override fun onAdDismissedFullScreenContent() {
Log.d("AdManager", "Rewarded ad dismissed.")
}
}
rewardedAd?.setOnPaidEventListener { adValue: AdValue ->
// Ensure valid revenue data
val revenue = adValue.valueMicros / 1_000_000.0
val currency = adValue.currencyCode
if (revenue > 0 && !currency.isNullOrEmpty()) {
val data = SingularAdData(
"Admob",
currency,
revenue
)
// Send Ad Revenue data to Singular
Singular.adRevenue(data)
// Log the data for debugging
Log.d("AdManager", "Ad Revenue reported to Singular: $data")
} else {
Log.d("AdManager", "Invalid ad revenue data: revenue = $revenue, currency = $currency")
}
}
}
override fun onAdFailedToLoad(loadAdError: LoadAdError) {
Log.d("AdManager", "Rewarded ad failed to load with error: ${loadAdError.message}")
}
})
}
}
Como funciona:
- Implemente o SDK do Google AdMob Mobile Ads (Android): Consulte o Guia de Introdução.
- Integração com o AdMob: Carregue o anúncio do 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 com.singular.sdk.Singular;
import com.singular.sdk.SingularAdData;
// Define constants for better maintainability
private static final String AD_UNIT_ID = "AD_UNIT_ID";
public class AdManager {
private RewardedAd rewardedAd;
private Context context;
public AdManager(Context context) {
this.context = context;
}
public void loadRewardedAd() {
AdRequest adRequest = new AdRequest.Builder().build();
RewardedAd.load(context, AD_UNIT_ID, adRequest, new RewardedAdLoadCallback() {
@Override
public void onAdLoaded(RewardedAd ad) {
rewardedAd = ad;
rewardedAd.setFullScreenContentCallback(new FullScreenContentCallback() {
@Override
public void onAdShowedFullScreenContent() {
Log.d("AdManager", "Rewarded ad displayed.");
}
@Override
public void onAdFailedToShowFullScreenContent(AdError adError) {
Log.d("AdManager", "Rewarded ad failed to show with error: " + adError.getMessage());
}
@Override
public void onAdDismissedFullScreenContent() {
Log.d("AdManager", "Rewarded ad dismissed.");
}
});
rewardedAd.setOnPaidEventListener(new OnPaidEventListener() {
@Override
public void onPaidEvent(AdValue adValue) {
double revenue = adValue.getValueMicros() / 1_000_000.0;
String currency = adValue.getCurrencyCode();
// Validate the revenue value
if (revenue <= 0 || currency == null || currency.isEmpty()) {
Log.d("AdManager", "Invalid ad revenue data: revenue = " + revenue + ", currency = " + currency);
return;
}
SingularAdData data = new SingularAdData(
"Admob",
currency,
revenue
);
// Send Ad Revenue data to Singular
Singular.adRevenue(data);
// Log the data for debugging
Log.d("AdManager", "Ad Revenue reported to Singular: " + data);
}
});
}
@Override
public void onAdFailedToLoad(LoadAdError loadAdError) {
Log.d("AdManager", "Rewarded ad failed to load with error: " + loadAdError.getMessage());
}
});
}
}
Como funciona:
- Implemente o SDK do Google AdMob Mobile Ads (Flutter): Consulte o Guia de Introdução.
- Integração com o AdMob: Carregue o anúncio do AdMob e defina um callback onPaidEvent 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 'package:singular_flutter_sdk/singular_flutter_sdk.dart';
const String adUnitId = 'YOUR_AD_UNIT_ID';
class AdManager {
RewardedAd? _rewardedAd;
void loadRewardedAd() {
RewardedAd.load(
adUnitId: adUnitId,
request: AdRequest(),
rewardedAdLoadCallback: RewardedAdLoadCallback(
onAdLoaded: (RewardedAd ad) {
_rewardedAd = ad;
_rewardedAd?.fullScreenContentCallback = FullScreenContentCallback(
onAdShowedFullScreenContent: () {
print('Rewarded ad displayed.');
},
onAdFailedToShowFullScreenContent: (AdError adError) {
print('Rewarded ad failed to show with error: ${adError.message}');
},
onAdDismissedFullScreenContent: () {
print('Rewarded ad dismissed.');
_rewardedAd = null; // Clear the ad when it is dismissed
},
);
_rewardedAd?.onPaidEvent = (AdValue adValue) {
double revenue = adValue.valueMicros / 1_000_000.0; // Convert from micros to dollars
String? currency = adValue.currencyCode;
// Validate the revenue and currency before sending to Singular
if (revenue > 0 && currency != null && currency.isNotEmpty) {
final data = {
'adPlatform': 'Admob',
'currency': currency,
'revenue': revenue,
};
// Send Ad Revenue data to Singular
Singular.adRevenue(data);
// Log the data for debugging
print('Ad Revenue reported to Singular: $data');
} else {
print('Invalid ad revenue data: revenue = $revenue, currency = $currency');
}
};
},
onAdFailedToLoad: (LoadAdError loadAdError) {
print('Rewarded ad failed to load with error: ${loadAdError.message}');
},
),
);
}
}
Como isso funciona:
- O Cordova não é oficialmente suportado pelo Google e requer o uso de um plug-in Cordova de terceiros. O AdMob Plus Cordova é o sucessor do cordova-plugin-admob-free, que fornece uma API mais limpa e é construído com ferramentas modernas. Este plugin não é suportado pelo Singular. Consulte o Guia de introdução.
- Inicialização do AdMob: Crie uma instância para o formato de anúncio com a ID do bloco de anúncios. Certifique-se de substituir 'ca-app-pub-xxx/yyy' pela ID real do bloco de anúncios.
- Tratamento de eventos: Accione o retorno de chamada do evento pago: Este evento fornece o código da receita e da moeda. Valide esses valores e converta a receita de micros para dólares. Envie esses dados para o Singular. Tratar os eventos de ciclo de vida "carregar", "mostrar", "descartar" e "erro" com registo, se necessário.
- Validação de dados: Certifique-se de que a receita é maior que zero e o código da moeda está presente antes de enviar os dados para a Singular.
- Integração com o Singular: Use o objeto SingularAdData para preparar os dados e chame adRevenue para enviar os dados para o Singular.
document.addEventListener('deviceready', async () => {
const admob = window.cordova.plugins.AdMobPlus;
// Initialize RewardedAd
const rewarded = admob.RewardedAd.create({
adUnitId: 'ca-app-pub-xxx/yyy', // Replace with your ad unit ID
// Optional configurations
isTesting: true, // Set to false when going live
});
// Handle the 'paid' event to get revenue details
rewarded.on('paid', (event) => {
const { value, currencyCode } = event;
// Validate the revenue and currency data
if (value > 0 && currencyCode) {
const revenueAmount = value / 1_000_000.0; // Convert from micros to dollars
// Prepare data for Singular
const adData = new cordova.plugins.SingularCordovaSdk.SingularAdData(
'Admob', // Mediation platform
currencyCode, // Currency code
revenueAmount // Revenue amount
);
// Send Ad Revenue data to Singular
cordova.plugins.SingularCordovaSdk.adRevenue(adData);
// Log the data for debugging
console.log('Ad Revenue reported to Singular:', {
adPlatform: 'Admob',
currency: currencyCode,
revenue: revenueAmount
});
} else {
console.error('Invalid ad revenue data:', { value, currencyCode });
}
});
// Handle ad load and show events
rewarded.on('load', async () => {
console.log('Rewarded ad loaded.');
// Load the next ad as soon as the current one is dismissed
await rewarded.load();
});
rewarded.on('show', () => {
console.log('Rewarded ad shown.');
});
rewarded.on('dismiss', async () => {
console.log('Rewarded ad dismissed.');
// Load a new ad for future use
await rewarded.load();
});
rewarded.on('error', (error) => {
console.error('Error with rewarded ad:', error);
});
// Load and show the rewarded ad
await rewarded.load();
await rewarded.show();
}, false);
Como funciona:
- Implemente o pacote React Native Google Mobile Ads: Consulte o Guia de introdução.
- Integração com o AdMob: Carregue o anúncio do AdMob e defina um onAdEvent 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 } from 'singular-react-native';
const adUnitID = 'AD_UNIT_ID';
const loadRewardedAd = () => {
// Create a RewardedAd instance with the provided adUnitID
const rewardedAd = RewardedAd.createForAdRequest(adUnitID);
// Set up event listener for ad events
rewardedAd.onAdEvent((type, error, data) => {
if (type === AdEventType.LOADED) {
console.log('Rewarded ad loaded');
} else if (type === AdEventType.ERROR) {
console.error('Rewarded ad failed to load', error);
} else if (type === AdEventType.PAID_EVENT) {
// Extract value and currencyCode from event data
const { value, currencyCode } = data;
// Validate the revenue and currency before sending to Singular
if (value > 0 && currencyCode) {
const revenue = value / 1_000_000.0; // Convert from micros to dollars
const adRevenueData = {
'Admob',
currency: currencyCode,
revenue,
};
// Send Ad Revenue data to Singular
Singular.adRevenue(adRevenueData);
// Log the data for debugging
console.log('Ad Revenue reported to Singular:', adRevenueData);
} else {
console.error('Invalid ad revenue data:', { value, currencyCode });
}
}
});
// Load the rewarded ad
rewardedAd.load();
};
useEffect(() => {
// Load the rewarded ad when the component mounts
loadRewardedAd();
}, []);
Como funciona:
- Implemente o SDK do Google AdMob Mobile Ads (Unity): Consulte o Guia de introdução.
- Ouça os eventos de anúncios premiados conforme documentado na documentação do Google AdMob AQUI
- Integração com a AdMob: Carregue o anúncio da AdMob e defina uma chamada de retorno OnAdPaid para quando o anúncio tiver gerado dinheiro.
- 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.
using Singular;
private void RegisterEventHandlers(RewardedAd ad)
{
// Raised when the ad is estimated to have earned money.
ad.OnAdPaid += (AdValue adValue) =>
{
// Validate and ensure revenue data is within an expected range
float revenue = adValue.Value / 1_000_000f; // Convert micros to dollars
string currency = adValue.CurrencyCode;
// Check if revenue is positive and currency is valid
if (revenue > 0 && !string.IsNullOrEmpty(currency))
{
// Construct and send the Singular AdMon Event
SingularAdData data = new SingularAdData(
"Admob",
currency,
revenue
);
SingularSDK.AdRevenue(data);
// Log the revenue data for debugging purposes
Debug.Log($"Ad Revenue reported to Singular: {data}");
}
else
{
Debug.LogError($"Invalid ad revenue data: revenue = {revenue}, currency = {currency}");
}
};
}
Notas do parceiro
- Compartilhe dados de receita de anúncios em nível de impressão usando a API de receita do 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: 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/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");
}
}
}
Como funciona:
- Usa a API AppLovin Impression-Level User Revenue (Android): Consulte o Guia de Introdução.
- Integração com o AppLovin: Carregue um anúncio recompensado do AppLovin MAX e use a função onMessageReceived 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 com.singular.sdk.*
override fun onMessageReceived(message: AppLovinCommunicatorMessage) {
// In the case that you are subscribed to multiple topics, check for the desired one
if ("max_revenue_events" == message.topic) {
val adData: Bundle? = message.messageData
// Safely access and validate revenue value
val revenueValue = adData?.getDouble("revenue", 0.0) ?: 0.0
if (revenueValue > 0) {
val data = SingularAdData(
adPlatform = "AppLovin",
currency = "USD",
revenue = revenueValue
)
Singular.adRevenue(data)
} else {
Log.e("AppLovinRevenue", "Failed to parse valid revenue value from message data or revenue is not greater than 0")
}
}
}
Como funciona:
- Usa a API AppLovin Impression-Level User Revenue (Android): Consulte o Guia de Introdução.
- Integração com o AppLovin: Carregue um anúncio recompensado do AppLovin MAX e use a função onMessageReceived 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 com.singular.sdk.*;
@Override
public void onMessageReceived(AppLovinCommunicatorMessage message) {
// In the case that you are subscribed to multiple topics, check for the desired one
if ("max_revenue_events".equals(message.getTopic())) {
Bundle adData = message.getMessageData();
// Safely access and validate revenue value
double revenueValue = (adData != null) ? adData.getDouble("revenue", 0.0) : 0.0;
if (revenueValue > 0) {
SingularAdData data = new SingularAdData(
"AppLovin",
"USD",
revenueValue
);
Singular.adRevenue(data);
} else {
Log.e("AppLovinRevenue", "Failed to parse valid revenue value from message data or revenue is not greater than 0");
}
}
}
Como funciona:
- Usa a API AppLovin Impression-Level User Revenue (Flutter): Consulte o Guia de Introdução.
- Integração com o AppLovin: Configure ouvintes de anúncios para o onAdRevenuePaidCallback e passe os dados do anúncio para uma função handleAdRevenuePaid 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 'package:singular_flutter_sdk/singular.Flutter';
@override
void initState() {
super.initState();
// Set up ad listeners
AppLovinMAX.setInterstitialListener(InterstitialListener(
onAdRevenuePaidCallback: (ad) {
_handleAdRevenuePaid(ad);
},
));
AppLovinMAX.setRewardedAdListener(RewardedAdListener(
onAdRevenuePaidCallback: (ad) {
_handleAdRevenuePaid(ad);
},
));
AppLovinMAX.setBannerListener(AdViewAdListener(
onAdRevenuePaidCallback: (ad) {
_handleAdRevenuePaid(ad);
},
));
AppLovinMAX.setMRecListener(AdViewAdListener(
onAdRevenuePaidCallback: (ad) {
_handleAdRevenuePaid(ad);
},
));
}
void _handleAdRevenuePaid(Ad ad) {
final double revenueValue = ad.revenue ?? 0.0;
final String currency = ad.currency ?? 'USD'; // Default to 'USD' if currency is not available
if (revenue > 0) {
final SingularAdData adData = SingularAdData(
adPlatform: "AppLovin",
currency: currency,
revenue: revenueValue,
);
Singular.adRevenue(adData);
_logger.i('Sent ad revenue to Singular: $revenueValue $currency');
} else {
_logger.e('Failed to parse valid revenue value from ad revenue data or revenue is not greater than 0');
}
}
Não suportado:
O SDK Cordova do AppLovin não suporta nativamente a captura de informações de receita de anúncios por meio do objeto adInfo. O SDK do Cordova é normalmente mais limitado em termos de recursos avançados em comparação com os SDKs nativos para Android e iOS.
Para o rastreio avançado de receitas de anúncios, poderá ter de se integrar diretamente com os SDKs nativos da AppLovin ou utilizar um plug-in personalizado para ligar a funcionalidade entre o Cordova e os SDKs nativos. Se precisar de dados de receita de anúncios, considere entrar em contacto com o suporte da AppLovin para obter as informações mais recentes ou procurar métodos alternativos para capturar esses dados.
Como funciona:
- Utiliza a API de receita do utilizador ao nível da impressão da AppLovin (React Native): Consulte o Guia de Introdução.
- Integração com o AppLovin: Carregue um anúncio recompensado do AppLovin MAX e recupere o valor da receita em todos os callbacks do ciclo de vida do anúncio.
- 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 está 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 from 'singular-react-native';
// Function to handle ad revenue
const handleAdRevenue = (adInfo) => {
const revenue = adInfo.revenue;
if (revenue > 0) {
const adData = {
adPlatform: "AppLovin",
currency: "USD", // AppLovin typically reports revenue in USD
revenue: revenue,
};
// Send ad revenue data to Singular
Singular.adRevenue(adData);
} else {
console.error("Failed to parse valid revenue value from ad info or revenue is not greater than 0");
}
};
// Set up listeners for various ad types
InterstitialAd.addAdRevenuePaidListener(handleAdRevenue);
RewardedAd.addAdRevenuePaidListener(handleAdRevenue);
BannerAd.addAdRevenuePaidListener(handleAdRevenue);
MRecAd.addAdRevenuePaidListener(handleAdRevenue);
AppOpenAd.addAdRevenuePaidListener(handleAdRevenue);
Como funciona:
- Usa a API AppLovin Impression-Level User Revenue (Unity): Consulte o Guia de Introdução.
- Integração com o AppLovin: Carrega um anúncio recompensado do AppLovin MAX e recupera o valor da receita em todos os callbacks do ciclo de vida do anúncio.
- 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 está 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.
using Singular;
public class AdRevenueHandler : MonoBehaviour
{
void Start()
{
// Attach callbacks based on the ad format(s) you are using
MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.MRec.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
}
private void OnAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
double revenue = adInfo.Revenue;
if (revenue > 0)
{
// Create a SingularAdData object with relevant information
SingularAdData adData = new SingularAdData(
"Applovin",
"USD",
revenue);
// Send ad revenue data to Singular
SingularSDK.AdRevenue(adData);
}
else
{
Debug.LogError("Failed to parse valid revenue value from ad info or revenue is not greater than 0");
}
}
void OnDestroy()
{
// Detach callbacks to prevent memory leaks
MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent -= OnAdRevenuePaidEvent;
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent -= OnAdRevenuePaidEvent;
MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent -= OnAdRevenuePaidEvent;
MaxSdkCallbacks.MRec.OnAdRevenuePaidEvent -= OnAdRevenuePaidEvent;
}
}
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:
- 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 recompensado 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
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
Como funciona:
- Usa o SDK do ironSource para obter a receita do usuário em nível de impressão (Android): Consulte o Guia de introdução.
- Integração com o Ironsource: Carrega um anúncio premiado da Ironsource e usa a função onImpressionDataSuccess 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 com.singular.sdk.Singular
// Method called when impression data is successfully received
fun onImpressionDataSuccess(impressionData: ISImpressionData?) {
// Ensure impressionData is not null
if (impressionData == null) {
Log.d("IronSource", "No impression data available.")
return
}
// Ensure revenue value is valid
val revenue = impressionData.revenue.toDouble()
if (revenue <= 0) {
Log.w("IronSource", "Invalid revenue value: $revenue")
return
}
// Create SingularAdData object with required fields
val data = SingularAdData(
adPlatform = "IronSource",
currency = "USD",
revenue = revenue
)
// Send the Ad Revenue data to Singular
Singular.adRevenue(data)
// Log the data for debugging
Log.i("IronSource", "Ad Revenue reported to Singular: AdPlatform: ${data.adPlatform}, Currency: ${data.currency}, Revenue: ${data.revenue}")
}
Como funciona:
- Usa o SDK do ironSource para obter a receita do usuário em nível de impressão (Android): Consulte o Guia de introdução.
- Integração com o Ironsource: Carrega um anúncio premiado da Ironsource e usa a função onImpressionDataSuccess 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 com.singular.sdk.Singular;
import com.singular.sdk.SingularAdData;
public class IronSourceAdManager {
// Method called when impression data is successfully received
public void onImpressionDataSuccess(ISImpressionData impressionData) {
// Ensure impressionData is not null
if (impressionData == null) {
Log.d("IronSource", "No impression data available.");
return;
}
// Ensure revenue value is valid
double revenue = impressionData.getRevenue().doubleValue();
if (revenue <= 0) {
Log.w("IronSource", "Invalid revenue value: " + revenue);
return;
}
// Create SingularAdData object with required fields
SingularAdData data = new SingularAdData(
"IronSource", // adPlatform
"USD", // currency
revenue // revenue
);
// Send the Ad Revenue data to Singular
Singular.adRevenue(data);
// Log the data for debugging
Log.i("IronSource", "Ad Revenue reported to Singular: AdPlatform: " + data.getAdPlatform() +
", Currency: " + data.getCurrency() +
", Revenue: " + data.getRevenue());
}
}
Como funciona:
- Usa o ironSource Flutter Plugin para obter a receita do usuário em nível de impressão: Consulte o Guia de Introdução.
- Integração com o Ironsource: Carrega um anúncio premiado da Ironsource e usa a função onImpressionDataSuccess 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 'package:singular_flutter_sdk/singular.Flutter';
// Method called when impression data is successfully received
void onImpressionDataSuccess(ISImpressionData? impressionData) {
// Ensure impressionData is not null
if (impressionData == null) {
print("No impression data available.");
return;
}
// Ensure revenue value is valid
final revenue = impressionData.revenue.toDouble();
if (revenue <= 0) {
print("Invalid revenue value: $revenue");
return;
}
// Create SingularAdData object with required fields
final data = SingularAdData(
adPlatform: "IronSource",
currency: "USD",
revenue: revenue,
);
// Send the Ad Revenue data to Singular
Singular.adRevenue(data);
// Log the data for debugging
if (kDebugMode) {
print("Ad Revenue reported to Singular: AdPlatform: ${data.adPlatform}, Currency: ${data.currency}, Revenue: ${data.revenue}");
}
}
Não suportado:
O ironSource não oferece suporte nativo à captura de receita de anúncios na estrutura do Cordova.
Para rastreamento avançado de receita de anúncios, talvez seja necessário integrar-se diretamente aos SDKs nativos do ironSource ou usar um plug-in personalizado para fazer a ponte entre o Cordova e os SDKs nativos. Se necessitar de dados de receitas de anúncios, considere contactar o suporte do ironSource para obter as informações mais actualizadas ou procurar métodos alternativos para captar esses dados.
Como funciona:
- Utiliza o React Native Plugin da ironSource para obter a receita do utilizador ao nível da impressão: Consulte o Guia de Introdução.
- Integração com o Ironsource: Carrega um anúncio premiado da Ironsource e usa o ouvinte onImpressionDataSuccess 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 } from 'singular-react-native';
const { IronSourceModule } = NativeModules;
const ironSourceEventEmitter = new NativeEventEmitter(IronSourceModule);
const AD_PLATFORM = 'IronSource';
const CURRENCY = 'USD'; // Assuming USD, adjust if necessary
ironSourceEventEmitter.addListener('onImpressionDataSuccess', (impressionData) => {
if (!impressionData) {
console.log('No impression data available.');
return;
}
const revenue = impressionData.revenue;
// Validate the revenue to ensure it is within the expected range
if (revenue <= 0) {
console.warn(`Invalid revenue value: ${revenue}`);
return;
}
// Create SingularAdData object with valid values
const data = {
adPlatform: AD_PLATFORM,
currency: CURRENCY,
revenue: revenue,
};
// Send the revenue data to Singular
Singular.adRevenue(data);
// Log the data for debugging purposes
console.log(`Ad Revenue reported to Singular: AdPlatform: ${data.adPlatform}, Currency: ${data.currency}, Revenue: ${data.revenue}`);
});
Como funciona:
- Usa o ironSource Unity Plugin para obter a receita do usuário em nível de impressão: Consulte o Guia de Introdução.
- Integração com o Ironsource: Carrega um anúncio premiado da Ironsource e usa a função ImpressionDataReadyEvent 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.
using Singular;
public class IronSourceRewardedAdViewController : MonoBehaviour
{
void Start()
{
// Ensure the listener is added before initializing the SDK
IronSourceEvents.onImpressionDataReadyEvent += ImpressionDataReadyEvent;
// Initialize the IronSource SDK here if not already done
// IronSource.Agent.init("YOUR_IRONSOURCE_APP_KEY");
}
private void ImpressionDataReadyEvent(IronSourceImpressionData impressionData)
{
if (impressionData != null)
{
// Ensure revenue value is valid
double? revenue = impressionData.revenue;
if (revenue.HasValue && revenue.Value > 0)
{
// Create SingularAdData object with appropriate values
SingularAdData adData = new SingularAdData(
"IronSource",
"USD",
revenue.Value
);
// Send the Ad Revenue data to Singular
SingularSDK.AdRevenue(adData);
// Log the data for debugging
Debug.Log($"Ad Revenue reported to Singular: AdPlatform: {adData.AdPlatform}, Currency: {adData.Currency}, Revenue: {adData.Revenue}");
}
else
{
Debug.LogError($"Invalid revenue value: {revenue}");
}
}
else
{
Debug.LogError("Impression data is null.");
}
}
void OnDestroy()
{
// Detach the callback to prevent memory leaks
IronSourceEvents.onImpressionDataReadyEvent -= ImpressionDataReadyEvent;
}
}
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: 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: 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");
}
}
Como funciona:
- Integração com o TradPlus: Carregue um anúncio premiado do TradPlus e use a função onImpressionSuccess para tratar os eventos de receita do anúncio.
- 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 com.singular.sdk.Singular
import com.singular.sdk.SingularAdData
// Set the global impression listener for TradPlus
TradPlusSdk.setGlobalImpressionListener(
object : GlobalImpressionManager.GlobalImpressionListener {
override fun onImpressionSuccess(tpAdInfo: TPAdInfo?) {
// Ensure tpAdInfo is not null
if (tpAdInfo == null) {
println("AdInfo is null")
return
}
// Calculate revenue (assuming ecpm is a valid field)
val revenue = tpAdInfo.ecpm.toDouble() / 1000
// Validate the revenue value
if (revenue <= 0) {
println("Ad Revenue value out of expected range: $revenue")
return
}
// Create SingularAdData object with required fields
val data = SingularAdData(
adPlatform = "TradPlus",
currency = "USD", // Assuming USD, adjust if necessary
revenue = revenue
)
// Send the Ad Revenue data to Singular
Singular.adRevenue(data)
// Log for debugging
println("Ad Revenue reported to Singular: AdPlatform: ${data.adPlatform}, Currency: ${data.currency}, Revenue: ${data.revenue}")
}
}
)
Como funciona:
- Integração com o TradPlus: Carregue um anúncio premiado do TradPlus e use a função onImpressionSuccess para tratar os eventos de receita do anúncio.
- 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 com.singular.sdk.Singular;
import com.singular.sdk.SingularAdData;
public class AdImpressionListener implements GlobalImpressionManager.GlobalImpressionListener {
private static final String TAG = "AdImpressionListener";
@Override
public void onImpressionSuccess(TPAdInfo tpAdInfo) {
// Ensure tpAdInfo is not null
if (tpAdInfo == null) {
Log.e(TAG, "AdInfo is null");
return;
}
// Ensure eCPM is valid and not null
if (tpAdInfo.getEcpm() == null) {
Log.e(TAG, "eCPM value is null");
return;
}
// Calculate revenue (assuming ecpm is in micros)
double revenue = tpAdInfo.getEcpm().doubleValue() / 1000;
// Validate the revenue value
if (revenue <= 0) {
Log.e(TAG, "Ad Revenue value out of expected range: " + revenue);
return;
}
// Create SingularAdData object with required fields
SingularAdData data = new SingularAdData(
"TradPlus",
"USD",
revenue
);
// Send the Ad Revenue data to Singular
Singular.adRevenue(data);
// Log for debugging
Log.d(TAG, "Ad Revenue reported to Singular: AdPlatform: " + data.getAdPlatform() +
", Currency: " + data.getCurrency() + ", Revenue: " + data.getRevenue());
}
}
Como funciona:
- Integração com o TradPlus: Carregue um anúncio premiado do TradPlus e use o setGlobalImpressionListener 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 'package:singular_flutter_sdk/singular.dart';
void setupTradPlusImpressionListener() {
// Set up the global impression listener
TradPlusSdk.setGlobalImpressionListener((tpAdInfo) {
if (tpAdInfo == null) {
print("AdInfo is null");
return;
}
// Ensure eCPM is not null
if (tpAdInfo.ecpm == null) {
print("eCPM value is null");
return;
}
// Calculate revenue (assuming ecpm is in micros)
double revenue = tpAdInfo.ecpm / 1000.0;
// Validate the revenue value
if (revenue <= 0) {
print("Ad Revenue value out of expected range: $revenue");
return;
}
// Create SingularAdData object
final data = SingularAdData(
adPlatform: "TradPlus", // Ad platform name
currency: "USD", // Currency
revenue: revenue // Revenue
);
// Send the Ad Revenue data to Singular
Singular.adRevenue(data);
// Print log for debugging
print("Ad Revenue reported to Singular: AdPlatform: ${data.adPlatform}, Currency: ${data.currency}, Revenue: ${data.revenue}");
});
}
void main() {
// Initialize TradPlus SDK and other setup
setupTradPlusImpressionListener();
// Run your app
runApp(MyApp());
}
Não suportado:
O TradPlus não suporta nativamente a captura de informações de receita de anúncios através do objeto adInfo. O SDK do Cordova é normalmente mais limitado em termos de recursos avançados em comparação com os SDKs nativos para Android e iOS.
Para um acompanhamento avançado das receitas dos anúncios, poderá ter de se integrar diretamente nos SDKs nativos do TradPlus ou utilizar um plug-in personalizado para ligar a funcionalidade entre o Cordova e os SDKs nativos. Se necessitar de dados de receitas de anúncios, considere contactar o suporte da AppLovin para obter as informações mais actualizadas ou procurar métodos alternativos para capturar esses dados.
Como funciona:
- Integração com o TradPlus: Carregue um anúncio recompensado do TradPlus e defina um ouvinte onImpressionSuccess 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 { NativeModules, NativeEventEmitter } from 'react-native';
import { Singular } from 'singular-react-native';
const { TradPlusModule } = NativeModules;
const tradPlusEventEmitter = new NativeEventEmitter(TradPlusModule);
const AD_PLATFORM = 'TradPlus';
const CURRENCY = 'USD'; // Assuming USD, adjust if necessary
tradPlusEventEmitter.addListener('onImpressionSuccess', (tpAdInfo) => {
if (!tpAdInfo) {
console.log('AdInfo is null');
return;
}
const revenue = tpAdInfo.ecpm / 1000;
// Validate the revenue to ensure it is within the expected range
if (revenue <= 0) {
console.warn(`Ad Revenue value out of expected range: ${revenue}`);
return;
}
// Create the ad revenue data object
const data = {
adPlatform: AD_PLATFORM,
currency: CURRENCY,
revenue: revenue,
};
// Send the revenue data to Singular
Singular.adRevenue(data);
// Log the data for debugging purposes
console.log(`Ad Revenue reported to Singular: AdPlatform: ${data.adPlatform}, Currency: ${data.currency}, Revenue: ${data.revenue}`);
});
Como funciona:
- Integração com o TradPlus: Carregue um anúncio premiado do TradPlus e use a função onImpressionSuccess para tratar os eventos de receita do anúncio.
- 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.
using Singular;
public class AdImpressionListener : MonoBehaviour
{
private const string TAG = "AdImpressionListener";
void Start()
{
// Add Global Ad Impression Listener
TradplusAds.Instance().AddGlobalAdImpression(OnGlobalAdImpression);
}
void OnGlobalAdImpression(Dictionary<string, object> adInfo)
{
// Ensure adInfo is not null
if (adInfo == null)
{
Debug.LogError($"{TAG}: AdInfo is null");
return;
}
// Ensure eCPM is present and valid
if (!adInfo.ContainsKey("ecpm") || adInfo["ecpm"] == null)
{
Debug.LogError($"{TAG}: eCPM value is null or missing");
return;
}
// Parse the eCPM value
if (!double.TryParse(adInfo["ecpm"].ToString(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out double revenue))
{
Debug.LogError($"{TAG}: Failed to parse eCPM value");
return;
}
// Convert eCPM to revenue (assuming eCPM is in micros)
revenue = revenue / 1000;
// Validate the revenue value
if (revenue <= 0)
{
Debug.LogError($"{TAG}: Ad Revenue value out of expected range: " + revenue);
return;
}
// Create SingularAdData object with the necessary fields
SingularAdData data = new SingularAdData(
"TradPlus", // Ad platform name
"USD", // Currency
revenue // Revenue value
);
// Send the Ad Revenue data to Singular
SingularSDK.AdRevenue(data);
// Log the data for debugging purposes
Debug.Log($"{TAG}: Ad Revenue reported to Singular: AdPlatform: {data.AdPlatform}, Currency: {data.Currency}, Revenue: {data.Revenue}");
}
}
Notas do parceiro
- Integração genérica: Inicialize um objeto SingularAdData e passe os dados necessários. Os dados devem incluir o 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);
}
import com.singular.sdk.Singular
import com.singular.sdk.SingularAdData
// Function to send Ad Revenue data to Singular
fun reportAdRevenue(adPlatform: String, currency: String, revenue: Double) {
// Validate the revenue value
if (revenue <= 0) {
println("Invalid revenue value: $revenue")
return
}
// Create a SingularAdData object with the provided fields
val data = SingularAdData(
adPlatform = adPlatform,
currency = currency,
revenue = revenue
)
// Send the Ad Revenue data to Singular
Singular.adRevenue(data)
// Log the data for debugging
println("Ad Revenue reported to Singular: AdPlatform: ${data.adPlatform}, Currency: ${data.currency}, Revenue: ${data.revenue}")
}
import com.singular.sdk.Singular;
import com.singular.sdk.SingularAdData;
// Function to send Ad Revenue data to Singular
public void reportAdRevenue(String adPlatform, String currency, double revenue) {
// Validate the revenue value
if (revenue <= 0) {
Log.w("AdRevenue", "Invalid revenue value: " + revenue);
return;
}
// Create a SingularAdData object with the provided fields
SingularAdData data = new SingularAdData(
adPlatform, // adPlatform
currency, // currency
revenue // revenue
);
// Send the Ad Revenue data to Singular
Singular.adRevenue(data);
// Log the data for debugging
Log.d("AdRevenue", "Ad Revenue reported to Singular: AdPlatform: " + data.getAdPlatform() + ", Currency: " + data.getCurrency() + ", Revenue: " + data.getRevenue());
}
import 'package:singular_flutter_sdk/singular.Flutter';
// Function to send Ad Revenue data to Singular
void reportAdRevenue({
required String adPlatform,
required String currency,
required double revenue,
}) {
// Validate the revenue value
if (revenue <= 0) {
print('Invalid revenue value: $revenue');
return;
}
// Create a SingularAdData object with the provided fields
final 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}');
}
// Function to report Ad Revenue to Singular
function reportAdRevenue(mediationPlatform, currencyCode, revenueAmount) {
// Validate input values
if (!mediationPlatform || !currencyCode || typeof revenueAmount !== 'number' || revenueAmount <= 0) {
console.error("Invalid input for Ad Revenue reporting: ", {
mediationPlatform,
currencyCode,
revenueAmount
});
return;
}
try {
// Create a SingularAdData object
const adData = new cordova.plugins.SingularCordovaSdk.SingularAdData(
mediationPlatform,
currencyCode, // e.g., "USD"
revenueAmount
);
// Report Ad Revenue to Singular
cordova.plugins.SingularCordovaSdk.adRevenue(adData);
// Log success
console.log("Ad Revenue reported successfully: ", {
mediationPlatform: adData.mediationPlatform,
currencyCode: adData.currencyCode,
revenueAmount: adData.revenueAmount
});
} catch (error) {
// Log any errors that occur during the process
console.error("Failed to report Ad Revenue: ", error);
}
}
import { Singular } from 'singular-react-native';
const reportAdRevenue = (adPlatform, currency, revenue) => {
// Validate the revenue value
if (revenue <= 0) {
console.warn(`Invalid revenue value: ${revenue}`);
return;
}
// Create a SingularAdData object with the provided fields
const data = {
adPlatform: adPlatform,
currency: currency,
revenue: revenue,
};
// Send the Ad Revenue data to Singular
Singular.adRevenue(data);
// Log the data for debugging
console.log(`Ad Revenue reported to Singular: AdPlatform: ${data.adPlatform}, Currency: ${data.currency}, Revenue: ${data.revenue}`);
};
using Singular;
public class AdRevenueReporter : MonoBehaviour
{
// Function to report ad revenue to Singular
public void ReportAdRevenue(string adPlatform, float revenueInMicros, string currency)
{
// Convert revenue from micros to the standard unit (e.g., dollars)
float revenue = revenueInMicros / 1_000_000f;
// Validate the input: ensure revenue is positive and currency is not null or empty
if (revenue > 0 && !string.IsNullOrEmpty(currency))
{
// Create a SingularAdData object with the validated data
SingularAdData data = new SingularAdData(
adPlatform,
currency,
revenue
);
// Send the ad revenue data to Singular
SingularSDK.AdRevenue(data);
// Log the reported data for debugging
Debug.Log($"Ad Revenue reported to Singular: Platform = {adPlatform}, Currency = {currency}, Revenue = {revenue}");
}
else
{
// Log a warning if validation fails
Debug.LogWarning("Invalid ad revenue data: " +
$"Platform = {adPlatform}, Revenue = {revenue}, Currency = {currency}");
}
}
}