Методы Обратного Вызова Для Отслеживания Дохода От Рекламы
Appodeal SDK позволяет вам получить данные о доходе от рекламы на уровне показа с помощью Ad Revenue Callbacks. Эти данные включают в себя такую информацию, как название рекламной сети, доход, тип рекламы, и т.д.
Данные о доходе от рекламы на уровне показа могут использоваться для отправки в сторонние SDK, такие как Firebase, для всех поддерживаемых рекламных сетей.
Если вы уже интегрировали Firebase, который включен в Appodeal SDK, используя инструкцию, то данные о доходе от рекламы будут отправлены автоматически, можете почитать подробнее здесь во втором шаге.
Appodeal SDK 3.0.1+
Реализация Методов Обратного Вызова
- Kotlin
 - Java
 
Appodeal.setAdRevenueCallbacks(object : AdRevenueCallbacks {
    override fun onAdRevenueReceive(revenueInfo: RevenueInfo) {
        // Вызывается всякий раз, когда SDK получает информацию о доходах по рекламе.
    }
}
Appodeal.setAdRevenueCallbacks(new AdRevenueCallbacks() {
    @Override
    public void onAdRevenueReceive(@NotNull RevenueInfo revenueInfo) {
        // Вызывается всякий раз, когда SDK получает информацию о доходах по рекламе.
    }
});
Вcе callback методы вызываются в главном потоке.
Для получения дохода от рекламы на уровне показов от Admob вам также необходимо включить эту настройку в вашей учетной записи AdMob.
Перейдите в Admob Account Settings → Account → включите Impression-level ad revenue переключатель.
Описание Appodeal Ad Revenue
RevenueInfo - представляет информацию о доходах от рекламных сетей.
| Параметр | Тип | Описание | 
|---|---|---|
| networkName | String | Имя рекламной сети, гарантированно не пустое. | 
| demandSource | String | Имя источника спроса и имя участника торгов в случае показа в результате торгов в реальном времени, гарантированно не пустое. | 
| adUnitName | String | Уникальное название рекламного блока гарантированно не пустое. | 
| placement | String | Имя плейсмента в Appodeal гарантированно не пустое. | 
| revenue | Double | Сумма дохода от объявления или 0, если его не существует. | 
| adType | Int | Тип рекламы Appodeal. | 
| adTypeString | String | Тип рекламы Appodeal в строковом представлении. | 
| platform | String | Название платформы Appodeal. | 
| revenueCurrency | RevenueCurrency | Текущая валюта, поддерживаемая Appodeal (USD). | 
| currency | String | Текущая валюта, поддерживаемая Appodeal (USD) в строковом представлении. | 
| revenuePrecision | String | Точность дохода. | 
exact- программный доход - это итоговая цена аукциона;publisher_defined- доход от кросс-промо кампаний;estimated- доход на основе исторических данных сети eCPM и pricefloors;undefined**` - сумма дохода не определена.
Вариант использования
Если вы интегрировали аналитику, например Firebase, используя это руководство с Appodeal, то никаких дополнительных действий не требуется.
Если вы используете в проекте свою собственную аналитику, то воспользуйтесь примером ниже:
- Kotlin
 - Java
 
override fun onAdRevenueReceive(revenueInfo: RevenueInfo) {
    // AppsFlyer
    val customParams = mapOf(
        Scheme.AD_UNIT to revenueInfo.adUnitName,
        Scheme.AD_TYPE to revenueInfo.adTypeString,
    )
    AppsFlyerAdRevenue.logAdRevenue(
        revenueInfo.networkName,
        MediationNetwork.appodeal,
        Currency.getInstance(Locale.US),
        revenueInfo.revenue,
        customParams
    )
    // Adjust
    val adRevenue = AdjustAdRevenue(AdjustConfig.AD_REVENUE_SOURCE_PUBLISHER).apply {
        setRevenue(revenueInfo.revenue, revenueInfo.currency)
        setAdRevenueNetwork(revenueInfo.networkName)
        setAdRevenueUnit(revenueInfo.adUnitName)
    }
    Adjust.trackAdRevenue(adRevenue)
    // Firebase
    firebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION) {
        param(FirebaseAnalytics.Param.AD_PLATFORM, revenueInfo.platform)
        param(FirebaseAnalytics.Param.SOURCE, revenueInfo.networkName)
        param(FirebaseAnalytics.Param.AD_FORMAT, revenueInfo.adTypeString)
        param(FirebaseAnalytics.Param.AD_UNIT_NAME, revenueInfo.adUnitName)
        param(FirebaseAnalytics.Param.CURRENCY, revenueInfo.currency)
        param(FirebaseAnalytics.Param.VALUE, revenueInfo.revenue)
    }
}
@Override
public void onAdRevenueReceive(@NotNull RevenueInfo revenueInfo) {
        // AppsFlyer
        Map<String, String> customParams = new HashMap<>();
        customParams.put(Scheme.AD_UNIT, revenueInfo.getAdUnitName());
        customParams.put(Scheme.AD_TYPE, revenueInfo.getAdTypeString());
        AppsFlyerAdRevenue.logAdRevenue(
        revenueInfo.getNetworkName(),
        MediationNetwork.appodeal,
        Currency.getInstance(Locale.US),
        revenueInfo.getRevenue(),
        customParams
        );
        // Adjust
        AdjustAdRevenue adRevenue = new AdjustAdRevenue(AdjustConfig.AD_REVENUE_SOURCE_PUBLISHER)
        adRevenue.setRevenue(revenueInfo.getRevenue(), revenueInfo.getCurrency());
        adRevenue.setAdRevenueNetwork(revenueInfo.getNetworkName());
        adRevenue.setAdRevenueUnit(revenueInfo.getAdUnitName());
        Adjust.trackAdRevenue(adRevenue);
        // Firebase
        Bundle bundle = new Bundle();
        bundle.putString(FirebaseAnalytics.Param.AD_PLATFORM, revenueInfo.getPlatform());
        bundle.putString(FirebaseAnalytics.Param.SOURCE, revenueInfo.getNetworkName());
        bundle.putString(FirebaseAnalytics.Param.AD_FORMAT, revenueInfo.getAdTypeString());
        bundle.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, revenueInfo.getAdUnitName());
        bundle.putString(FirebaseAnalytics.Param.CURRENCY, RevenueInfo.getCurrency());
        bundle.putString(FirebaseAnalytics.Param.VALUE, RevenueInfo.getRevenue());
        mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, bundle);
        }