LoginSignup
14
6

More than 3 years have passed since last update.

iOS 13以降 iPadのUserAgentに注意 (WKWebView)

Posted at

Xcode 11 でビルドしたWebViewのUserAgentのデバイスごとの比較です。
注目したいのは iOS 13.0 iPad 9.7 インチ以上のUserAgentで、iPadではなくMacintoshとなっています。

UserAgent

iOS 13.0 iPhone
Mozilla/5.0 (iPhone; CPU iPhone OS 13_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148

iOS 13.0 iPad mini 5
Mozilla/5.0 (iPad; CPU OS 13_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148

iOS 13.0 iPad 9.7 インチ以上
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko)

iOS 12.4 iPhone
Mozilla/5.0 (iPhone; CPU iPhone OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148

iOS 12.4 iPad mini
Mozilla/5.0 (iPad; CPU OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148

iOS 12.4 iPad 9.7 インチ以上
Mozilla/5.0 (iPad; CPU OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148

問題

このMacintosh UserAgentを2020年5月時点でいまだに認識していないサイトがあります。
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko)

Twitter

Screen Shot 2020-05-10 at 19.56.53.png

YouTube

Screen Shot 2020-05-10 at 19.55.50.png

一応、iPad版SafariのUserAgentで上書きすると上記の警告を消すことができます。

webView.customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Safari/605.1.15"

原因

iPad mini以外のiPadがMacintoshのUserAgentとなる原因がiOS 13から追加された WKWebpagePreferences です。

@available(iOS 13.0, *)
open class WKWebpagePreferences : NSObject {
    @available(iOS 13.0, *)
    open var preferredContentMode: WKWebpagePreferences.ContentMode
}

extension WKWebpagePreferences {
    @available(iOS 13.0, *)
    public enum ContentMode : Int {
        case recommended = 0
        case mobile = 1
        case desktop = 2
    }
}

WKWebpagePreferences.ContentModeの
recommended はiPad mini以外のiPadを desktop として認識し、それ以外のデバイスを mobile として扱うようです。

対策

もしiPad mini以外のiPadを mobileとして認識させたい場合は以下のようにします。

    @available(iOS 13.0, *)
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, preferences: WKWebpagePreferences, decisionHandler: @escaping (WKNavigationActionPolicy, WKWebpagePreferences) -> Void) {
        // preferences.preferredContentMode デフォルト値は .recommended
        preferences.preferredContentMode = .mobile
        //decisionHandler(.cancel, preferences)
        decisionHandler(.allow, preferences)
    }

iOS 13.0 iPad 9.7 インチ以上
preferences.preferredContentMode = .mobile
Mozilla/5.0 (iPad; CPU OS 13_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148

iOS 13.0 iPhone
preferences.preferredContentMode = .desktop
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko)

早くTwitterとYouTubeがサポートしてくれるといいな。

14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6