概要
このガイドでは、共通のS2Sの仕組みの上に重なる、モバイル固有のアトリビューションシグナルを扱います。具体的には、Apple Search Ads、Google PlayおよびMetaのインストールリファラー、アンインストール計測、そしてiOSインストールレシートです。セッションとイベントをサーバー間(server-to-server)で報告するiOSおよびAndroidアプリの連携に適用されます。
これらの機能は、共通のS2Sリクエストフローがすでに実装されていることを前提としています。これらが基盤とするエンドポイント、認証、共通パラメータについては、まずファンダメンタルズのハブと2つのエンドポイントリファレンスから始めてください。
始める前に: これらの機能は共通のS2Sリクエストフローの上に構築されています。エンドポイントと共通パラメータについては S2Sファンダメンタルズのハブ を、 SESSIONエンドポイントリファレンス 、および EVENTエンドポイントリファレンス をご覧ください。
Apple Search Adsアトリビューション
iOS Search Adsの連携
Apple Search Adsは自己アトリビューションネットワーク(SAN)であり、Appleのフレームワークを介したプラットフォーム固有のアトリビューション実装が必要です。
フレームワークのサポート:
- iOS 14.2以前: iADフレームワーク
- iOS 14.3以降: AdServicesフレームワーク (推奨)
両方の実装: iADが非推奨になるまで、iADとAdServicesの両方のフレームワークを実装してください。Singularはアトリビューションとレポートにおいて、iADのシグナルよりもAdServicesを優先します。
詳細ガイド: Apple Search Ads連携ドキュメント
iADフレームワークの実装
iOS 14.2以前向けに、iADフレームワークを介してApple Search Adsのアトリビューションデータを取得して送信します。
ステップ1:アトリビューションデータを取得する
#import <iAd/iAd.h>
Class ADClientClass = NSClassFromString(@"ADClient");
if (ADClientClass) {
id sharedClient = [ADClientClass performSelector:@selector(sharedClient)];
if ([sharedClient respondsToSelector:@selector(requestAttributionDetailsWithBlock:)]) {
[sharedClient requestAttributionDetailsWithBlock:^(NSDictionary *attributionDetails, NSError *error) {
if (attributionDetails && attributionDetails.count > 0) {
// REPORT attributionDetails FROM YOUR APP TO YOUR SERVER
}
}];
}
}
レイテンシへの対応: Search Adsをクリックしたユーザーは、すぐにアプリをダウンロードして開くことがあります。次の方法でアトリビューションのタイミングに関する問題を防いでください:
- アトリビューションデータを取得する前に数秒の遅延を設定する
- レスポンスがFalseの場合、またはエラーコード(0、2、3)の場合にリトライロジックを実装する。2秒後にリトライする
ステップ2:Singularに送信する
予約名
__iAd_Attribution__
を使用し、
EVENTエンドポイント
を介して、アトリビューションのJSONを
e
パラメータとして渡し、イベントを報告します。
タイミングの要件:
-
iOS 13以降:インストール/再インストール後の最初のセッションの直後に
__iAd_Attribution__イベントを送信してください。そうしないと、Apple Search Adsのデータはアトリビューションで考慮されません -
iOS 14以降:アトリビューションのレスポンスは
特定の条件下でのみ
利用可能であり、ATTステータスが
ATTrackingManager.AuthorizationStatus.deniedの場合は利用できません
AdServicesフレームワークの実装
iOS 14.3以降向けに、AdServicesフレームワークを介してアトリビューショントークンを取得して送信します。
ステップ1:アトリビューショントークンを取得する
#import <AdServices/AdServices.h>
NSError *error = nil;
Class AAAttributionClass = NSClassFromString(@"AAAttribution");
if (AAAttributionClass) {
NSString *attributionToken = [AAAttributionClass attributionTokenWithError:&error];
if (!error && attributionToken) {
// Handle attributionToken
}
}
トークンの特性:
- デバイス上で生成される
-
5分間キャッシュされる—有効期限後に
attributionToken()が呼び出されると新しいトークンが生成される - 24時間有効
ステップ2:Singularに送信する
トークンをURLエンコードし、すべてのインストールおよび再インストール後の最初のセッションで、
SESSIONエンドポイント
に
attribution_token
パラメータとして付加します。
Google Playインストールリファラー
Androidインストールアトリビューション
Google Playインストールリファラーは、Playストアに到達する前のユーザーの発生元に関する情報を含んでおり、最も正確なAndroidインストールアトリビューションを提供します。
次の場合に必須:
- ユーザーレベルエクスポート でのFacebookデータ
- データデスティネーション との共有
- ポストバックの送信
詳細情報: Googleインストールリファラードキュメント
実装手順:
- Play Install Referrer API を使用して、最初のアプリ起動時にインストールリファラーを取得する
-
必須の属性を含む
install_refJSONパラメータを含めて、 SESSIONエンドポイント を介してセッションを報告する
install_refの属性:
| パラメータ | 詳細 |
|---|---|
referrer
|
Play Install Referrer APIからのリファラー値(JSONオブジェクト—文字列としてエンコードする) |
referrer_source
|
"service"を指定する |
clickTimestampSeconds
|
APIからのクリックタイムスタンプ(例:"1550420123") |
installBeginTimestampSeconds
|
APIからのインストール開始時刻 |
current_device_time
|
現在のデバイス時刻(ミリ秒単位、例:"1550420454906") |
Metaインストールリファラー
Facebookアトリビューションの強化
2025年6月18日時点: Metaの Advanced Mobile Measurement(AMM) により、Metaインストールリファラーの実装が不要になりました。AMMが有効な場合は推奨されません。
MetaリファラーはAndroid固有の計測ソリューションで、Google PlayインストールリファラーとMetaインストールリファラーの技術を組み合わせることで、アプリインストールに関する詳細なユーザーレベルのアトリビューションデータを提供します。
詳細はこちら: MetaリファラーFAQ
実装手順:
- Metaのドキュメント に従って、最初のアプリ起動時にMetaインストールリファラーを取得する
-
必須の属性を含む
meta_refJSONパラメータを含めて、 SESSIONエンドポイント を介してセッションを報告する
meta_refの属性:
| パラメータ | 詳細 |
|---|---|
is_ct
|
Metaインストールリファラーからのis_ct(0または1) |
install_referrer
|
Metaインストールリファラーからのinstall_referrer |
actual_timestamp
|
Metaインストールリファラーからのactual_timestamp(例:1693978124) |
アンインストール計測
サイレントプッシュ通知の設定
すべてのセッション通知でプッシュトークンを送信することにより、デバイスのサイレントプッシュ通知を使用してアンインストールを計測します。
設定要件:
- プラットフォーム固有のアンインストール計測の設定に従ってください:
-
プラットフォーム固有のトークンをSESSIONリクエストに付加してください:
-
iOS:
apns_token(APNsデバイストークン) -
Android:
fcm(FCMデバイストークン)
-
iOS:
iOSインストールレシート
レシートの検証
iOSセッションを報告する際に、
install_receipt
パラメータでiOSインストールレシートを渡します。
import Foundation
import StoreKit
class ReceiptManager {
static func getInstallReceipt() -> String? {
if #available(iOS 18.0, *) {
let semaphore = DispatchSemaphore(value: 0)
var result: String?
Task {
do {
let transaction = try await AppTransaction.shared
result = transaction.jwsRepresentation
semaphore.signal()
} catch {
debugPrint("Failed to get app transaction: \(error.localizedDescription)")
semaphore.signal()
}
}
semaphore.wait()
return result
} else {
guard let receiptURL = Bundle.main.appStoreReceiptURL else {
debugPrint("Receipt URL not found")
return nil
}
do {
let receiptData = try Data(contentsOf: receiptURL, options: .uncached)
return receiptData.base64EncodedString(options: [])
} catch {
debugPrint("Failed to read receipt: \(error.localizedDescription)")
return nil
}
}
}
}