はじめに
こんにちはsuzukiです。今回はWebViewのユーザーエージェントについての備忘のための記事です。
UserAgentとは
WKWebViewでは、Webページを閲覧する際に、サーバーに自動送信している情報のことで、ブラウザの種類やバージョン、OS の種類やバージョンなどの情報が送信されています。
リクエストされた側はUserAgentを見ることで、アクセスしてきたユーザーのOSやブラウザバージョンによって表示を切り替えたりすることも可能です。
UserAgentの例
Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
UserAgentの変更方法
変更する方法は複数方法があります。
①UserDefaultを利用する
アプリを通してのカスタムの値として設定できます。
②WKWebView.customUserAgentを利用する
WebView毎にカスタムの値が設定可能できます。
①より優先されます。
③WKWebViewConfiguration.applicationNameForUserAgentを利用する
WebViewのConfig毎にOSデフォルトの値にカスタムの値を追加できます。
①②が優先されるため、利用している場合はうまく動きません。
UserDefaultを利用して変更する方法
WKWebViewはUserDefaultに”UserAgent”というkeyがあるとその値を送信します。
アプリの起動時下記のようなコードを記述することで簡単に設定できます。
1 | UserDefaults.standard.register(defaults: ["UserAgent":"hogehoge"]) |
ただ上記のコードだと単純に書き換えてしまう実装になるため、リクエストされた側は今まで取得できていた情報が取れず困ることになります。
そのためUserAgentを変更する場合は既存の送信情報に追加して特定の内容を送信するようなパターンが多いです。
下記のような形でデフォルトのUAを取得した上で変更する形がいいのかなと思います。
1 2 3 4 5 6 7 8 9 | var webView: WKWebView? = WKWebView() webView!.evaluateJavaScript("navigator.userAgent", completionHandler: { (result, error) in //実際に使わないWebViewの場合は下記でwebviewを破棄する必要がある。 webView = nil guard let ua = result as? String else { return } UserDefaults.standard.register(defaults: ["UserAgent" : ua + "hogehoge"]) }) |
WKWebView.customUserAgentを利用して変更する方法
下記のようなコードで実装可能です。
WebView毎に異なるUserAgentを設定する場合や、特定のWebViewだけ異なるUserAgentを設定したいときに便利です。
1 2 | let webview = WKWebView(frame: .zero) webview.customUserAgent = "custom user agent" |
WKWebViewConfiguration.applicationNameForUserAgentを利用して変更する方法
OSのデフォルトの値に最後に何か追加したい場合に便利です。
1 2 3 | let config = WKWebViewConfiguration() config.applicationNameForUserAgent = "+ custom value" let webview = WKWebView(frame: self.view.frame, configuration: config) |
さいごに
UserAgentはアプリの都合で変更することはあまりないので、ついつい忘れるのでまとめておきました。