【Swift】WKWebViewでUserAgentを変更する方法

今日は Swift の WKWebView についてです。
UIWebView が非推奨になったので、以前開発したアプリを WKWebView を使用するように修正していたところ、UserAgent の処理で躓いたので備忘録としてまとめます。

今回、UserAgent の変更にあたり、参考にさせていただいた記事はこちら。

[Swift]WKWebViewのUserAgentに追記をする|杏z学習帳
https://blog.anzfactory.xyz/articles/20190902/swift-wkwebview-custom-useragent/

なお、UserAgent とは、Webページを閲覧する際に、ブラウザがサーバーに自動送信している情報のことで、ブラウザの種類やバージョン、OS の種類やバージョンなどの情報が送信されています。
が、今回の記事にもある通り、結構容易に変更が可能なので、必ずしも正しい情報とは言えません。

 

さて方法ですが、個人的に分かりやすかった書き方が 2種類があります。

まず、1つめがこちら。

var webView: WKWebView? = WKWebView()
webView?.evaluateJavaScript("navigator.userAgent") { (userAgent, error) in
    // nil を代入しておかないと、error が代入され userAgent が nil になってしまう
    webView = nil

    let newUserAgent = userAgent! as! String + "[追加したい情報]"
    UserDefaults.standard.register(defaults: [
        "UserAgent": newUserAgent
    ])
}

2行目の、evaluateJavaScript で JavaScript の navigator.userAgent を実行し、UserAgent を取得します。
取得が成功したら、そこに追加したい情報を追加し、7行目の UserDefaults.standard.register で UserAgent を上書きしています。
こちらでも問題なさそうですが、evaluateJavaScript で実行する処理が非同期なので、少しめんどくさいとのことでした。

なので、本命はこちらです。

let config = WKWebViewConfiguration()
config.applicationNameForUserAgent = [追加したい情報]
let webview = WKWebView(frame: .zero, configuration: config)

1行目の WKWebViewConfiguration() で現在の UserAgent を取得してから、2行目で、追加したい UserAgent を指定しています。
デフォルトの情報はそのままで、追加したい UserAgent を追記していってくれますので、文字列の結合を考えなくて済みます。
なによりコードがすっきりしているので、とても分かりやすいです。
もちろん、こちらを採用させていただきました。

アプリ実行後、UserAgent を確認したところ、無事、追加したい情報が追記されておりました!
ちなみに、UserAgent の確認方法ですが、Safari の検証ツールを使う方法の他にも、Swift で下記のコードを実行する方法もあります。

var webView: WKWebView? = WKWebView() 
webView.evaluateJavaScript("navigator.userAgent") { (userAgent, error) in
  // nilを代入しておかないと、errorが代入されuserAgentがnilになってしまう
  webView = nil 
  print(userAgent)
}

こちらの処理は、下記の記事を参考にさせていただきました。

【WKWebView】UserAgentの取得方法 – Qiita
https://qiita.com/pon_y_z/items/8849edbc53f1fe11bef8

当然ですが、UserAgent の追記処理の後で実行してください。

 

以上、Swift のWKWebView で UserAgent を変更する方法でした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG