概要:Webアトリビューション向けS2S APIを利用すると、Web訪問やイベントをブラウザ経由ではなく、お客様のサーバーからAppsFlyerへ直接送信できます。これにより、広告ブロッカーやCookie制限などブラウザ特有の制約を回避できます。Web SDKと組み合わせて利用することも、S2S APIのみを利用することも可能で、より網羅的かつ高品質なアトリビューションデータを取得できます。
Webアトリビューション向けS2S APIについて
AppsFlyerでは、Webデータをアトリビューションのために送信する方法として、Web SDK(クライアントサイド)とS2S API(Server-to-Server)の2種類を提供しています。これらは、それぞれ単独で利用することも、運用環境や要件に応じて組み合わせて利用することもできます。
Web SDKはブラウザ上で動作します。一方、S2S APIでは同じデータをお客様のバックエンドから直接送信できます。この違いは非常に重要です。Safari ITP、Firefox ETP、Braveなどのプライバシー保護を重視したブラウザや広告ブロッカーは、ブラウザ上で行われる計測を制限またはブロックする場合があります。業界では、このようなブラウザレベルでの制限の影響を受けるユーザーはWebユーザー全体の25~40%程度と推定されています。S2S APIによるリクエストはお客様のサーバーから直接送信され、ブラウザを経由しないため、これらの制限の影響を受けません。
仕組み
- ユーザーがウェブサイユーザーがWebサイトへアクセスする、またはブラウザ上でイベントを発生させます。
- お客様のサーバーがそのイベントを受信します。
- お客様のサーバーからAppsFlyerサーバーへイベントを直接送信し、アトリビューションを行います。
S2Sを使用するメリット
S2S APIを利用することで、以下のようなメリットがあります:
- サーバー側で発生するイベントを計測できる:一部のコンバージョンはブラウザを経由しません。例えば、バックエンドで処理されるサブスクリプション更新や、CRMシステムで発生するイベントなどが該当します。これらのイベントをAppsFlyerへ送信し、適切なキャンペーンへアトリビューションできるのは、S2S APIのみです。
- 計測対象を拡大できる:S2S APIによるリクエストはブラウザではなくサーバーから送信されるため、広告ブロッカー、Safari ITPによるCookie制限、その他ブラウザレベルの制限の影響を受けません。その結果、クライアントサイド計測だけでは取得できない訪問やコンバージョンも計測できます。
- バックエンドのデータを追加できる:S2S APIでは、イベント送信前にバックエンド側で追加情報を付与できます。 例えば、以下の情報を追加できます: ・Customer User ID ・ハッシュ化したメールアドレス ・ハッシュ化した電話番号 ・CRM属性 ・サブスクリプションステータス ・社内システムの識別子これにより、ユーザー識別の精度が向上し、アトリビューションの品質も高まります。
- セキュリティを強化できる:Dev Key、ユーザー識別子、および追加したデータはすべてお客様のサーバー内で管理され、安全な通信を通じてAppsFlyerへ送信されます。そのため、お客様はインフラストラクチャの外部へ送信する情報を完全に管理できます。
API仕様
Base URL:https://events.appsflyer.com
認証
すべてのリクエストには、有効なS2S APIトークンおよび適切なContent-Typeをリクエストヘッダーに含める必要があります。
| Header | 型 | 説明 |
|---|---|---|
Authorization |
APIトークン |
S2S APIトークンを以下の形式で指定します。 Authorization: Bearer {s2s-token} |
Content-Type |
string |
application/jsonを指定します。すべてのリクエストで必要です。 |
注意
S2S APIトークンを作成するには、AppsFlyerトークンの管理の手順を参照してください。
イベントの計測
POST /v2.0/s2s/inapps/app/web/{appId}
指定したアプリに対して、購入、会員登録、カスタムアクションなどのWebイベントを計測します。
パスパラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
appId |
必須 | AppsFlyerで定義されているunified_app_id。例:website-www.example.com
|
リクエスト本文
| 項目 | 型 | 必須 | 説明 |
|---|---|---|---|
user_id |
object | 必須 | ユーザー識別子。customer_user_idまたはappsflyer_idのいずれかを少なくとも1つ含める必要があります。 |
event_name |
string | 必須 | イベント名。1~64文字で指定します。@ = + -を含めることはできません。例:af_purchase
|
event_revenue |
number(double) | 任意 | 購入イベントまたは収益化イベントの売上金額。 |
event_revenue_currency |
string (ISO-4217) | 任意 | 売上金額の通貨コード。例:USD , EUR
|
event_value |
object | 任意 | 自由形式のイベントパラメータ。custom_parameters のサブオブジェクトに対応しています。 |
event_url |
string | 任意 | イベントが発生したページのURL。有効なHTTP URLで、最大4,096文字まで指定できます。 |
timestamp |
integer (int64) | 任意 | Unix時間(ミリ秒、UTC)。省略した場合、AppsFlyerは受信時刻を使用します。遅延イベントの受付期限:イベントは、アプリのタイムゾーンにおける翌暦日の00:30までに到着している必要があります。 |
ip |
string | 任意 | デバイスのIPアドレス(IPv4またはIPv6)。最大46文字まで指定できます。 |
user_agent |
string | 任意 | ブラウザから取得した完全なユーザーエージェント文字列。最大1,024文字まで指定できます。 |
http_referrer |
string | 任意 | 現在のページのリファラURL。 |
customer_dedup_id |
string | 任意 | お客様側で指定する重複排除用の識別子。 |
email_hashed |
string | 任意 | 正規化されたメールアドレス(小文字化・前後の空白削除済み)のSHA256ハッシュ値。64文字の16進数文字列である必要があります。 |
phone_number_hashed |
string | 任意 | 電話番号のSHA256ハッシュ値。64文字の16進数文字列である必要があります。 |
phone_number_e164_hashed |
string | 任意 | E.164形式の電話番号(例:+14155552671)のSHA256ハッシュ値。64文字の16進数文字列である必要があります。 |
first_name_hashed |
string | 任意 | 正規化された名のSHA256ハッシュ値。64文字の16進数文字列である必要があります。 |
last_name_hashed |
string | 任意 | 正規化された姓のSHA256ハッシュ値。64文字の16進数文字列である必要があります。 |
リクエスト例
{"user_id":{"customer_user_id":"15667737-366d-4994-ac8b-653fe6b2be4a"},"event_name":"af_purchase","event_revenue":49.99,"event_revenue_currency":"USD","event_value":{"af_content_id":"SKU-001","af_quantity":2,"custom_parameters":{"promo_code":"SUMMER10"}},"event_url":"https://example.com/checkout/success","timestamp":1712000000000,"ip":"35.244.183.10","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...","email_hashed":"a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"}レスポンス
| ステータス | 説明 |
|---|---|
| 202 Accepted | リクエストが受け付けられました。status、message、および任意でmessageIdが返されます。 |
| 400 Bad Request | フィールドが無効、または不足しています。 |
| 401 Unauthorized | アプリが存在しない、または認証に失敗しました。 |
| 403 Forbidden | アプリのトラフィックがブロックされています。 |
| 415 Unsupported Media Type |
Content-Type は application/json である必要があります。 |
Web訪問の計測
POST /v2.0/s2s/visits/app/web/{appId}
指定したWebアプリのページ訪問を計測します。このエンドポイントは、イベント計測エンドポイントと共通の基本フィールドを使用しますが、以下の2点が異なります。
・event_url は必須です。
・event_nameおよび収益関連のフィールドは使用しません。
パスパラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
appId |
必須 | AppsFlyerで定義されているunified_app_id。例:website-www.example.com
|
リクエスト本文
| 項目 | 型 | 必須 | 説明 |
|---|---|---|---|
user_id |
object | 必須 | ユーザー識別子。customer_user_idまたはappsflyer_idのいずれかを少なくとも1つ含める必要があります。 |
event_url |
string | 必須 | 訪問したページのURL。有効なHTTP URLで、最大4,096文字まで指定できます。 |
timestamp |
integer (int64) | 任意 | Unix時間(ミリ秒、UTC)。省略した場合、AppsFlyerは受信時刻を使用します。遅延イベントの受付期限:訪問データは、アプリのタイムゾーンにおける翌日の00:30までに到着している必要があります。 |
ip |
string | 任意 | デバイスのIPアドレス(IPv4またはIPv6)。最大46文字まで指定できます。 |
user_agent |
string | 任意 | ブラウザから取得した完全なユーザーエージェント文字列。最大1,024文字まで指定できます。 |
http_referrer |
string | 任意 | 現在のページのリファラURL。 |
event_value |
object | 任意 | 自由形式のイベントパラメータ。custom_parametersのサブオブジェクトを含めることができます。 |
customer_dedup_id |
string | 任意 | お客様側で指定する重複排除用の識別子。 |
email_hashed |
string | 任意 | 正規化されたメールアドレスのSHA256ハッシュ値。64文字の16進数文字列である必要があります。 |
phone_number_hashed |
string | 任意 | 電話番号のSHA256ハッシュ値。64文字の16進数文字列である必要があります。 |
phone_number_e164_hashed |
string | 任意 | E.164形式の電話番号のSHA256ハッシュ値。64文字の16進数文字列である必要があります。 |
first_name_hashed |
string | 任意 | 正規化された名のSHA256ハッシュ値。64文字の16進数文字列である必要があります。 |
last_name_hashed |
string | 任意 | 正規化された姓のSHA256ハッシュ値。64文字の16進数文字列である必要があります。 |
リクエスト例
{"user_id":{"appsflyer_id":"1234567890abcdef","customer_user_id":"15667737-366d-4994-ac8b-653fe6b2be4a"},"event_url":"https://example.com/products/sneakers","timestamp":1712000000000,"ip":"35.244.183.10","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...","http_referrer":"https://www.google.com/","email_hashed":"a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"}レスポンス
| ステータス | 説明 |
|---|---|
| 202 Accepted | リクエストが受け付けられました。status、message、および任意でmessageIdが返されます。 |
| 400 Bad Request | フィールドが無効、または不足しています。 |
| 401 Unauthorized | アプリが存在しない、または認証に失敗しました。 |
| 403 Forbidden | アプリのトラフィックがブロックされています。 |
| 415 Unsupported Media Type |
Content-Type は application/json である必要があります。 |
考慮事項
ユーザー識別
すべてのリクエストでuser_idのオブジェクトを指定する必要があります。以下のいずれかの識別子を必ず含めてください。
| 項目 | 型 | 説明 |
|---|---|---|
customer_user_id |
string(1~64文字) | お客様のシステムで設定している内部ユーザー識別子です。 |
appsflyer_id |
string(1文字以上) | AppsFlyerがWebユーザーに付与する内部識別子です。AppsFlyer Web SDKを利用している場合は、appsflyer_idはWeb SDKのCookieから取得できます。afUserIdを参照してください。詳しくは「Web SDKの afUserID の抽出」を参照してください。
|
遅延イベントの受付期間
イベントおよびWeb訪問は、アプリのタイムゾーンにおける翌日の00:30までにAppsFlyerへ到着する必要があります。この期限を過ぎて受信したイベントは、イベントに含まれるタイムスタンプではなく、AppsFlyerが受信した時刻が使用されます。
ハッシュ化された個人情報(PII)項目
すべての個人情報(PII)項目は、送信前にSHA256でハッシュ化する必要があります。ハッシュ化する前に、文字列は小文字へ変換し、前後の空白を削除して正規化してください。各ハッシュ値は、大文字・小文字を区別しない64文字の16進数文字列である必要があります。
- すべてのハッシュフィールドで使用するパターンは以下のとおりです:
^[a-fA-F0-9]{64}$ -
phone_number_e164_hashedを使用する場合は、電話番号をE.164形式(例:+14155552671)へ変換してからハッシュ化してください。
Web SDKの afUserID の抽出
-
afUserIdは、ユーザーが初めてWebサイトへアクセスした際に、Web SDKによって設定される一意の識別子です。 -
afUserIdが必要な場合は、以下のいずれかの方法で取得できます。
HTTP CookieヘッダーからafUserIdを取得する
-
afUserIdは、ユーザーのブラウザからWebサイトへ送信されるHTTP Cookieヘッダーに含まれています。 - 必要に応じてHTTP Cookieヘッダーから取得してください。
ブラウザでafUserIdを確認する
- トラブルシューティングやデバッグを行う場合は、ブラウザ上で
afUserIdを確認できます。 - afUserIdを確認するには、ユーザーがWeb SDKを組み込んだページへ少なくとも1回アクセスしている必要があります。
-
afUserIdを含むCookieは、お客様のドメインに対するファーストパーティCookieとして保存されます。 - 以下の手順はChrome 81を使用して作成しています。ブラウザやOSによって表示や操作方法が異なる場合があります。
ブラウザからafUserIdを取得する:
- ブラウザでWebサイトを開きます。
- ページ上で右クリックし、Inspectを選択します。ブラウザの開発者ツールが表示されます。
- (A) Applicationタブを開きます。
- サイドメニューにて、(B)[Cookie]を開きます。
- お客様のWebサイトを選択します。表示されない場合はブラウザを更新してください。
- (C) フィルター欄に
afUserIdと入力すると、afUserIdの値が表示されます。