PBA Web SDK 実装ガイド

概要:概要:Web SDKを使用してAppsFlyerをWebサイトに実装し、サイトトラフィック、イベント、コンバージョン、収益などを計測しましょう。

5107_Infographic_Web_S2S_759x270_option1.jpg

Web SDKの利用・実装ガイド

  • Web SDK JavaScriptタグは、以下の特徴を持ちます:
    • 複数のプラットフォームをまたいだユーザージャーニーを分析する、People-Based Attribution(PBA)ソリューションの一部です。
    • Webサイト上でのユーザーの訪問および行動をAppsFlyerプラットフォームに送信します。
    • プログラミング不要で導入できるWebサイト用プラグインモジュールです。Webサイト訪問者のOSやブラウザに依存しません。
    • サイズ:40 - 60KB
  • モバイルアプリとWeb環境をまたいだユーザー行動を記録・紐付けるために、AppsFlyerモバイルSDKとあわせてWeb SDKを実装してください。
  • Webサイト外で発生するイベントは、Web server-to-server events API(Web S2S)を使用して記録できます。

コードスニペットの選択

統合タイプとセキュリティ要件に一致するスニペットを選択してください。以下の項目が選択可能です:

  • スタンダードWeb SDK:標準的な実装です。
  • アドバンスSDK検証:Web Web SDKにサプライチェーン保護を追加する強化版インテグレーションです。CDNの侵害、DNSハイジャック、中間者攻撃(MITM)に対する追加のセキュリティレイヤーを提供します。

【重要】

スタンダードWeb SDKからアドバンスSDK検証へ移行する場合は、既存のスニペットを新しいものに置き換えてください。既存のスニペットの上に新しいスニペットを追加しないでください。

スタンダードWeb SDK

このスニペットを使用して、スタンダードWeb SDK連携を導入します。SDKを読み込みたいすべてのページのタグの上部付近に貼り付けてください。

Smart Banners なし

