iOS SDK - 広告収入のトラッキング

ドキュメント

広告収益の帰属

メディエーションプラットフォームからの広告収入を追跡し、ユーザーを獲得したマーケティングキャンペーンに帰属させることで、キャンペーンコスト、アプリ内課金、広告収益化を網羅した完全なROIの可視性を提供します。

概要

広告収益アトリビューションとは

広告収益アトリビューションは、モバイルアプリの広告収益をアプリのインストールを促進したユーザー獲得キャンペーンに結び付け、広告収益化を含むキャンペーンの真の収益性を測定できるようにします。

主なメリット

  • 統一されたROIビュー:キャンペーンコスト、アプリ内収益、広告収益を単一のダッシュボードで確認できます。
  • キャンペーンの最適化:広告収益データを広告ネットワークに送信し、入札とターゲティングを改善します。
  • LTV測定:広告収益化を含む完全なユーザー生涯価値の算出

データソース:広告収益データは通常、ユーザーレベルまたはインプレッションレベルで、お客様のメディエーションプラットフォーム(AdMob、AppLovin MAX、IronSourceなど)から提供されます。Singularはこのデータを受け取るための複数の統合方法をサポートしています。

詳細はこちら:セットアップ、レポート、トラブルシューティングの包括的な詳細については、広告収入アトリビューションFAQをご覧ください。


実装要件

重要なガイドライン

データの正確性が重要です

  1. 通貨コード:3文字のISO 4217通貨コード(例:USD、EUR、INR)を使用してください。多くのメディエーション・プラットフォームはUSDでレポートします。
  2. 送信前に検証する: Singular.adRevenue() を呼び出す前に、必ず収益と通貨データを検証してください。 間違ったデータは、送信後に修正できません。
  3. プラットフォームの違い:iOSは、マイクロを使用するAndroidとは異なり、標準通貨単位(例えば、0.005ドル)で直接収益を受け取ります。正しいフォーマットについては、常にプラットフォームのドキュメントを確認してください。

設定手順

広告収益のアトリビューションを実装するには、以下の手順に従ってください:

  1. SDKを更新する:最新のSingular SDKバージョンを使用していることを確認してください。
  2. インテグレーションを選択します:セットアップに合ったメディエーションプラットフォームのインテグレーションを選択します。
  3. コールバックを実装します:プラットフォーム固有の有料イベントリスナーを追加し、収益データを取得します。
  4. データを検証します:収益レポートをテストし、データがSingularダッシュボードに表示されることを確認します。

プラットフォームインテグレーション

AdMobインテグレーション

インプレッションレベルの収益レポート用の有料イベントリスナーを使用して、Google AdMobからの広告収益をトラッキングします。

要件

プラットフォームの収益レポート:iOSは標準通貨単位(例えば、$0.005 = 0.005)で収益を返します。値を変換せずに直接Singularに送信します。

実装

広告読み込み時に有料イベントハンドラを設定し、収益データを取得してSingularに送信します。

SwiftObjective-C
import Singular
import GoogleMobileAds

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: \(error.localizedDescription)")
            return
        }
        
        self.rewardedAd = ad
        
        // Set paid event handler for revenue tracking
        self.rewardedAd?.paidEventHandler = { adValue in
            // Extract revenue and currency from AdValue
            let revenue = adValue.value.doubleValue
            let currency = adValue.currencyCode
            
            // Validate revenue and currency before sending
            guard revenue > 0, let currency = currency, !currency.isEmpty else {
                print("Invalid ad revenue data: revenue = \(revenue), currency = \(String(describing: currency))")
                return
            }
            
            // Create ad revenue data object
            let data = SingularAdData(
                adPlatform: "AdMob",
                currency: currency,
                revenue: revenue
            )
            
            // Send to Singular
            Singular.adRevenue(data)
            print("Ad revenue sent: \(revenue) \(currency)")
        }
    }
}

AppLovin MAXインテグレーション

AppLovin Impression-Level User Revenue APIを使ってインプレッションレベルの広告収益を共有します。

要件

実装

AppLovin Communicatorコールバックを介して収益メッセージを処理する。

SwiftObjective-C
import Singular
import AppLovinSDK

func didReceive(_ message: ALCMessage) {
    // Check for revenue events topic
    if message.topic == "max_revenue_events" {
        // Extract and validate revenue value
        guard let revenueValue = message.data["revenue"] as? Double,
              revenueValue > 0 else {
            print("Failed to parse valid revenue value or revenue is not greater than 0")
            return
        }
        
        // Create ad revenue data object
        let data = SingularAdData(
            adPlatform: "AppLovin",
            currency: "USD",  // AppLovin typically reports in USD
            revenue: revenueValue
        )
        
        // Send to Singular
        Singular.adRevenue(data)
        print("Ad revenue sent: \(revenueValue) USD")
    }
}

Unity LevelPlay(IronSource)との統合

IronSource SDKを使用して、ironSourceと仲介ネットワークからのインプレッションレベルの収益を追跡します。

要件

  • IronSource SDKを実装する(スタートガイドを参照
  • IronSourceダッシュボードでARM SDK Postbacksフラグを有効にします。
  • 収益コールバックを受信するインプレッションデータリスナーを設定する

詳細セットアップの詳細については、IronSource Ad Revenue Documentationを参照してください。

実装

インプレッションデータ成功コールバックを実装し、収益をキャプチャして送信します。

SwiftObjective-C
import Singular
import IronSource

func impressionDataDidSucceed(_ impressionData: ISImpressionData?) {
    // Validate impression data
    guard let impressionData = impressionData else {
        print("No impression data available")
        return
    }
    
    // Extract and validate revenue
    let revenue = impressionData.revenue
    guard revenue > 0 else {
        print("Invalid revenue value: \(revenue)")
        return
    }
    
    // Create ad revenue data object
    let data = SingularAdData(
        adPlatform: "IronSource",
        currency: "USD",  // IronSource typically reports in USD
        revenue: revenue
    )
    
    // Send to Singular
    Singular.adRevenue(data)
    print("Ad revenue sent: \(revenue) USD")
}

TradPlusとの統合

インプレッションデリゲートを使用してTradPlusメディエーションから広告収益をキャプチャします。

要件

  • TradPlus.sharedInstance().impressionDelegate
  • tradPlusAdImpression コールバックを処理して収益データを受信する。
  • eCPMをミリ単位から標準通貨に変換する(1000で割る)

実装

すべての広告インプレッションと収益をトラッキングするインプレッションデリゲートを登録する。

SwiftObjective-C
import Singular
import TradPlusSDK

// Set up the delegate
TradPlus.sharedInstance().impressionDelegate = self

// Delegate method for handling ad impressions
func tradPlusAdImpression(_ adInfo: [String: Any]) {
    let currency = "USD"
    
    // Extract and validate eCPM value
    guard let ecpmValue = adInfo["ecpm"] as? NSNumber else {
        print("No eCPM data available in adInfo")
        return
    }
    
    // Convert eCPM from milli-units to dollars
    let revenue = ecpmValue.doubleValue / 1000.0
    
    // Validate revenue
    guard revenue > 0 else {
        print("Ad Revenue value out of expected range: \(revenue)")
        return
    }
    
    // Create ad revenue data object
    let data = SingularAdData(
        adPlatform: "TradPlus",
        currency: currency,
        revenue: revenue
    )
    
    // Send to Singular
    Singular.adRevenue(data)
    print("Ad revenue sent: \(revenue) \(currency)")
}

汎用統合(その他のプラットフォーム)

一般的なSingularAdData インターフェイスを使用して、任意のメディエーションプラットフォームを統合します。

要件

  • 媒介プラットフォームからのインプレッションレベルの収益データへのアクセス
  • 標準通貨単位での収益額
  • ISO 4217通貨コード(例:USD、EUR、INR)

データの正確性:Singularに送信する前に、収益と通貨データを検証してください。送信後に誤ったデータを修正することはできません。

実装

プラットフォーム名、通貨、収益でSingularAdData オブジェクトを作成し、Singular.adRevenue() を呼び出します。

SwiftObjective-C
import Singular

func reportAdRevenue(adPlatform: String, currency: String, revenue: Double) {
    // Validate revenue
    guard revenue > 0 else {
        print("Invalid revenue value: \(revenue)")
        return
    }
    
    // Validate currency
    guard !currency.isEmpty else {
        print("Invalid currency: \(currency)")
        return
    }
    
    // Create ad revenue data object
    let data = SingularAdData(
        adPlatform: adPlatform,
        currency: currency,
        revenue: revenue
    )
    
    // Send to Singular
    Singular.adRevenue(data)
    print("Revenue sent: \(revenue) \(currency) from \(adPlatform)")
}

// Example usage
reportAdRevenue(adPlatform: "MyMediationPlatform", currency: "USD", revenue: 0.05)

テストと検証

収益レポートの検証

広告収益の実装をテストし、データが正しくSingularに流れることを確認します。

  1. ログを確認する:収益コールバックのログが正しい値と通貨で表示されることを確認する。
  2. 広告のテストテスト広告をロードして表示し、収益イベントをトリガーします。
  3. ダッシュボードの検証:24時間以内にSingularダッシュボードに収益が表示されることを確認
  4. データの正確性:収益額がメディエーションプラットフォームのレポートと一致するか確認します。

トラブルシューティング収益がSingularに表示されない場合は、以下を確認してください:

  • 広告収益のアトリビューションがSingularアカウントで有効になっている。
  • 収益の値が0より大きい
  • 通貨コードが有効なISO 4217コードである。
  • プラットフォーム名がSingularの予想フォーマットと一致している