UserAgentをカスタマイズすることによる影響はありますか?

UserAgent をカスタマイズすることによって WebView 上で動作する計測タグによるトラッキングに影響が出る場合があります。

KARTE の計測タグでは、ブラウザの UserAgent をチェックした上で、計測対象ブラウザであるか判定を行っております。
そのためデフォルトの UserAgent を大きく変更した場合に、計測対象外と判定されトラッキングが行われない状態になる場合があります。

推奨するUserAgentのカスタマイズ方法

UserAgent をカスタマイズする場合は、基本的には デフォルトUserAgent + カスタム文字列 という構成にしていただくことを推奨しております。

独自のUserAgentを使用する場合

完全に独自の UserAgent を使用する場合、そのままではブラウザチェックで計測対象外と判定されてしまいます。
これを回避するために、代替の UserAgent を設定する必要があります。

代替UserAgentの指定方法

スクリプトを使用して代替 UserAgent の指定を行います。
window.__karte_user_agent 変数を定義することで、代替UserAgentを使用してブラウザチェックを行うようになります。

override func viewDidLoad() {
  super.viewDidLoad()

  // 代替UserAgentを設定するためのスクリプト
  let source = "window.__karte_user_agent = \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko)\""
  let userScript = WKUserScript(source: source, injectionTime: .atDocumentStart, forMainFrameOnly: false)

  let userContentController = WKUserContentController()
  userContentController.addUserScript(userScript)

  let configuration = WKWebViewConfiguration()
  configuration.userContentController = userContentController

  let webView = WKWebView(frame: .zero, configuration: configuration)
  
  // ユーザースクリプトを設定した後で、ページのロード処理を行う
  if let url = URL(string: "https://example.com") {
    let request = URLRequest(url: url)
    webView.load(request)
  }
}
override fun onCreate(savedInstanceState: Bundle?) {
  ...
  webView.webViewClient = object : WebViewClient() {
    override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
      super.onPageStarted(view, url, favicon)
      if (view == null) return
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        val script = String.format(
          "window.__karte_user_agent = \"%s\";",
          ""
        )
        view.evaluateJavascript(script) { }
      }
    }
  }
  ...
}

🚧

代替 UserAgent について

代替 UserAgent には、ブラウザが本来持つデフォルトの UserAgent を指定するようにしてください。
こちらに独自の UserAgent を指定した場合は、ブラウザチェックにより計測対象外と判定される場合があります。