<script>
  // Queue — buffers AF() calls until the SDK is ready
  window.AppsFlyerSdkObject = "AF";
  window.AF = window.AF || function() {
    (window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
  };
  window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" } };
  window.AF.plugins = {};

  // Inject SDK
  var o = document.createElement("script"),
      p = document.getElementsByTagName("script")[0];
  o.async = 1;
  o.src = "https://websdk.appsflyersdk.com?" + "st=pba&af_id=WEB_DEV_KEY";
  p.parentNode.insertBefore(o, p);
</script>

Smart Banners あり

<script>
  // Queue — buffers AF() calls until the SDK is ready
  window.AppsFlyerSdkObject = "AF";
  window.AF = window.AF || function() {
    (window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
  };
  window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" }, banners: { key: "YOUR_BANNER_KEY" } };
  window.AF.plugins = {};

  // Inject SDK
  var o = document.createElement("script"),
      p = document.getElementsByTagName("script")[0];
  o.async = 1;
  o.src = "https://websdk.appsflyersdk.com?" + "st=pba,banners&af_id=WEB_DEV_KEY";
  p.parentNode.insertBefore(o, p);
  AF('banners', 'showBanner');
</script>

アドバンスSDK検証

アドバンスSDK検証は、Web SDKにサプライチェーン保護を追加する仕組みです。これにより、ユーザーのブラウザ上で実行されるコードが、AppsFlyerによって提供されたものと完全に一致していることが保証されます。SDKのソースコード自体はスタンダードインテグレーションと同一であり、異なるのは配信および検証の仕組みのみです。

アドバンスSDK検証の特徴は以下の通りです:

  • CDNの侵害、DNSハイジャック、中間者攻撃(MITM)に対する追加のセキュリティレイヤーを提供
  • SDKの読み込み時間が約250ms増加

アドバンスSDK検証は任意であり、スタンダードインテグレーションも引き続き完全にサポートされています。標準インテグレーションはサードパーティ分析ピクセルにおける一般的な実装方法であり、アドバンスSDK検証はそれに対して追加の保護レイヤーを提供します。

なお、ウェブサイトでnonceを用いたContent Security Policy(CSP)を適用している場合は、「プライバシー管理」セクションのCSPに関する項目をご参照ください。

Smart Banners なし

<script>
  // Queue — buffers AF() calls until the SDK is ready
  window.AppsFlyerSdkObject = "AF";
  window.AF = window.AF || function() {
    (window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
  };
  window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" } };
  window.AF.plugins = {};

  // Manifest loader config
  window.AF_LOADER_CONFIG = {
    baseUrl: "https://websdk.appsflyersdk.com",
    plugins: ["pba"]
  };

  // Inject manifest loader
  var loaderScript = document.createElement("script");
  loaderScript.src = "https://websdk.appsflyersdk.com/manifestLoader.v1.js";
  loaderScript.integrity = "sha384-Uncl2YwvjFpFz0PwEfl3bL/0JsOQcDFEpwXHzcN0MBavn9vvFEx5pZxADTq8h+CV";
  loaderScript.crossOrigin = "anonymous";
  loaderScript.async = true;
  document.head.appendChild(loaderScript);
</script>

Smart Banners あり

<script>
  // Queue — buffers AF() calls until the SDK is ready
  window.AppsFlyerSdkObject = "AF";
  window.AF = window.AF || function() {
    (window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
  };
  window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" }, banners: { key: "YOUR_BANNER_KEY" } };
  window.AF.plugins = {};

  // Manifest loader config
  window.AF_LOADER_CONFIG = {
    baseUrl: "https://websdk.appsflyersdk.com",
    plugins: ["banners", "pba"]
  };

  // Inject manifest loader
  var loaderScript = document.createElement("script");
  loaderScript.src = "https://websdk.appsflyersdk.com/manifestLoader.v1.js";
  loaderScript.integrity = "sha384-Uncl2YwvjFpFz0PwEfl3bL/0JsOQcDFEpwXHzcN0MBavn9vvFEx5pZxADTq8h+CV";
  loaderScript.crossOrigin = "anonymous";
  loaderScript.async = true;
  document.head.appendChild(loaderScript);
</script>

Web SDKのWebサイトへの実装

インストールと実装

考慮事項と必要なアクション

実装チェックリスト
訪問とイベントを記録できるようにするため、Web SDKはWebサイト内のすべてのページにインストールする必要があります。 
上記で選択したスニペットコードを、ページスコープ内でできるだけ早く読み込まれるように配置してください。そのため、head タグのなるべく上部にコードを配置します。

Googleタグマネージャー(GTM)を使用してSDKを実装する場合:

  • SDKが1ページ読み込みにつき1回のみ読み込まれるようにしてください。
  • GTM の優先度設定を使用して、ページ読み込み時にできるだけ早くSDKが読み込まれるように設定してください。
Web SDKは、Smart Banners ありなしのいずれでも実装できます。以降の該当セクションの手順に従ってください。

実装の必須要件

  • サイト訪問の計測
  • イベントの計測
  • カスタマーユーザーID(CUID)の設定:CUIDがない場合は、代替案についてCSMに連絡してください。 

テストツールを使用して実装を検証してください

はじめる前に

  • マーケターにブランドバンドルが作成済みであることを確認してください。 
  • 詳細なガイダンスについては、PBA 導入ガイドを参照してください。
  • 注意:すでにstandalone Smart Banners web SDKを導入している場合は、それを削除し、Smart BannersとPeople-based Attributionの両方に対応するWeb SDKへ置き換えてください。standalone Web SDK for PBAを単純に追加するだけでは対応しないでください。 

以下を実施してください:

  • Web SDKのWeb Dev Keyを入手してください。  注意:これは、アプリのSDK実装時に使用するDev Keyとは異なります。
    •  Web Dev Key の取得方法: 
      1. AppsFlyerの管理画面上、上部メニューからマイアプリタブを選択します。
      2. ブランドバンドルを表示]をクリックします。
      3. 必要なWeb Dev Keyをコピーしてください。(WEB_DEV_KEY)
  • Smart Bannersを実装する場合は、Smart Banner keyも取得します。 
    • Smart Banner Keyを取得するには:
      1. AppsFlyer のサイドメニューから、Engage>Web-to-app>Smart Bannersを選択してください。
      2. 必要な Smart Banner Key をコピーしてください。 
  • Webサイト上で head タグにスクリプトを追加する権限が必要です。
  • Googleタグマネージャーを使用する場合は、ウェブサイトに統合する必要があります。

以下のいずれかの方法でWeb SDKの実装を進めてください。  

Native Google Tag Manager  Adobe Launch Tag Manager 

JavaScriptコードスニペット

以下のいずれかの方法を使用して、Web SDKを実装してください。  

Smart BannerなしでWeb SDKを実装するには:

  1. 以下の手順を、Webサイト上のすべてのページで繰り返してください。
  2. 以下のコードスニペット内の WEB_DEV_KEY を、事前準備で取得したキーに置き換えてください。
  3. 上記で選択したコードスニペットをウェブサイトのheadタグに貼り付けてください。head タグのなるべく上部に配置してください。

Smart Bannerと一緒にWeb SDKを実装するには:

  1. ウェブサイトのすべてのページで以下の手順を繰り返してください。
  2. 上記で選択したコードスニペット内で、WEB_DEV_KEYYOUR_BANNER_KEYを前提条件で指定されたキーを使用して置き換えてください。
  3. このコードスニペットをウェブサイトのheadタグに貼り付けてください。head タグのなるべく上部に配置してください。

SDKの動作確認

インストールしたら、AppsFlyer Web SDKが訪問者のブラウザーによって呼び出され、メッセージが送信されていることを確認してください。これは、ブラウザで報告されたメッセージネットワーク接続を調べることによって行います。

SDKが読み込まれていることを確認するには:

  1. ウェブサイトに移動してください。
  2. デベロッパーコンソールを開きます。

    WebSDK_us-en.jpg

  3. (A)[Network] タブへ移動してください。  
  4. ページを更新(リロード)します。
  5. (B) wa.appsflyer で絞り込みます。
  6. (C) events メッセージを選択してください。 
  7. (D)ヘッダータブで、以下のことを確認してください。
    • Request URL が wa.appsflyer.com/events であること。
    • site_id query parameter= WEB_DEV_KEY.
    • (E) ステータスコードが200であること。
  8. site_id の値が、ブランドバンドル設定の WEB_DEV_KEY の値と同じであることを確認してください。
    1. AppsFlyerの管理画面上では、サイドメニューから設定 > ブランドバンドルを選択してください。
    2. [Web dev key] をクリックすると、キーがコピーされます。
    3. キーを任意の場所(新しいブラウザやノートパッド)に貼り付け、キーを表示します。
    4. site_idとWEB_DEV_KEYが一致していることを確認してください。 
  9. SDKが一度だけ読み込まれるようにしてください。何度かSDKをロードすると、SDKの機能が停止する場合があります。

オプトイン/オプトアウトのイベント送信

5578-VistiorPrivacyOptIn_us-en.png

Web SDKは訪問者のイベントデータをAppsFlyerに送信します。このセクションでは、イベント送信の制御、停止、開始の方法について説明します。 

注意:

  • SDK初期状態設定:Webページの初回読み込み時にSDKがイベント送信を開始するか、明示的なコマンドがあるまで待機するかを決定します。この設定はWebスニペット内に含まれます。
  • 明示的コントロールイベント送信の停止または開始に使用します。たとえば、データのオプトイン/オプトアウトバナー(いわゆるcookie consent banner)を実装する場合は、イベント送信の開始・停止コマンドをそのバナーの制御に組み込んでください。明示的なコントロールははSDKの初期状態設定より優先され、以下の特性を持つ永続的なファーストパーティCookieを使用します。
    • Webサイトのドメイン上に設定される
    • Web SDKで設定された期間、またはブラウザにより決定される期間で失効する。Cookie失効後、Web SDKは初期状態設定に戻ります。
    • Web SDKのCookieは、ブラウザ固有のCookie設定に干渉せず、常にその設定に従います。
       

SDK初期状態設定

設定 必要なスニペット
[デフォルト]イベントを送信

Web SDKスニペットに次の変更を加えます。 必要に応じて、measurementStatus パラメーターを追加してください:

measurementStatus=true に設定します。

{pba: {webAppId: "********-****-****-*****************", measurementStatus:true}

イベントを送信しない

 

Web SDKスニペットに次の変更を加えます。必要に応じて、measurementStatus パラメーターを追加してください:

Set measurementStatus=false

{pba: {webAppId: "********-****-****-*****************", measurementStatus:false}

明示的コントロール

任意 コマンド
イベント送信開始 (オプトイン) window.AF_SDK.PLUGINS.PBA.enableMeasurement()
イベント送信停止 (オプトアウト) window.AF_SDK.PLUGINS.PBA.disableMeasurement()

コンテンツ・セキュリティ・ポリシー(CSP)ポリシーの導入

ウェブサイトで厳格なセキュリティ要件またはデータプライバシー要件が求められる場合は、以下の仕組みを使用して、Web SDKがあなたの環境およびデータとどのように連携するかを設定してください。

コンテンツ・セキュリティ・ポリシー(CSP)

ウェブサイトでJavaScriptをCSPによって保護する必要がある場合、Web SDKはCSPの構成に応じて2つの方法をサポートしています。

  • selfを使用すたCSPscript-srcの許可リストに https://websdk.appsflyersdk.com を追加してください。これは、スタンダードWeb SDKとアドバンスSDK検証の両方で機能します。
  • nonceを使用したCSP:ポリシーで script-src 'nonce-...' を使用している場合は、アドバンスSDK検証のnonce拡張版を利用できます。これにより、検証プロセスで必要となる3つのscriptタグすべてにnonceが引き渡されます。{{CSP_NONCE}}は、サーバー側でリクエストごとに生成されるnonce値に置き換えてください。

以下の表は、どのCSPポリシーがnonce拡張版と互換性があるかを示しています。

ポリシー 作業 備考
script-src 'self' いいえ 外部CDNオリジンが許可されておらず、インラインスクリプトもブロックされます。
script-src 'self' https://websdk.appsflyersdk.com 一部可能 ローダーおよびSDKは許可されますが、インラインのセットアップスクリプトは引き続きブロックされます。
script-src 'nonce-...' https://websdk.appsflyersdk.com はい nonceによってインラインスクリプトとローダーが許可され、SDKタグにはローダー経由でnonceが引き渡されます。
script-src 'nonce-...' 'strict-dynamic' はい(推奨) nonceによってインラインスクリプトとローダーが許可され、strict-dynamic により動的に挿入されるSDKタグにも信頼が引き継がれます。許可リストにCDNオリジンを追加する必要はありません。
CSPポリシーとの互換性

CSP nonce対応のアドバンスSDK検証用スニペット

Smart Banners なし

<script nonce="{{CSP_NONCE}}">
  // Queue — buffers AF() calls until the SDK is ready
  window.AppsFlyerSdkObject = "AF";
  window.AF = window.AF || function() {
    (window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
  };
  window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" } };
  window.AF.plugins = {};

  // Manifest loader config — nonce forwarded to the injected SDK <script> tag
  window.AF_LOADER_CONFIG = {
    baseUrl: "https://websdk.appsflyersdk.com",
    plugins: ["pba"],
    nonce: "{{CSP_NONCE}}"
  };

  // Inject manifest loader
  var loaderScript = document.createElement("script");
  loaderScript.src = "https://websdk.appsflyersdk.com/manifestLoader.v1.js";
  loaderScript.integrity = "sha384-Uncl2YwvjFpFz0PwEfl3bL/0JsOQcDFEpwXHzcN0MBavn9vvFEx5pZxADTq8h+CV";
  loaderScript.crossOrigin = "anonymous";
  loaderScript.nonce = "{{CSP_NONCE}}";
  loaderScript.async = true;
  document.head.appendChild(loaderScript);
</script>

Smart Banners あり

<script nonce="{{CSP_NONCE}}">
  // Queue — buffers AF() calls until the SDK is ready
  window.AppsFlyerSdkObject = "AF";
  window.AF = window.AF || function() {
    (window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
  };
  window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" }, banners: { key: "YOUR_BANNER_KEY" } };
  window.AF.plugins = {};

  // Manifest loader config — nonce forwarded to the injected SDK <script> tag
  window.AF_LOADER_CONFIG = {
    baseUrl: "https://websdk.appsflyersdk.com",
    plugins: ["banners", "pba"],
    nonce: "{{CSP_NONCE}}"
  };

  // Inject manifest loader
  var loaderScript = document.createElement("script");
  loaderScript.src = "https://websdk.appsflyersdk.com/manifestLoader.v1.js";
  loaderScript.integrity = "sha384-Uncl2YwvjFpFz0PwEfl3bL/0JsOQcDFEpwXHzcN0MBavn9vvFEx5pZxADTq8h+CV";
  loaderScript.crossOrigin = "anonymous";
  loaderScript.nonce = "{{CSP_NONCE}}";
  loaderScript.async = true;
  document.head.appendChild(loaderScript);
</script>

クエリパラメータの破棄

クエリパラメータにAppsFlyerへ記録したくないデータが含まれている場合、AppsFlyerプラットフォームに対して一部またはすべてのクエリパラメータを破棄するよう指示できます。これにより、それらはraw dataやレポートでは利用できなくなります。 

この方法は、URL、referrer、header_refererに関連して実装できます。

クエリ破棄のオプション

メソッド 説明 
すべてのクエリパラメータの破棄 URLにaf_url=trueを追加します
特定のクエリ・パラメータの破棄

Query param maskを設定することで、どのパラメータを破棄するか指定できます。  param がパラメータ名として、af_url_mask=param を設定します。

例: 

マスク付きのURL:

param1=value1&param2=value2&param3=value3&af_url_mask=param2;param3

破棄後のURL:

param1=value1&af_url_mask=param2;param3

イベント記録の原則

コンバージョンとスタンダードイベント

  • ユーザーイベントはSDKによって記録され、SDKはイベントをAppsFlyerに送信します。
  • マーケティング担当者が設定したコンバージョンイベントリストを使用して、AppsFlyerはイベントをスタンダードイベントとコンバージョンイベントに分割します。
  • コンバージョンイベントデータはPBAの管理画面でも利用できます。
  • コンバージョンおよびスタンダードイベントデータは、 ローデータレポート 内で利用できます。

コンバージョンイベント

  • コンバージョンイベントはマーケティング施策やビジネス成果に関するインサイトを提供します。具体的には、購入、ダウンロード、サインアップ、サブスクリプション登録などが含まれます。
  • ユーザーをWebサイトに導いたメディアソースにコンバージョンイベントを紐付けることが、Web SDKにより可能になります。
  • 紐付けるメディアソースを特定することで、さまざまなメディアソースによってもたらされるユーザーの質を計測および区別できるようになります。
  • コンバージョンイベントでは、収益の計測やROIの計算も可能になります。
  • 特定のメディアソースの予算をそのメディアソースのユーザーによる収益と比較するために使用してください。

スタンダードイベント

  • スタンダードイベントは、コンバージョンにつながるユーザージャーニーとファネルを評価するのに役立ちます。
  • さらに、ユーザーアクティビティを計測し、エンゲージメントの高いユーザーが多いメディアソースをハイライトすることができます。
  • ユーザーアクティビティを計測することで、リエンゲージメントキャンペーンを実施するべきユーザーの選定にも活用できます。

イベントの計測

ランディングページが読み込まれたときやユーザーがWebサイト上で何らかの操作したときなど、特定の条件が満たされたときにWeb SDKをトリガーしてイベントを記録してください。計測イベントの例を参照してください。

カスタマーユーザーID(CUID)を使用したユーザーの識別

  • Webユーザーは、割り当てた一意のCUIDを使用してAppsFlyer上で識別されます。通常、CUIDはお客様側のバックエンドサーバーで管理されます。 
  • モバイル環境で使用しているものと同じCUID値を使用してください。これにより、複数のプラットフォームをまたいだユーザー行動を包括的に把握できます。モバイルSDKの関数はsetCustomerUserIdです。(iOS, Android, Unity
  • Web SDKでCUIDを設定するには:
    • CUIDにアクセスできるようになった最も早い時点で設定してください。多くの場合、ユーザーがログインまたはサインアップして識別された後になります。
    • 以下の例のように、setCustomerUserId() を設定するJavaScript呼び出しを実行してください。
      注意: CUIDが数値であっても、文字列として送信してください。引用符で囲んでください。
  • Web S2Sを実装する場合は、バックエンドでCUIDをWeb Visitor IDに紐付けた際に、PBAへ通知する必要が生じる可能性がある点を考慮してください。
  • CUIDには、 直接識別できる個人情報(電話番号や電子メールアドレスなど)は含めないでください。

例:CUIDの設定

// Associate all current user web events to distinct ID 663274 
AF('pba', 'setCustomerUserId' , '663274')

Web SDKのイベントパラメータ

パラメーター名 必須 説明
eventType はい

イベントタイプ

形式:文字列

このパラメーターには常にEVENTを入力してください。

例: eventType:"EVENT"

eventName はい

イベント名

形式:文字列

例:Purchase, Subscription

eventCategory  いいえ このパラメータは非推奨であり、後日案内される日付にシステムから削除されます。代わりに eventValue パラメータを使用してください。

eventLabel 

 

いいえ このパラメータは非推奨であり、後日案内される日付にシステムから削除されます。代わりに eventValue パラメータを使用してください。
eventRevenue いいえ

Conversion eventに紐づく収益

形式:Float

eventRevenueCurrency いいえ

収益通貨

  • 3文字の ISO 4217 通貨コード
  • デフォルト:USD

形式:文字列

eventValue いいえ
イベントを説明する、イベントパラメータの一覧。このパラメーターを使用して、製品、アイテム価格などの情報をリッチアプリ内イベントで送信してください。 
形式:JSON

例:青色で単価が3.99ドルの、商品(sku)" ABC123"を送信するには

{"sku": "ABC123", “color": "blue", "unit_price":3.99,"currency": "USD"} 

制限:1000文字まで。これを超えると切り捨てられます。 

イベント計測シナリオ

イベントの例

// purchase event of shoes with associated revenue
AF('pba', 'event', {eventType: 'EVENT', eventName: 'purchase', eventRevenue: 12, eventValue: {"key1": 123, "key2": "name"}});

送信するイベントは、Webサービスの性質によって異なります。たとえば、オンラインストアのアプリで必要となるイベント群は、ニュースメディアのアプリとは異なります。以下のシナリオを参考に、どのようなイベントを、どのタイミングで送信すべきかを把握してください。

オンラインストア

オンラインストアを運営しているとします。記録したいスタンダードイベントの例は以下のとおりです。 

  • 検索:スタンダードイベント
  • カート追加:スタンダードイベント
  • カート削除:スタンダードイベント
  • 購入:コンバージョンイベント

ニュースサイト

ニュースサイトを運営しているとします。記録したいイベントは次のとおりです:

  • サインアップ - コンバージョンイベント
  • 定期購読の登録 - コンバージョンイベント

イベントが送信されているかの確認

このパートはWeb開発者向けです。

PBAのWeb SDK実装テスト:テストイベントをリアルタイムで表示します。

イベントがAppsFlyerへ送信されているかの確認

  1. Webサイトを開いてください。
  2. ブラウザー開発者ツールを開きます。
  3. Networkタブに切り替えてください。
  4. イベントを発火させます。
  5. message で絞り込んでください。

    pba_af_event.png

  6. wa.appsflyer.com で始まるネットワークリクエストを探してください(以下スクリーンショットを参照してください)。
  7. 以下を確認してください。
    1. ステータスコードが200であること
    2. Request Payload がイベントのパラメーターと一致していること

イベントの計測

ここで示すコードは、あくまで説明用です。そのまま使用しないでください。 

  • 前提条件:前提条件:イベント送信時点で、ページ上ですでにWeb SDKが読み込まれていること。
  • 以下のシナリオ例では、次の場合にイベントを記録するコードを示します。 
    • ランディングページが読み込まれる時:
    • ユーザーがWebサイト上で行動した時:
ネイティブイベント計測 タグマネージャー経由イベント計測

ランディングページのロード時のイベント計測

  • メルマガの定期購読登録のページがあり、その登録数を計測したい場合。
  • 登録完了したユーザーを、予め作成したサンキューページにリダイレクトさせることも可能です。
<html>
    <head>
        <!-- Assume that the server returns a response with details about the newly subscribed user -->
        <!-- Alternatively, you can extract data from localStorage or cookies,
            in case data was set in either of them during the subscription process
        -->
        <script>window.onload = function(){
            AF('pba', 'event', {eventType: 'EVENT', eventValue: {'category': 'holiday_promotion', eventValue: {'label' : 'newspaper'}, eventName: 'subscription',}); } </script> </head> <body> <h1>Thank You for Subscribing to Our Newsletter</h1> </body> </html>
  • 上記のコードは基本的なHTMLページです。イベントを送信するには、そのWebページでWeb SDKが読み込まれている必要があります。
  • ユーザーがリダイレクトされた後にページが読み込まれると、ウィンドウロードメソッドが、AF() APIメソッドを呼び出して、定期購読 (サブスクリプション) のイベントをAppsFlyerに送信します。

ユーザーのウェブサイト上の行動を計測

  • ECサイトを運営していて、購入イベントを計測したい場合。
  • ユーザーが購入ボタンをクリックすると、WebSDKがイベントをAppsFlyerに送信します。
<html>
<head>
    <!-- Assume that data about products in the shopping cart
    is stored in localStorage -->
    <script>
        window.onload = function () {
            document.getElementById('checkout').addEventListener('click', function () {
                AF('pba', 'event', {eventType: 'EVENT', eventValue: {'category' : 'holiday_promotion'}, eventName: 'checkout'});
            });
        }
    </script>
</head>
<body>
    <h1>Shopping Cart</h1>
    <h2>Shirt</h2>
    <p>
        <ul>
            <li>Color: Blue</li>
            <li>Quantity: 2</li>
            <li>Price: $20</li>
        </ul>
    </p>
    <h2>Pants</h2>
    <p>
        <ul>
            <li>Color: Black</li>
            <li>Quantity: 3</li>
            <li>Price: $15</li>
        </ul>
    </p>
    <button id='checkout'>Checkout</button>
</body>
</html>

上記のコードは基本的なHTMLページです。 イベントを送信するには、そのWebページでWeb SDKが読み込まれている必要があります。

  • ページが読み込まれると、クリックリスナーとチェックアウトボタンが紐づきます。
  • ユーザーが購入ボタンをクリックすると、コールバック関数が次のことを実行します:
    • localStorageからデータを取得します。
    • AF() メソッドを呼び出してデータを渡します。
  • AF() メソッドは、AppsFlyerにイベントを送信します。
  • イベントが発生する前に、Web SDKのfunctionsタグがロードされていることを確認してください。
  • イベントの値で特殊文字・記号を送信しないようにしてください(例:通貨マークなど)
  • 値は半角50文字以下に設定してください。

サインアップ後のカスタマーユーザーIDの設定

これらの例で示しているコードは、あくまで参考用です。このコードをそのまま使用しないでください。コードの使い方がわからない場合は、Web開発者に相談してください。

前提条件:どちらの例も、イベントが送信される前にWeb SDKがページによって既にロードされていることを前提としています。Web SDKを再度読み込まないでください。

ユーザーシナリオ:

  • ユーザーがウェブサイトでサインアップを完了しました。
  • Webサイトのコードがユーザー情報を収集し、サーバーに送信します。
  • サーバーは、ユーザー対してユニークなCUIDを付与します。
  • サインアップ完了後のサンキューページにおいて、新しくCUIDをサーバーから取得します。
  • サーバーのレスポンスを使用して、Web SDKの setCustomerUserId() のメソッドを使用してAppsFlyerのCUIDを設定してください。
ネイティブ Googleタグマネージャー

サインアップ(登録)ページの設定

<html>
<head>
    <!-- The Web SDK script loads first -->
    <script>
!function(t,e,n,s,a,c,i,o,p){t.AppsFlyerSdkObject=a,t.AF=t.AF||function(){
(t.AF.q=t.AF.q||[]).push([Date.now()].concat(Array.prototype.slice.call(arguments)))},
t.AF.id=t.AF.id||i,t.AF.plugins={},o=e.createElement(n),p=e.getElementsByTagName(n)[0],o.async=1,
o.src="https://websdk.appsflyersdk.com?"+(c.length>0?"st="+c.split(",").sort().join(",")+"&":"")+(i.length>0?"af_id="+i:""),
p.parentNode.insertBefore(o,p)}(window,document,"script",0,"AF","pba",{pba: {webAppId: "WEB_DEV_KEY"}})
    </script>
    <script>
        };
    // This function stores the user email sent to the server after the user reaches the thank you page
    // The response from the server is a unique CUID that should be set using the web SDK setCustomerUserId method
        function storeUserEmail (){
            var userEmail = document.getElementById('email').value;
            localStorage.setItem('user_email', userEmail);
        }
    </script>
</head>
<body>
    <h1>Sign Up</h1>
    <form onsubmit="storeUserEmail()" action="/signup" method="post">
        <div><label>Name</label>
            <input type="text" name="name" id="name"></div>
        <br />
        <div> <label>Email</label>
            <input type="email" name="email" id="email"></div>
        <br />
        <input type="submit" id="submit">
    </form>
</body>
</html>

上記のコードはシンプルなサインアップフォームです。フォームが送られると、メールアドレスがローカルストレージに保存されます。ユーザーがサンクスページに到達すると、そのメールアドレスがサーバーへ送信され、そのメールアドレスに対応する一意のCUIDが生成されます。

サインアップ完了後のサンクスページの設定

<html>
<head>
    <script>
!function(t,e,n,s,a,c,i,o,p){t.AppsFlyerSdkObject=a,t.AF=t.AF||function(){
(t.AF.q=t.AF.q||[]).push([Date.now()].concat(Array.prototype.slice.call(arguments)))},
t.AF.id=t.AF.id||i,t.AF.plugins={},o=e.createElement(n),p=e.getElementsByTagName(n)[0],o.async=1,
o.src="https://websdk.appsflyersdk.com?"+(c.length>0?"st="+c.split(",").sort().join(",")+"&":"")+(i.length>0?"af_id="+i:""),
p.parentNode.insertBefore(o,p)}(window,document,"script",0,"AF","pba",{pba: {webAppId: "WEB_DEV_KEY"}})
    </script>
    <script>
        // Using the fetch API to send the user email to the server
        // and get the unique user id in return	
        window.onload = function () {
            var userEmail = localStorage.getItem('user_email');
            fetch('users/' + userEmail).then(function (res) {
                   res.text().then(function (id) {
                    console.log(id);
                    AF('pba', 'setCustomerUserId', id);
                });
            });
        }  </script> 
     </head> 
     <body> 
        <h1>Thank You for Signing Up!</h1> 
     </body> 
</html>

このコードはfetch APIを使用しています。ユーザーが入力したメールアドレスをサーバーに送信します。サーバーがサインアップ時に一意のCUIDを生成すると仮定すると、メールアドレスをサーバーへ送信する目的は、その一意のCUIDを受け取ることにあります。サーバーは一意のCUIDを返し、そのCUIDがsetCustomerUserId メソッドに渡される値になります。

setCustomerUserIdのfunctionは、ユーザーのログインとサインアップの後など、ユーザーフローのどの段階でも送信できます。AppsFlyerは、最新のCUIDを使用して、過去または未来のタッチポイントとイベントのユーザー情報を更新します。

モバイルアプリの setCustomerUserd 関数で実行したのと同じCUID値を使用してください(モバイルの setCustomerUserId を参照してください:iOSAndroidUnity

追加情報

Web SDK cookies

以下の表に記載されたCookieは、Web SDKによってWebサイト上で設定または使用されます。 

表の中では以下のような略語が使われています。

  • AMP:Accelerated Mobile Pages 
  • CDN:コンテンツ・デリバリー・ネットワーク (Content Delivery Network)
  • 3PC:サードパーティCookie
Cookie名  ドメイン 有効期間 使用条件 詳細
afUserId お客様のウェブサイトのドメイン 395日 non-AMP Webページの読み込みおよびナビゲーションイベントの文脈でユーザーを識別します
AF_SYNC お客様のウェブサイトのドメイン 1週間 non-AMP
  • 最終的なユーザー識別子が設定されていることを示すフラグ。
  • サイトの読み込み時間を短縮するために使用されます
af_id appsflyer.com 395日 3PCが許可されている場合はnon-AMP アプリ起動およびナビゲーションイベントの文脈でユーザーを識別します 
af_id onelink.me 395日 3PCが許可されている場合はnon-AMP バナー経由のエンゲージメント、またはOneLink経由のエンゲージメント(またはその両方)をアプリ起動イベントに紐付けます
amp-afUserid AMP CDN もしくは あなたのウェブサイトのドメイン 1年 AMPで配信されるページ  
AF_DEFAULT_MEASUREMENT_STATUS お客様のウェブサイトのドメイン 395日 PBAの同意状態を保存します。ユーザーの同意が得られるまでSDKの動作を停止します。デフォルトでは設定されず、同意管理(consent gating)を構成した場合のみ使用されます non-AMP

Web SDKリリースノート

日付  バージョン 備考
2021-07-01 1.0 クエリパラメータの破棄
2021-06-01 1.0 コンテンツ・セキュリティ・ポリシー(CSP)の導入 
2020-08-31 1.0 オプトイン / オプトアウト機能の追加
2020-04-16 1.0 customerUserId() 関数は、一意のCUIDを送信するための IDENTIFY イベントを置き換えます。
2020-07-30 1.0
  • イベントを送信するための明示的な開始/停止コントロール
  • デフォルトの初期状態の変更

廃止通知

  • 廃止の通知は、機能またはメソッドのサポートを停止するというAppsFlyerからの事前連絡になります。この機能またはメソッドは、サポート終了日までは機能し続けます。
  • この廃止の通知を、コードを変更する機会と見なしてご活用ください。
廃止通知日 サポート終了日 詳細
2020-04-16 未定

非推奨のメソッド:eventTypeを "IDENTIFY" に設定して、顧客ユーザーID (CUID) をイベントパラメータ customUserid で送信しないでください。 

現在のメソッド: setCustomerUserId() 関数を使用してCUIDを送信してください。