WebView内の行動をトラッキングする

WebView内の行動(ページ遷移など)をトラッキングしたい場合に、WebViewトラッキングの機能を利用することで実現可能です。

実装方法

Webページ内に 計測タグ を設置してWebViewトラッキングを行います。
実装は以下のステップで行います。

  1. Webページ内に計測タグを設置する
  2. WebとAppのユーザーの紐付け処理を実装する

STEP1: Webページ内に計測タグを設置する

計測タグの設置方法については、セットアップしよう(ウェブ) をご覧ください。

なお、既にKARTEをご契約中でWebページに計測タグが設置されている場合は、このステップは不要です。

STEP2: WebとAppのユーザーの紐付け処理を実装する

Webページに計測タグを設置することでページロードに合わせてトラッキングが行われるようになりますが、このままではネイティブSDKでトラッキングした情報(ネイティブアプリ内のユーザー行動)と、計測タグでトラッキングした情報(WebView内のユーザー行動)が、別のユーザー行動としてトラッキングされます。

ネイティブアプリ上の行動とWebページ上での行動を同一のユーザー行動としてトラッキングするために、それぞれのユーザーの紐付け処理を行う必要があります。

📘

紐付け処理によってできること

  • 紐付け前後のネイティブアプリ内のユーザー行動と、WebView内のユーザー行動が紐付く(紐付け後WebView内・ネイティブアプリ内のユーザーは同一ユーザーとして扱われます)
  • 計測タグが発行する全イベントの _source フィールドの値が native_app_webview となる
  • 計測タグが発行する全イベントのmetadataフィールド内に app_info フィールドが付与される

🚧

マルチドメインオプションとの併用について

WebとAppのユーザー紐付け処理はマルチドメインオプションによるクロスドメインでのユーザ統合機能の対象外となります

紐付け処理の実装方法
UserSync.getUserSyncScript を用いて、ユーザースクリプトを取得し、WebView上でユーザースクリプトを実行することで連携が可能です。

ユーザースクリプトの設定が行われたWebViewでページをロードすることにより、紐付けが行われた状態でトラッキングが行われます。

unity-webview を利用した実装例

public class webview : MonoBehaviour
{
    WebViewObject webViewObject;

#if UNITY_IOS && !UNITY_EDITOR
    bool userSyncScriptInjected = false;
#endif

    // Start is called before the first frame update
    void Start()
    {
        webViewObject = (new GameObject("WebViewObject")).AddComponent<WebViewObject>();
        webViewObject.Init(
            started: (msg) =>
            {
#if UNITY_ANDROID && !UNITY_EDITOR
                // Androidはこのタイミングでロードすれば紐付けが行われる。
                var userSyncScript = UserSync.getUserSyncScript();
                webViewObject.EvaluateJS(userSyncScript);
#endif
            }//,
        );

#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
        webViewObject.bitmapRefreshCycle = 1;
#endif
        webViewObject.SetMargins(5, Screen.height / 2, 5, Screen.height / 4);
        webViewObject.SetTextZoom(100); 
    }

#if UNITY_IOS && !UNITY_EDITOR
    // iOSはwebviewのstartedで実行するとタイミングが早すぎる。
    // progressを監視して、少しprogressが進んだタイミングで一度だけ実行する。
    // progress > 0などだと早すぎる場合があったため、progress > 10としている。
    void Update()
    {
        if (userSyncScriptInjected) {
            return;
        } 
        var progress = webViewObject.Progress();
        if (progress > 10 && progress < 100) {
            var userSyncScript = UserSync.getUserSyncScript();
            webViewObject.EvaluateJS(userSyncScript);
            userSyncScriptInjected = true;
        }
    }
#endif

    public void OnLoadURL()
    {
        string url = "https://example.com";
#if UNITY_IOS && !UNITY_EDITOR
        // EvaluateJSを複数回実行することを防ぐためのフラグ
        userSyncScriptInjected = false;
#endif
        webViewObject.SetVisibility(true);
        webViewObject.LoadURL(url);
    }
}

🚧

ユーザースクリプトを実行できない場合

ユーザースクリプトを実行できない環境では、SDKによるユーザー紐付けは行えません。
以前提供していた、クエリパラメータによる紐付けは非推奨となり、予告なく機能を停止する可能性があります。
identifyイベントを発火して、明示的にユーザーを紐づけてください。

🚧

クエリパラメータの有効期限について

クエリパラメータには1分の有効期限を設けており、有効期限が切れている場合は紐付けが行われません。
そのためページをロードする際は、URLに都度クエリパラメータを付与するようにしてください。

STEP3: 動作検証を行う

管理画面のユーザー詳細画面で、Webページ上での行動がネイティブアプリ上での行動として扱われているか確認してください。

計測タグ経由でトラッキングされた閲覧イベントに APP アイコンが付いていれば、ネイティブアプリ上での行動として扱われております。

🚧

WebView内で発生したイベントをトリガーに接客を配信する際の注意点

WebView内で発生したイベント(_sourcenative_app_webview のイベント)をトリガーに配信される接客サービスはSDKではなくアプリが管理するWebViewにアクションが表示されます。WebViewがWKWebViewの場合、そのままではアクション内のURLスキームが自動で処理されません。URLスキームを処理するためにはWKWebViewのnavigationDelegateの実装が必要となります。

トラブルシューティング

WebViewの紐付け処理やWebView内に表示した接客で問題が起きた場合は以下ページをご確認ください。
WebView内の接客やWebView連携で問題が発生した時のチェックリスト