WebView内の行動をトラッキングする
WebView内の行動(ページ遷移など)をトラッキングしたい場合に、WebViewトラッキングの機能を利用することで実現可能です。
実装方法
Webページ内に 計測タグ
を設置してWebViewトラッキングを行います。
実装は以下のステップで行います。
- Webページ内に計測タグを設置する
- 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内で発生したイベント(
_source
がnative_app_webview
のイベント)をトリガーに配信される接客サービスはSDKではなくアプリが管理するWebViewにアクションが表示されます。iOSにおいてWebViewがWKWebViewの場合、そのままではアクション内のURLスキームが自動で処理されずアクション経由のリンク遷移ができません。URLスキームを処理してアクション経由のリンク遷移を動作させるためにはWKWebViewのnavigationDelegateの実装が必要となります。
トラブルシューティング
WebViewの紐付け処理やWebView内に表示した接客で問題が起きた場合は以下ページをご確認ください。
WebView内の接客やWebView連携で問題が発生した時のチェックリスト
Updated about 2 months ago