デバイスのアトリビューション確認
連携テストおよびトラッキングリンク検証のために、Singular Device Assist アプリとAttributionDetails APIエンドポイントを使用してデバイスのアトリビューションを 検証するための総合ガイド。
Singularはデバイスのアトリビューションを確認する2つの方法を提供します: モバイルテスト用のDevice AssistアプリとプログラムによるVerification用の AttributionDetails APIエンドポイント。
アトリビューション検証は、新しいSDK/S2S連携のテストとキャンペーン デプロイ前のSingular Linksの検証に不可欠なステップです。
| 対象読者 | UAマネージャー、開発者、QAエンジニア |
| 前提条件 |
|
アトリビューション検証のユースケース
アトリビューションを確認するタイミング
デバイスのアトリビューション検証は、連携とキャンペーンデプロイの ライフサイクルの複数の段階で重要です。
| ユースケース | 目的 |
|---|---|
| SDK/S2S連携テスト |
連携開発中にSDKがインストールを正しくトラッキングし、 正しいソースにアトリビューションしているかを検証します。 |
| トラッキングリンクの検証 |
適切なアトリビューションとパラメータの受け渡しを確保するために、 キャンペーンデプロイ前に新しいSingular Linksをテストします。 |
| キャンペーンのトラブルシューティング | テスト端末のアトリビューション状態を確認することで、ライブキャンペーンの アトリビューションの問題を診断します。 |
| パートナー連携の検証 | 広告パートナーからSingularプラットフォームへアトリビューションデータが 正しく流れていることを確認します。 |
方法の比較
検証方法の選択
テストの要件と技術的な能力に基づいて適切な検証方法を選択してください。
| 方法 | 最適な用途 | 要件 | 制限事項 |
|---|---|---|---|
| Device Assistアプリ |
|
|
手動プロセス、自動化に制限あり |
| Attribution Details API |
|
|
テスト専用(ベータ)、技術知識が必要 |
方法1:Device Assistアプリ
テスト端末でデバイスのアトリビューション状態、インストールの詳細、 イベントトラッキングのサマリーを直接視覚的にすばやく確認できる モバイルアプリ。
Device Assistアプリの概要
アプリの機能
Device Assistアプリは、特定の端末についてSingularに記録された 包括的なアトリビューション情報を表示します。
表示されるアトリビューションデータ:
- インストールアトリビューション: インストールのタイムスタンプ、アトリビュートされた メディア、キャンペーン名
- リエンゲージメントアトリビューション: リエンゲージメントのタイムスタンプ、 アトリビュートされたメディア、キャンペーンの詳細
- イベントサマリー: Singularがその端末に対してトラッキングしたセッションと アプリ内イベント
- 端末識別子: トラッキングに使用されたIDFA、IDFV、GAIDまたはその他の識別子
Device Assistアプリの使い方
ステップバイステップの手順
| 1 |
Device Assistアプリのダウンロードテスト端末にSingular Device Assistアプリをインストールしてください:
|
| 2 |
アトリビューション確認の開始Device Assistアプリを開き、メインメニューから 実装確認 を選択してください。
追加機能: Device Assistアプリは、メインメニューからアクセスできる 端末識別子の検索やSDK実装確認ツールも提供しています。 |
| 3 |
端末識別子の選択アプリがプラットフォームに適した端末識別子を自動的に選択します。 選択を確認し、 実装確認 を再度タップして進めてください。
識別子の選択:
|
| 4 |
アトリビューション詳細の確認アプリがSingularプラットフォームに記録された端末の完全な アトリビューション情報を表示します。
表示されるアトリビューション情報
インストールアトリビューションの詳細
インストールタイムスタンプ: 最初のアプリ起動(インストールイベント)の日時 アトリビュートされたメディア: インストールのクレジットを受けた広告メディアまたはソース (例:Facebook、Google Ads、オーガニック) キャンペーン名: インストールにアトリビュートされたマーケティングキャンペーン 追加パラメータ: トラッキングリンクを通じて渡されたキャンペーン固有のパラメータ インストールアトリビューションの解釈
リエンゲージメントアトリビューションの詳細
リエンゲージメントタイムスタンプ: 最新のリエンゲージメントセッションの日時 アトリビュートされたメディア: ユーザーをアプリに呼び戻したソース キャンペーン名: セッションにアトリビュートされたリエンゲージメントキャンペーン 自己アトリビューションネットワーク: 自己アトリビューションネットワーク(Twitter、Facebook、 Google Ads、Snapchatなど)からのリエンゲージメントアトリビューションは、 プライバシー上の理由から「Unattributed」として表示される場合があります。 リエンゲージメントアトリビューションの要件リエンゲージメントアトリビューションが発生するには:
イベントトラッキングサマリー
Device AssistアプリはSingularがその端末に対してトラッキングした すべてのアプリ内イベントのサマリーを表示します。 表示されるイベント情報:
イベントトラッキングの検証イベントサマリーを使用して以下を確認してください:
|
Device Assistのトラブルシューティング
よくある問題
考えられる原因
- アプリ未インストール: 端末にテストアプリがインストールされていないか、 まだ起動していない
- 識別子の不一致: Device AssistがアプリSDKで使用されていない識別子を 確認している
- SDK未初期化: アプリでSingular SDKが正しく初期化されていない
- アトリビューション処理中: アトリビューション決定がまだ確定していない (通常1〜5分かかる)
解決手順
- テストアプリが端末にインストールされ、少なくとも1回起動されていることを確認
- 端末識別子がSDKで使用している識別子タイプと一致していることを確認 (iOSの場合IDFA vs IDFV)
- アプリ起動後5〜10分待ってから再度アトリビューションを確認
- テスティングコンソール を使用してSDK連携を確認
考えられる原因
- 以前の端末使用: キャッシュされたアトリビューションがある端末で以前テストした
- 複数のタッチポイント: アトリビューションウィンドウ内で複数のキャンペーンクリックが発生
- フィンガープリントのマッチング: 確率的アトリビューションが誤ったクリックにマッチした
解決手順
-
端末をリセットしてアトリビューションをクリアしてください:
- テストアプリを削除
- 広告識別子をリセット
- 登録されている場合は テスティングコンソール から端末を削除
- テスト前に新しい端末を使用するか識別子をリセット
- テストにはフィンガープリントの代わりに決定論的アトリビューション (トラッキングリンクに端末IDを含める)を使用
- パートナー設定でアトリビューションウィンドウの設定を確認
考えられる原因
- アトリビューションウィンドウ超過: 設定されたアトリビューションウィンドウ後にインストールが発生
- 一致するタッチポイントなし: 端末に一致するクリックが見つからない
- フィンガープリントの不一致: クリックとインストールの間に端末のフィンガープリントが変更された
- リンク未クリック: トラッキングリンクをクリックせずにストアから直接アプリをインストール
解決手順
- アプリをインストールする前にトラッキングリンクをクリックしたか確認
- アトリビューションウィンドウの設定がインストールに十分な時間を許可しているか確認
- 安定したテストのためにトラッキングリンクに端末IDを使用(決定論的アトリビューション)
- クリックとインストール中に安定したネットワーク接続があることを確認
- 別の端末でテストするか識別子をリセットして再試行
方法2:Attribution Details API
連携テストとCI/CDパイプラインのための自動化されたアトリビューション検証を 可能にするプログラム型APIエンドポイント。
ベータ機能のお知らせ: Attribution Details APIエンドポイントはベータ機能です。 テスト目的のみに使用してください — 本番アプリや大量リクエスト環境では 呼び出さないでください。
APIエンドポイントの仕様
リクエスト形式
エンドポイントURL:
https://api.singular.net/api/attribution/attribution_details
リクエストメソッド: GET
完全なリクエスト例:
https://api.singular.net/api/attribution/attribution_details?keyspace=idfa&device_id=12345678-1234-1234-1234-123456789012&api_key=your_api_key_here
クエリパラメータ
必須パラメータ
| パラメータ | タイプ | 説明 |
|---|---|---|
api_key
|
文字列 |
プラットフォームのSingularレポーティングAPIキー。 場所: ダッシュボード → 開発者ツール → APIキー → レポーティングAPIキー 重要: SDKキーではなくレポーティングAPIキーを使用してください。 それぞれのキーは異なる目的で使用されます。 |
device_id
|
文字列 |
端末の広告識別子の値。
|
keyspace
|
文字列(列挙型) |
|
APIレスポンス
レスポンス形式
APIはリクエストされた端末のアトリビューション詳細を含むJSON配列を返します。
レスポンスのサンプル
[
{
"app_long_name": "com.example.myapp",
"app_name": "My App",
"install_info": {
"install_time": "2020-06-10 11:58:46",
"network": "Network 1",
"additional_parameters": {
"kw": "my keyword",
"pcid": "1234"
},
"campaign_name": "Campaign Name",
"view_through_attribution": false
},
"re_engagement_info": {
"notes": "Attributions from Self-Attributing networks including: Twitter, Facebook, Google Ads, Snapchat, etc are redacted and always show as 'Unattributed'",
"install_time": "2020-06-15 15:27:12",
"network": "Unattributed"
},
"uninstall_pre_requisites": {
"gcm_token": "enE8iQR10RI:APA91bERgfA_xm8T7zgqH9OW_1s05SFFmKnle1zIm0cMrDfuaSxEmC_3j72dj4qN36vh5V8TAEnrXa3Pq3SmLW-XNOHP7daMwcBrBTibdkv_pKMJbN9SbefV6_9nuEfIeI5Zhtz0nlLY"
},
"events": [
{
"event_name": "Session",
"first_event_time": "2020-04-02 00:09:55",
"last_event_time": "2020-04-07 20:59:55",
"event_count": 2
},
{
"event_name": "Save New Transaction",
"first_event_time": "2020-04-02 00:11:51",
"last_event_time": "2020-04-02 00:11:51",
"event_count": 1
}
]
}
]
レスポンスパラメータ
JSONレスポンスフィールド
| フィールド | 説明 |
|---|---|
app_long_name
|
アプリのバンドル識別子(例:com.example.myapp) |
app_name
|
Singularプラットフォームで設定されたアプリの表示名 |
install_info
|
インストールアトリビューションの詳細と決定情報を含むオブジェクト:
|
re_engagement_info
|
リエンゲージメントアトリビューションについて
プライバシーに関する注意: 自己アトリビューションネットワーク(Facebook、Google Ads、 Twitter、Snapchat)からのリエンゲージメントアトリビューションは、 プライバシーコンプライアンスのため「Unattributed」として表示されます。 |
events
|
SDKがトラッキングしたアプリ内イベントのサマリーを含むオブジェクトの配列:
|
uninstall_pre_requisites
|
アンインストールトラッキングの設定を含むオブジェクト:
|
APIの使用例
実装例
iOSデバイス(IDFA)
curl -X GET "https://api.singular.net/api/attribution/attribution_details?keyspace=idfa&device_id=12345678-1234-1234-1234-123456789012&api_key=your_api_key_here"
Androidデバイス(GAID)
curl -X GET "https://api.singular.net/api/attribution/attribution_details?keyspace=aifa&device_id=12345678-1234-1234-1234-123456789012&api_key=your_api_key_here"
ウェブトラッキング(SDID)
curl -X GET "https://api.singular.net/api/attribution/attribution_details?keyspace=sdid&device_id=singular_device_id_value&api_key=your_api_key_here"
Python実装
import requests
import json
def check_attribution(keyspace, device_id, api_key):
"""
Check device attribution using Singular API
Args:
keyspace: Device identifier type (idfa, idfv, aifa, sdid)
device_id: Device identifier value
api_key: Singular Reporting API key
Returns:
Attribution data as JSON or None if error
"""
url = "https://api.singular.net/api/attribution/attribution_details"
params = {
'keyspace': keyspace,
'device_id': device_id,
'api_key': api_key
}
try:
response = requests.get(url, params=params)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"Error checking attribution: {e}")
return None
# Example usage
attribution_data = check_attribution(
keyspace='idfa',
device_id='12345678-1234-1234-1234-123456789012',
api_key='your_api_key_here'
)
if attribution_data:
print(json.dumps(attribution_data, indent=2))
# Extract install info
if attribution_data and len(attribution_data) 0:
install_info = attribution_data[0].get('install_info', {})
print(f"\nInstall Network: {install_info.get('network')}")
print(f"Campaign: {install_info.get('campaign_name')}")
print(f"Install Time: {install_info.get('install_time')}")
JavaScript実装
/**
* Check device attribution using Singular API
*
* @param {string} keyspace - Device identifier type (idfa, idfv, aifa, sdid)
* @param {string} deviceId - Device identifier value
* @param {string} apiKey - Singular Reporting API key
* @returns {Promise} Attribution data or error
*/
async function checkAttribution(keyspace, deviceId, apiKey) {
const url = 'https://api.singular.net/api/attribution/attribution_details';
const params = new URLSearchParams({
keyspace: keyspace,
device_id: deviceId,
api_key: apiKey
});
try {
const response = await fetch(`${url}?${params.toString()}`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('Error checking attribution:', error);
throw error;
}
}
// Example usage
checkAttribution(
'idfa',
'12345678-1234-1234-1234-123456789012',
'your_api_key_here'
)
.then(data = {
console.log('Attribution Data:', JSON.stringify(data, null, 2));
// Extract install info
if (data && data.length 0) {
const installInfo = data[0].install_info || {};
console.log('\nInstall Network:', installInfo.network);
console.log('Campaign:', installInfo.campaign_name);
console.log('Install Time:', installInfo.install_time);
}
})
.catch(error = {
console.error('Failed to check attribution:', error);
});
APIのトラブルシューティング
よくあるAPIの問題
問題
APIがアトリビューションデータの代わりに空の配列
[]
を返します。
考えられる原因
- アトリビューションデータなし: 端末にアプリがインストールされたことがないか、 セッションがトラッキングされていない
- 識別子の誤り: 端末IDまたはkeyspaceが正しくない
- タイミングの問題: アトリビューションデータがまだ処理されていない (インストール後通常1〜5分かかる)
解決手順
- 端末IDが余分なスペースなく正しくコピーされていることを確認
- keyspaceが識別子タイプと一致していることを確認(iOSの場合idfa vs idfv)
- アプリインストール後5〜10分待ってからクエリを再試行
- Device Assistアプリを使用してアプリがインストールされトラッキングされていることを確認
問題
APIが認証エラーまたは401 Unauthorizedレスポンスを返します。
考えられる原因
- 無効なAPIキー: APIキーが正しくないか提供されていない
- キータイプの誤り: レポーティングAPIキーの代わりにSDKキーを使用している
- キーの期限切れ: APIキーが失効または再生成された
解決手順
- ダッシュボード → 開発者ツール → APIキー → レポーティングAPIキーに移動
- レポーティングAPIキーをコピー(SDKキーではない)
- APIキーがリクエストに正しく貼り付けられていることを確認
- キーが最近再生成された場合は新しいキーの値を使用していることを確認
セキュリティ警告: APIキーをバージョン管理にコミットしたり、クライアント側の コードに公開したりしないでください。環境変数または安全な設定管理を 使用してください。
問題
APIが429 Too Many RequestsまたはRate Limitエラーを返します。
考えられる原因
- 過剰なリクエスト: 短時間に多すぎるAPIコール
- 本番環境での使用: 本番環境でAPIを使用(意図された使用ケースではない)
解決手順
- コードに指数バックオフとリトライロジックを実装
- APIリクエストの間隔を空ける(最低1秒の間隔を推奨)
- APIコールを減らすために可能な場合はアトリビューションデータをキャッシュ
- 正当なテストでより高いレート制限が必要な場合はSingularサポートに連絡
ベータの制限: Attribution Details APIはテスト専用として設計されています。 大量リクエストが発生する本番アプリでは使用しないでください。
ベストプラクティス
連携テストとキャンペーン検証における効果的なアトリビューション検証の ための推奨事項。
テストワークフロー
推奨テストプロセス
- 新しい端末を使用: キャッシュされたアトリビューションを避けるために、 クリーンな端末を使用するか、テスト前に広告識別子をリセットしてください
- すぐに確認: テスト中の素早いフィードバックのために、インストール後 5〜10分以内にアトリビューションを確認してください
- 複数のシナリオをテスト: 異なるソース(オーガニック、有料キャンペーン、 リエンゲージメント)のアトリビューションを検証してください
- 結果を記録: 連携検証のドキュメント化のためにアトリビューション検証の 結果を記録してください
- 可能な限り自動化: 継続的な検証のために、自動化テストスイートで Attribution Details APIを使用してください
方法選択ガイド
各方法を使用するタイミング
| シナリオ | 推奨方法 |
|---|---|
| クイックマニュアルテスト | Device Assistアプリ — 開発中の最も速いビジュアル検証 |
| 自動化テスト | Attribution Details API — CI/CDパイプラインのプログラムによる検証 |
| 非技術系テスト | Device Assistアプリ — コーディングやAPIの知識不要 |
| 複数端末の一括検証 | Attribution Details API — 複数端末の確認をスクリプト化 |
| イベントトラッキングの検証 | 両方の方法 — Device Assistでクイックチェック、APIで詳細なイベント分析 |
連携検証チェックリスト
アトリビューション検証チェックリスト
完全なアトリビューション検証:
- インストールが正しいメディア/ソースにアトリビュートされている
- キャンペーン名が期待されるキャンペーンと一致している
- アトリビューションのタイムスタンプが妥当である(期待される時間枠内)
- アトリビューション方法が適切である(クリック vs インプレッション)
- カスタムパラメータがトラッキングリンクを通じて正しく渡されている
- セッションイベントが正しくトラッキングされている
- カスタムイベントが正しい名前で表示されている
- 収益イベントが金額と通貨をキャプチャしている
- リエンゲージメントアトリビューションが機能している(該当する場合)
- アンインストールトラッキングが設定されている(実装されている場合)
追加リソース
アトリビューションテスト、SDK連携、トラッキングリンク設定に関する 完全なドキュメント。
関連ドキュメント
- テスティングコンソールの使い方 — SDK連携テスト完全ガイド
- トラッキングリンクのテスト方法 — トラッキングリンク検証手順
- Singularのモバイルアプリアトリビューションを理解する — アトリビューションの方法論とプロセス
- トラッキングリンクパラメータとレポートディメンション — 完全なパラメータリファレンス
- リエンゲージメントアトリビューションFAQ — リエンゲージメントアトリビューションのドキュメント