広告収入アトリビューション・サポート

ドキュメント

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

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

キーポイント

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