広告収入のトラッキング

ドキュメント

広告収益アトリビューションについて

広告収益アトリビューションは、ユーザーをアプリに導いた特定のキャンペーンと広告収益を結びつけるのに役立ちます。これにより、キャンペーンコスト、アプリ内収益、広告収益のすべてを一度に表示することで、広告のパフォーマンスを明確に把握できます。また、広告収益データを広告ネットワークに送信して、広告パフォーマンスを改善することもできます。

キーポイント

  • 機能:広告収益アトリビューションは、モバイルアプリの広告収益を、アプリのユーザーを生み出したマーケティングキャンペーンに結び付けます。こうすることで、各キャンペーンからどれだけの収益を得たか、そしてそれが全体的な広告ROIにどのように影響するかを確認することができます。
  • データソース:このデータは通常メディエーションプラットフォームから取得し、ユーザーレベルまたはインプレッションレベルとなります。Singularはこのアトリビューションデータを取得する様々な方法をサポートしています。
  • もっと読む詳細については、Singularの広告収益アトリビューションに関するFAQとトラブルシューティングをご覧ください。

重要な注意事項

  1. 通貨コード:3文字のISO 4217通貨コードを使用してください(例:米ドルは "USD"、ユーロは "EUR"、インドルピーは "INR")。多くのメディエーション・プラットフォームは "USD "を使用しているので、それを使用している場合は、コードがこれと一致していることを確認してください。異なる通貨を使用する場合は、バリデーションコードを適宜更新してください。
  2. データの正確性:Singularにデータを送信する前に、収益と通貨のデータが正しいことを必ず確認してください。不正確なデータは後で修正できないため、正確であることを確認することは非常に重要です。

広告収益アトリビューションの実装

  1. SDKをアップデートします:Singular SDKが最新バージョンであることを確認してください。
  2. コードスニペットを追加します:お使いのメディエーションプラットフォームに応じて、Singular SDKのセットアップに適切なコードスニペットを追加します。

これらのステップに従うことで、広告収益アトリビューションを正しく設定し、広告データを最大限に活用することができます。

AdMob
パートナーの注意事項
  • この機能はAdMobアカウントで有効にする必要があります。

    AdMobサポートを参照してください

  • 広告フォーマット("App Open"、"Banner"、"Interstitial"、"Native"、"Rewarded "など)を読み込む際に、広告が収益を生成するたびにトリガーされるコールバック関数としてpaidEventHandlerを設定します。Google Mobile Ads SDKは、インプレッションイベントをトラッキングし、広告が発生した収益でこのハンドラーを呼び出します。

    これを行うには、広告フォーマットの"load"関数を変更し、paidEventHandlerを含めます。このコールバック内で広告収益データを管理し、検証し、Singular.adRevenue関数を使ってSingularに送信します。

    例えば、"報酬付き広告" が正常にロードされると、paidEventHandler は広告の収益情報(adValue)を受け取ります。この関数で収益データを処理し、Singularに送信します。

    詳細については、AdMob のドキュメントを参照してください。

    重要:AdMob SDKはプラットフォームによって異なる収益を報告します。例えば、$0.005の広告収益はUnityとAndroidプラットフォームでは5000として返されますが、iOSでは0.005として返されます。iOSの場合は、Singular SDKに直接0.005を送信します。その他のプラットフォームでは、Singularに送信する前にadValueをマイクロからドルに変換してください。
SDK実装のコードベースを選択してください:
KotlinJava
仕組み
  • Google AdMob Mobile Ads SDK(Android)を実装します: スタートガイドをご覧ください。
  • AdMobとの統合:AdMobから広告を読み込み、広告収益イベントを処理するためにsetOnPaidEventListenerを設定します。
  • 収益の検証:収益が0より大きいことを確認するチェックを追加します。これにより、ゼロまたはマイナスの収益値を送信することを防ぎます。
  • 通貨の検証:データをSingularに送信する前に、通貨がゼロまたは空でないことを確認する。
  • 無効なデータのログ:データがバリデーションに失敗した場合、デバッグ用にログメッセージを表示し、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}")
            }
        })
    }
}
AppLovinMax
パートナーノート
  • Applovin Impression-Level User Revenue APIを使ってインプレッションレベルの広告収益データを共有しましょう。
