広告収益アトリビューションについて
広告収益アトリビューションは、ユーザーをアプリに導いた特定のキャンペーンと広告収益を結びつけるのに役立ちます。これにより、キャンペーンコスト、アプリ内収益、広告収益のすべてを一度に表示することで、広告のパフォーマンスを明確に把握できます。また、広告収益データを広告ネットワークに送信して、広告パフォーマンスを改善することもできます。
キーポイント
- 機能:広告収益アトリビューションは、モバイルアプリの広告収益を、アプリのユーザーを生み出したマーケティングキャンペーンに結び付けます。こうすることで、各キャンペーンからどれだけの収益を得たか、そしてそれが全体的な広告ROIにどのように影響するかを確認することができます。
- データソース:このデータは通常メディエーションプラットフォームから取得し、ユーザーレベルまたはインプレッションレベルとなります。Singularはこのアトリビューションデータを取得する様々な方法をサポートしています。
- もっと読む詳細については、Singularの広告収益アトリビューションに関するFAQとトラブルシューティングをご覧ください。
重要な注意事項
- 通貨コード:3文字のISO 4217通貨コードを使用してください(例:米ドルは "USD"、ユーロは "EUR"、インドルピーは "INR")。多くのメディエーション・プラットフォームは "USD "を使用しているので、それを使用している場合は、コードがこれと一致していることを確認してください。異なる通貨を使用する場合は、バリデーションコードを適宜更新してください。
- データの正確性:Singularにデータを送信する前に、収益と通貨のデータが正しいことを必ず確認してください。不正確なデータは後で修正できないため、正確であることを確認することは非常に重要です。
広告収益アトリビューションの実装
- SDKをアップデートします:Singular SDKが最新バージョンであることを確認してください。
- コードスニペットを追加します:お使いのメディエーションプラットフォームに応じて、Singular SDKのセットアップに適切なコードスニペットを追加します。
これらのステップに従うことで、広告収益アトリビューションを正しく設定し、広告データを最大限に活用することができます。
パートナーの注意事項
- この機能は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実装のコードベースを選択してください:
仕組み
- 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)")
}
}
}
どのように動作するか
- Google AdMob Mobile Ads SDK(iOS)を実装します: 入門ガイドをご覧ください。
- AdMobとの統合:AdMobから広告を読み込み、広告収益イベントを処理するためにpaidEventHandlerを設定します。
- 収益の検証:収益が0より大きいことを確認するチェックを追加します。これにより、ゼロまたはマイナスの収益値を送信することを防ぎます。
- 通貨の検証:Singularにデータを送信する前に、通貨がゼロまたは空でないことを確認する。
- 無効なデータのログ:データがバリデーションに失敗した場合、デバッグ用にログメッセージを表示し、データを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
パートナーノート
- Applovin Impression-Level User Revenue APIを使ってインプレッションレベルの広告収益データを共有しましょう。
SDK実装のコードベースを選択してください:
仕組み
- 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)
}
}
どのように動作するか
- AppLovin Impression-Level User Revenue API(iOS)を使用します: スタートガイドをご覧ください。
- AppLovinインテグレーション:AppLovin MAXからリワード広告をロードし、広告収益イベントを処理するためにdidReceive関数を使用します。
- 収益検証:収益が0より大きいことを確認するチェックを追加します。これにより、ゼロまたはマイナスの収益値を送信することを防ぎます。
- 通貨の検証:以下のサンプルでは、通貨が "USD "にハードコードされています。データをSingularに送信する前に、通貨が正確で、ゼロや空でないことを確認してください。
- 無効なデータのログ:データの検証に失敗した場合は、デバッグ用にログメッセージを表示し、 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");
}
}
}
パートナーノート
- Impression Level Revenue (ILR) SDK APIは、ironSource SDKを使用して、ironSource Adsおよびその他の媒介ネットワークのインプレッションレベルデータを提供します。詳しくは[developers.is.com]をご覧ください。
- IronSourceのARM SDK Postbacksフラグがオンになっていることを確認してください。
SDK実装のコードベースを選択します:
仕組み
- 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)")
}
}
どのように動作するか
- IronSource SDKを使用し、Impression-Level User Revenue(iOS)を取得します: 入門ガイドをご覧ください。
- Ironsourceインテグレーション:Ironsourceからリワード広告をロードし、広告収入イベントを処理するためにimpressionDataDidSucceed関数を使用します。
- 収益検証:収益が0より大きいことを確認するチェックを追加します。これにより、ゼロまたはマイナスの収益値を送信することを防ぎます。
- 通貨の検証:以下のサンプルでは、通貨が "USD "にハードコードされています。データをSingularに送信する前に、通貨が正確で、ゼロや空でないことを確認してください。
- 無効なデータのログ:データの検証に失敗した場合は、デバッグ用にログメッセージを表示し、 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
パートナーの注意事項
- impressionDelegateを設定する
- TradPlusAdImpressionコールバックにSingularを追加します。
SDK実装のコードベースを選択します:
どのように動作するか
- 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")
}
}
どのように機能するか
- TradPlusとの統合:TradPlusからリワード広告をロードし、tradPlusAdImpression関数を使用して広告収入イベントを処理します。
- 収益の検証:収益が0より大きいことを確認するチェックを追加します。これにより、ゼロまたはマイナスの収益値が送信されるのを防ぎます。adInfoディクショナリには、有効な NSNumber 値を持つ"ecpm" キーが含まれています。この値をDoubleに変換し、スケーリングする(通常、ecpmはミリ単位で指定されるため、1000.0で割るとドルに変換される)。
- 通貨の検証:以下のサンプルでは、通貨は "USD" にハードコードされています。データをSingularに送信する前に、通貨が正確で、ゼロや空でないことを確認してください。
- 無効なデータのログデータの検証に失敗した場合は、デバッグ用にログメッセージを表示し、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");
}
}
パートナーの注意事項
- 一般的な統合:SingularAdData オブジェクトを初期化し、必要なデータを渡す。データには、adPlatform(String)、currency(String)、revenue(Double)を含める。
- 収益レポート:Singularに送信する前に、収益と通貨のデータが正しいことを確認してください。不正確なデータは後で修正できないので、正確であることを確認することが重要です。
- ヒントデバッグ用のログ情報
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);
}