SDKの初期化
アプリを起動するたびにSingular SDKを初期化し、アトリビューショントラッキング、セッション管理、イベントレポートを有効にします。
SDID について
SDID(Singular Device ID)は、Singular が生成・管理するデバイスレベルの識別子です。この SDK がアプリで動作し、サーバーからも Server-to-Server(S2S)API 経由でイベントを送信するハイブリッド連携では、同じ SDID をサーバー側のイベントに付与することで、それらのイベントを SDK がトラッキングしているのと同じデバイスに結び付けられます。これにより、Singular はプラットフォーム固有の広告識別子に依存せず、SDK と S2S のアクティビティを単一のデバイスにアトリビューションできます。
デフォルトで有効なSDID: 2026年7月15日より、新規Singularのお客様ではSDID(Singular Device ID)がデフォルトで有効になります。SDKが初期化時にSDIDを自動的に生成・解決するため、追加の設定は必要ありません。以下の例ではSDID受信コールバックを登録し、SDKがSDIDを受信したことをログで確認できるようにしています。
カスタムSDIDはエンタープライズ機能です: カスタムSDIDの設定はエンタープライズ機能であり、デフォルトでは有効になっていません。アカウントで有効化されていない限り、カスタムSDIDを設定しないでください。担当のSingular Customer Success Managerにお問い合わせください。以下の例では意図的にカスタムSDIDを設定していません。
プライバシーの遵守Singular SDKを実装する際は、GDPR、CCPA、COPPAなど、お客様がビジネスを行う地域で制定されているプライバシーに関する法律を遵守することを忘れないでください。詳しくはSDKのオプトインとオプトアウトをご覧ください。
SDKを初期化する理由
SDKの初期化は、Singularのすべてのアトリビューション機能の前提条件です。 ユーザーのリテンションメトリックスを計算するために、Singularに送信される新しいセッションを作成します。
ベストプラクティスです:ゲームモードのコンストラクタなど、アプリのライフサイクルのできるだけ早い段階でSDKを初期化します。
初期化メソッド
USingularSDKBPLibrary::Initialize
Initialize メソッドをコールしてSingular SDKを起動し、ユーザーセッションをSingularサーバーに送信します。
メソッドのシグネチャ
static bool Initialize(
FString sdkKey,
FString sdkSecret,
int sessionTimeout = 60,
FString customUserId = TEXT(""),
bool skAdNetworkEnabled = true,
bool manualSkanConversionManagement = false,
int waitForTrackingAuthorizationWithTimeoutInterval = 0,
bool oaidCollection = false,
bool enableLogging = false,
int logLevel = 0,
bool clipboardAttribution = false,
FString facebookAppId = TEXT(""),
FString customSdid = TEXT("")
);
実装例
ゲームモードのコンストラクタで、API認証情報と設定オプションを使用してSDKを初期化します。
// Copyright Epic Games, Inc. All Rights Reserved.
#include "MyProject2GameMode.h"
#include "MyProject2Character.h"
#include "UObject/ConstructorHelpers.h"
#include "SingularSDKBPLibrary.h"
#include "SingularDelegates.h"
#if PLATFORM_IOS
#include "IOS/IOSPlatformMisc.h"
#import <UIKit/UIKit.h>
#endif
AMyProject2GameMode::AMyProject2GameMode()
: Super()
{
#if PLATFORM_IOS
// Log IDFV for iOS testing
NSString *idfv = [[UIDevice currentDevice] identifierForVendor].UUIDString;
if (idfv)
{
FString IDFVString = FString(idfv);
UE_LOG(LogTemp, Log, TEXT("IDFV: %s"), *IDFVString);
}
else
{
UE_LOG(LogTemp, Warning, TEXT("Failed to retrieve IDFV"));
}
#endif
// Register the SDID accessor handler before initialization to confirm the SDK
// received the SDID (SDID is enabled by default for new accounts)
USingularDelegates* SingularDelegates = CreateDefaultSubobject<USingularDelegates>(TEXT("SingularSdidAccessorHandler"));
SingularDelegates->OnSingularSdidReceived.AddDynamic(this, &AMyProject2GameMode::OnSingularSdidReceived);
SingularDelegates->OnSingularDidSetSdid.AddDynamic(this, &AMyProject2GameMode::OnSingularDidSetSdid);
// Initialize Singular SDK
bool Success = USingularSDKBPLibrary::Initialize(
"YOUR_SDK_KEY", // API Key from Singular dashboard
"YOUR_SDK_SECRET", // Secret from Singular dashboard
60, // Session timeout in seconds
TEXT(""), // Custom user ID (optional)
true, // Enable SKAdNetwork for iOS
false, // Manual SKAdNetwork conversion management
30, // Wait 30 seconds for ATT prompt
false, // Disable OAID collection
true, // Enable logging for debugging
3, // Log level (0-5, higher = more verbose)
false, // Clipboard attribution
TEXT(""), // Facebook App ID (optional)
TEXT("") // Custom SDID (optional)
);
if (Success)
{
UE_LOG(LogTemp, Log, TEXT("Singular SDK initialized successfully"));
}
else
{
UE_LOG(LogTemp, Error, TEXT("Failed to initialize Singular SDK"));
}
// Set default pawn class
static ConstructorHelpers::FClassFinder<APawn> PlayerPawnClassFinder(
TEXT("/Game/FirstPerson/Blueprints/BP_FirstPersonCharacter")
);
DefaultPawnClass = PlayerPawnClassFinder.Class;
}
void AMyProject2GameMode::OnSingularSdidReceived(const FString result)
{
UE_LOG(LogTemp, Log, TEXT("Singular SDID received: %s"), *result);
}
void AMyProject2GameMode::OnSingularDidSetSdid(const FString result)
{
UE_LOG(LogTemp, Log, TEXT("Singular SDID set: %s"), *result);
}
Add the matching handler declarations to your game mode header (for example,
AMyProject2GameMode.h
):
UFUNCTION()
void OnSingularSdidReceived(const FString result);
UFUNCTION()
void OnSingularDidSetSdid(const FString result);
設定パラメータ
必須パラメータ
これらのパラメータはSDKの初期化に必要です。Singularダッシュボードから認証情報を取得してください。
- sdkKey:Singularアカウントの"Developer Tools > SDK Integration > SDK Keys"からSingular SDK Keyを取得します。
- sdkSecret:Singularアカウントの同じ場所からお客様のSingular SDK Secretを取得します。
重要:SDK認証情報は安全に保管し、公開バージョン管理リポジトリにコミットしないでください。
オプションのパラメータ
オプションの設定パラメータでSDKの動作をカスタマイズします。
- sessionTimeout(デフォルト: 60):カスタムセッションタイムアウトを秒単位で設定します。この非アクティブ時間が経過すると、ユーザーがアプリに戻ったときに新しいセッションが作成されます。
- customUserId(デフォルト:空):初期化時にカスタムユーザーIDを設定します。カスタムユーザーIDについてはこちらをご覧ください。
- skAdNetworkEnabled(デフォルト:true、iOSのみ):iOSアトリビューション用のSKAdNetworkサポートを有効にします。SingularのSKAdNetworkソリューションの紹介をご覧ください。
- manualSkanConversionManagement(デフォルト:false、iOSのみ):Singularが自動的にSKAdNetworkの変換値を処理するのではなく、手動で管理する場合はtrueに設定します。
- waitForTrackingAuthorizationWithTimeoutInterval(デフォルト:0、iOSのみ):ユーザーがATT(App Tracking Transparency)のプロンプトに応答するか、タイムアウトが経過するまで、Singularへのセッション/イベントの送信を遅らせます。ATTのサポートについてはこちらをご覧ください。
- oaidCollection(デフォルト:false、Androidのみ):AndroidデバイスでデバイスのOAID(Open Anonymous Device Identifier)を収集するには、trueに設定します。
- enableLogging(デフォルト:false):トラブルシューティングのためにSDKデバッグ・ロギングを有効にします。本番ビルドでは無効にする必要があります。
- logLevel(デフォルト: 0):ロギングの冗長性レベル(0-5)を設定。値を大きくすると、より詳細なログが出力されます。
- clipboardAttribution(Default:false、iOSのみ): ユニバーサルリンクの属性のためにクリップボードからの読み込みを有効にします。
- facebookAppId(デフォルト: 空):Facebookアトリビューション統合のためにFacebookアプリIDを設定します。
- customSdid(デフォルト:空):自動生成された識別子を使用する代わりに、カスタムSingular Device IDを設定します。