SDK実装のコードベースを選択してください:
KotlinJava
仕組み
  • AppLovin Impression-Level User Revenue API(Android)を使用します: スタートガイドをご覧ください。
  • AppLovinインテグレーション:AppLovin MAXからリワード広告をロードし、広告収益イベントを処理するためにonMessageReceived関数を使用します。
  • 収益検証:収益が0より大きいことを確認するチェックを追加します。これにより、ゼロまたはマイナスの収益値を送信することを防ぎます。
  • 通貨の検証:以下のサンプルでは、通貨が "USD "にハードコードされています。データをSingularに送信する前に、通貨が正確で、ゼロや空でないことを確認してください。
  • 無効なデータのログ:データの検証に失敗した場合は、デバッグ用にログメッセージを表示し、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")
        }
    }
}
Unity LevelPlay (IronSource)
パートナーノート
  • Impression Level Revenue (ILR) SDK APIは、ironSource SDKを使用して、ironSource Adsおよびその他の媒介ネットワークのインプレッションレベルデータを提供します。詳しくは[developers.is.com]をご覧ください。
  • IronSourceのARM SDK Postbacksフラグがオンになっていることを確認してください。
SDK実装のコードベースを選択します:
KotlinJava
仕組み
  • IronSource SDKを使用してインプレッションレベルのユーザー収益を取得します(Android): 入門ガイドをご覧ください。
  • Ironsourceの統合:Ironsourceからリワード広告をロードし、広告収入イベントを処理するためにonImpressionDataSuccess関数を使用します。
  • 収益検証:収益が0より大きいことを確認するチェックを追加します。これにより、ゼロまたはマイナスの収益値を送信することを防ぎます。
  • 通貨の検証:以下のサンプルでは、通貨が "USD "にハードコードされています。データをSingularに送信する前に、通貨が正確で、ゼロや空でないことを確認してください。
  • 無効なデータのログ:データの検証に失敗した場合は、デバッグ用にログメッセージを表示し、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}")
}
TradPlus
パートナーの注意事項
  • impressionDelegateを設定する
  • TradPlusAdImpressionコールバックにSingularを追加します。
SDK実装のコードベースを選択します:
KotlinJava
どのように動作するか
  • TradPlusとの統合:TradPlusからリワード広告をロードし、広告収入イベントを処理するためにonImpressionSuccess関数を使用します。
  • 収益検証:収益が0より大きいことを確認するチェックを追加します。これにより、ゼロまたはマイナスの収益値を送信することを防ぎます。adInfoディクショナリには、有効な NSNumber 値を持つ"ecpm" キーが含まれています。この値をDoubleに変換し、スケーリングする(通常、ecpmはミリ単位で指定されるため、1000.0で割るとドルに変換される)。
  • 通貨の検証:以下のサンプルでは、通貨は "USD" にハードコードされています。データをSingularに送信する前に、通貨が正確で、ゼロや空でないことを確認してください。
  • 無効なデータのログデータの検証に失敗した場合、デバッグ用にログメッセージを表示し、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}")
        }
    }
)
その他(汎用)
パートナーの注意事項
  • 一般的な統合:SingularAdData オブジェクトを初期化し、必要なデータを渡す。データには、adPlatform(String)、currency(String)、revenue(Double)を含める。
  • 収益レポート:Singularに送信する前に、収益と通貨のデータが正しいことを確認してください。不正確なデータは後で修正できないので、正確であることを確認することが重要です。
  • ヒントデバッグ用のログ情報
SDK実装のコードベースを選択してください:
KotlinJava
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}")
}