SKAdNetworkのサポート
SKAdNetwork は、iOS アプリのインストール キャンペーン用の Apple のプライバシー重視のアトリビューション フレームワークです。Unreal Engine SDK バージョン 2.0.11 以降、SKAdNetwork はマネージド モードでデフォルトで有効になっており、Singular はダッシュボードで設定したコンバージョン モデルに基づいてコンバージョン値を自動的に更新します。
追加設定は必要ありません:Unreal Engine SDK バージョン 2.0.11 以降を使用している場合、SKAdNetwork はそのまま使用できます。基本的な機能には、コードの変更や追加設定は必要ありません。
SKAN モードについて
マネージド モード (デフォルト)
マネージドモードでは、Singularはダッシュボードで設定したコンバージョンモデルに基づいてコンバージョン値の更新を自動的に処理します。これは最小限のコードで最適なコンバージョントラッキングを提供するため、ほとんどのアプリに推奨されるアプローチです。
- 自動更新:Singularはユーザーイベントと設定されたモデルに基づいてすべてのコンバージョン値の更新を管理します。
- ダッシュボードの設定:コードを変更することなく、Singularダッシュボードでコンバージョンモデルをデザインします。
- 最適化:Appleの制約の中でコンバージョン値の更新を最大化するSingularの専門知識をご利用ください。
マニュアルモード(上級者向け)
マニュアルモードでは、コンバージョン値の更新を完全にコントロールでき、SKANのコンバージョン値をいつどのように更新するかを決定するカスタムロジックを実装できます。このモードは、マネージドモードでは実現できない特定の要件がある場合にのみ使用してください。
高度な機能です:マニュアルモードでは、変換値の更新ウィンドウや制限など、AppleのSKAdNetworkの制約を理解し、慎重に実装する必要があります。ほとんどのアプリはマネージドモードを使用してください。
設定オプション
USingularSDKBPLibrary::Initialize メソッドで SKAdNetwork の動作を設定します。次の表は、使用可能なオプションとそのデフォルトを示しています。
| オプション | デフォルト | 説明 |
| skAdNetworkEnabled | True | iOSアトリビューショントラッキングのSKAdNetworkサポートを有効にする。 |
| manualSKANConversionManagement | False | Manual Mode を有効にして、コンバージョン値の更新を自分で制御します。 |
注意:Unreal Engine SDK バージョン 2.0.11 以降、SKAdNetwork はデフォルトで有効になっています。古いバージョンを使用している場合は、ode translatete="no "skAdNetworkEnabled を ode translate="="no "True に設定するか、SkanRegisterAppForAdNetworkAttribution() を呼び出して SKAdNetwork を有効にする必要があります。
レガシー SDK バージョン
アンリアル エンジン SDK のバージョンが 2.0.11 より古い場合は、以下の方法で SKAdNetwork サポートを手動で有効にしてください。
コンフィギュレーションで有効にする
SDK を初期化する際にskAdNetworkEnabled をTrueに設定してください。
// Initialize with SKAdNetwork enabled
bool Success = USingularSDKBPLibrary::Initialize(
TEXT("YOUR_SDK_KEY"),
TEXT("YOUR_SDK_SECRET"),
60, // Session timeout
TEXT(""), // Custom user ID
true, // Enable SKAdNetwork
false, // Manual SKAN management
0, // Wait for tracking authorization
false, // OAID collection
true, // Enable logging
3, // Log level
false, // Clipboard attribution
TEXT(""), // Facebook App ID
TEXT("") // Custom SDID
);
if (Success)
{
UE_LOG(LogTemp, Log, TEXT("SDK initialized with SKAdNetwork enabled"));
}
メソッドコールで有効にする
または、アプリの初期化コードで登録メソッドを直接呼び出します。
// Register for SKAdNetwork attribution
USingularSDKBPLibrary::SkanRegisterAppForAdNetworkAttribution();
UE_LOG(LogTemp, Log, TEXT("Registered for SKAdNetwork attribution"));
推奨アンリアル エンジン SDK の最新バージョンにアップグレードすると、SKAdNetwork が自動的に有効化され、最新の機能とバグが修正されます。
手動モードの設定
カスタム変換値ロジックを実装するには、Manual Mode を有効にし、提供されている SDK メソッドを使用して、アプリのライフサイクル全体を通して変換値を更新および監視します。
マニュアルモードを有効にする
SDK を初期化する際にmanualSKANConversionManagement をTrueに設定し、コンバージョン値の更新を制御します。
// Initialize with Manual Mode enabled
bool Success = USingularSDKBPLibrary::Initialize(
TEXT("YOUR_SDK_KEY"),
TEXT("YOUR_SDK_SECRET"),
60, // Session timeout
TEXT(""), // Custom user ID
true, // Enable SKAdNetwork
true, // Enable Manual SKAN management
0, // Wait for tracking authorization
false, // OAID collection
true, // Enable logging
3, // Log level
false, // Clipboard attribution
TEXT(""), // Facebook App ID
TEXT("") // Custom SDID
);
if (Success)
{
UE_LOG(LogTemp, Log, TEXT("SDK initialized with Manual SKAN Mode"));
}
コンバージョン値の更新
カスタムロジックに基づいて SKAdNetwork の変換値を手動で更新するには、このメソッドを使用します。変換値は0~63の整数である必要があります。
重要:このメソッドは、manualSKANConversionManagement が True に設定されている場合にのみ機能します。マネージドモードが有効な場合、手動更新は無視されます。
メソッドの署名
static bool SkanUpdateConversionValue(int conversionValue)
使用例
// Track a sign-up event
USingularSDKBPLibrary::SendEvent(TEXT("SignUp"));
// Update the conversion value to 7
bool Success = USingularSDKBPLibrary::SkanUpdateConversionValue(7);
if (Success)
{
UE_LOG(LogTemp, Log, TEXT("Conversion value updated to 7"));
}
else
{
UE_LOG(LogTemp, Warning, TEXT("Failed to update conversion value"));
}
// Example: Update based on purchase tier
void OnPurchaseComplete(float PurchaseAmount)
{
// Track revenue event
USingularSDKBPLibrary::SendRevenue(TEXT("purchase"), TEXT("USD"), PurchaseAmount);
// Calculate conversion value based on amount
int ConversionValue = 10; // Default
if (PurchaseAmount >= 100.0f)
{
ConversionValue = 63; // High value
}
else if (PurchaseAmount >= 50.0f)
{
ConversionValue = 40; // Medium value
}
else if (PurchaseAmount >= 10.0f)
{
ConversionValue = 20; // Low value
}
USingularSDKBPLibrary::SkanUpdateConversionValue(ConversionValue);
}
現在のコンバージョン値を取得する
Singular SDKが追跡している現在のコンバージョン値を取得します。これは現在の状態に基づいた条件ロジックを実装するのに便利です。
メソッドのシグネチャ
static int SkanGetConversionValue()
使用例
// Get the current conversion value
int CurrentValue = USingularSDKBPLibrary::SkanGetConversionValue();
UE_LOG(LogTemp, Log, TEXT("Current conversion value: %d"), CurrentValue);
// Only update if current value is below threshold
if (CurrentValue < 30)
{
USingularSDKBPLibrary::SkanUpdateConversionValue(30);
UE_LOG(LogTemp, Log, TEXT("Conversion value updated from %d to 30"), CurrentValue);
}
コンバージョン値の更新を監視する
コンバージョン値が変更されるたびにリアルタイムの通知を受け取るようにデリゲートを設定します。これにより、コンバージョン値の更新に反応し、アナリティクスを記録したり、他のアプリの動作をトリガーしたりすることができます。
実装ステップ
- クラスのヘッダーファイルの先頭にode translate="no "o "#include "SingularDelegates.h "を追加します。
-
クラスヘッダに以下のデリゲート宣言を追加します:
// Delegate to register for conversion value updates UPROPERTY(BlueprintAssignable, Category = "Singular-SDK") FOnConversionValueUpdated OnConversionValueUpdated; // Method that will handle the conversion value update UFUNCTION() void OnNewConversionValue(int32 ConversionValue); -
クラスの実装ファイルで、デリゲートを登録します:
// Register the delegate (typically in BeginPlay or constructor) OnConversionValueUpdated.AddDynamic(this, &UYourClassName::OnNewConversionValue); -
コールバックメソッドを実装する:
ode class="="cpp"void UYourClassName::OnNewConversionValue(int32 ConversionValue) { // This method is called whenever the conversion value is updated UE_LOG(LogTemp, Log, TEXT("Conversion value updated to: %d"), ConversionValue); // Log the update to your analytics LogConversionValueUpdate(ConversionValue); // Trigger any app-specific behavior if (ConversionValue >= 50) { UnlockPremiumFeature(); } }
ベスト・プラクティス:ベストプラクティス:アプリ全体で現在の変換状態の同期ビューを維持するために、変換値デリゲートを使用してください。これは、デバッグやカスタムロジックが正しく動作することを確認するために特に便利です。
その他のリソース
SKAdNetworkの実装とベストプラクティスに関するより包括的な情報については、iOS SDK SKAdNetwork実装ガイドを参照してください。
App Tracking Transparency(ATT)のサポート
App Tracking Transparency (ATT)は、デバイスのIDFA (Identifier for Advertisers)にアクセスしてユーザーデータを共有する前に、ユーザーの同意を必要とするAppleのプライバシーフレームワークです。ATTを正しく実装することは、iOSのアトリビューションとユーザー獲得キャンペーンの精度を最大化するために非常に重要です。
ATTがアトリビューションに重要な理由
iOS 14.5以降、アプリはIDFAにアクセスする前に、ATTフレームワークを通じてユーザーの許可を要求する必要があります。IDFAがなくてもフィンガープリンティングや確率的な方法でアトリビューションは可能ですが、IDFAがあることでアトリビューションの精度が大幅に向上し、決定論的なマッチングが可能になります。
- 決定論的アトリビューション:IDFAは、広告インプレッションとインストールを直接結びつける正確なデバイスレベルのアトリビューションを可能にします。
- 広告ネットワークの最適化:広告ネットワークは、IDFAにアクセスすることで、キャンペーンをより最適化し、より正確なレポートを提供できます。
- ユーザーレベルのインサイト:IDFAにアクセスすることで、より詳細なユーザー行動分析とコホート追跡が可能になります。
推奨ATTプロンプトを実装し、ユーザーの同意を求めることを強くお勧めします。ユーザーにメリット(パーソナライズされた広告、より良いアプリ体験)を説明し、オプトイン率を最大化する。
SDK初期化のタイミング
ATTプロンプトに対するSDKの初期化のタイミングは非常に重要です。 ユーザーがATTプロンプトに応答する前にSDKが初期化され、最初のセッションが送信されると、IDFAがキャプチャされず、正確なアトリビューションが得られません。
初期化を遅らせる理由
デフォルトでは、Singular SDKは初期化するとすぐにセッションを送信します。 このセッションが新しいデバイスから送られてくると、その時点で利用可能なデータのみを使用してSingularのアトリビューションプロセスをトリガーします。ユーザーがまだATTプロンプトに応答していない場合、IDFAは利用できず、アトリビューションは精度の低い方法に基づいて行われます。
重要である:Singular SDKが最初のセッションを送信する前に、必ずATT同意を要求し、IDFAを取得してください。これを怠ると、そのデバイスのアトリビューションデータのIDFAが永久に失われます。
SDK待ちタイムアウトの設定
waitForTrackingAuthorizationWithTimeoutInterval パラメータを設定することで、初期化する前にユーザーのATT応答を待つようにSDKを設定します。この遅延により、ユーザーはATTプロンプトに応答する時間を得ると同時に、プロンプトが表示されない場合の無期限遅延を防ぐことができます。
ATT遅延の仕組み
- SDKは初期化し、セッションとユーザーイベントの記録を開始しますが、まだSingularサーバーには送信しません。
- App Tracking Transparencyの同意が許可、拒否されるか、タイムアウトが経過するとすぐに、SDKはセッションとキューに入ったイベントをSingularに送信します(IDFAの有無は問いません)。
- Singularはアトリビューションプロセスを開始し、利用可能な場合はIDFAを利用します。
実装
設定例
SDKの初期化時にwaitForTrackingAuthorizationWithTimeoutIntervalパラメータを設定します。この値は、ユーザーのATT応答を待つ最大秒数を表します。
// Initialize with ATT delay
bool Success = USingularSDKBPLibrary::Initialize(
TEXT("YOUR_SDK_KEY"),
TEXT("YOUR_SDK_SECRET"),
60, // Session timeout
TEXT(""), // Custom user ID
true, // Enable SKAdNetwork
false, // Manual SKAN management
300, // Wait up to 300 seconds (5 minutes) for ATT response
false, // OAID collection
true, // Enable logging
3, // Log level
false, // Clipboard attribution
TEXT(""), // Facebook App ID
TEXT("") // Custom SDID
);
if (Success)
{
UE_LOG(LogTemp, Log, TEXT("SDK initialized with ATT delay"));
}
タイムアウトの考慮:適切なタイムアウト値(通常60~300秒)を設定する。ユーザーが応答する前にタイムアウトが経過した場合、SDKはIDFAなしでデータの送信を続行します。
ATTベストプラクティス
- メッセージングを事前に促す:なぜトラッキング許可が必要なのか、それがユーザーにどのようなメリット(より良い広告、より良い体験)をもたらすのかを説明するATT前の画面をユーザーに見せましょう。これにより、オプトイン率が大幅に向上します。
- タイミングが重要:初回起動直後ではなく、アプリフローの自然なタイミングでATTプロンプトを表示しましょう。まずはユーザーにアプリを体験してもらいましょう。
-
カスタムメッセージング:Info.plistファイルのATTプロンプトメッセージを、
NSUserTrackingUsageDescriptionキーでカスタマイズし、トラッキングの目的を明確に説明しましょう。 - 徹底的にテストしましょう:許可されたシナリオと拒否されたシナリオの両方をテストし、ユーザーの選択に関係なくアプリが正しく機能することを確認しましょう。
- ユーザーの選択を尊重してください:トラッキングを拒否したユーザーに対して何度もプロンプトを表示したり、オプトインを迫るような攻撃的なメッセージを表示したりしないでください。
App StoreのレビューATTを適切に実装していないアプリや、フレームワークを回避しようとするアプリは、App Storeの審査で却下される可能性があります。Appleのガイドラインに従って実装し、ユーザーのプライバシーに関する選択を尊重するようにしてください。
その他のリソース
iOS 14+の変更とベストプラクティスに関する詳細は、以下のリソースを参照してください: