はじめに
私はWKWebViewでTwitterログインを実装しようと思ってログイン画面を表示しました。
そしたらなんとGoogleでログインがブロックされている!?!?!?!ってことに気づきました
WKWebViewログイン画面表示するとちゃんとGoogle要素ブロックされるのApple抜かりなくてウケる pic.twitter.com/BhcbsMSWp3
— SNQ (@SNQ2001) August 3, 2022
最初はAppleがGoogleをブロックしてる嫌がらせかと思ってました笑
しかし調べてみるとGoogle側がセキュリティ関係の問題で埋め込みブラウザでは表示できないようにしているようでした。
今回は埋め込みブラウザでも「Googleで続ける」を表示できるようにしていきます。
解決方法
import UIKit
import WebKit
class ViewController: UIViewController {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView = WKWebView(frame: view.frame)
view.addSubview(webView)
+ webView.customUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1"
webView.load(URLRequest(url: URL(string: "https://mobile.twitter.com/i/flow/login")!))
}
}
通常 | 適用後 |
---|---|
![]() |
![]() |
ユーザーエージェントについて
ユーザーエージェントについては詳しいことは分かりませんが、
サービスによっては変なユーザーエージェントを使用するとブロックされるなんてことも考えられます。
ユーザーの端末情報によって動的に変えられるように以下のような感じにしてみました。
webView.customUserAgent = "Mozilla/5.0 (\(UIDevice.current.userInterfaceIdiom == .phone ? "iPhone" : "iPad"); CPU \(UIDevice.current.userInterfaceIdiom == .phone ? "iPhone" : "iPad") OS \(UIDevice.current.systemVersion.replacingOccurrences(of: ".", with: "_")) like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1"
Safariのバージョン取得方法がわからなかったので15.0に固定しています。
iOSとSafariの対応表もあるっぽいのでそれを取得して動的に変更しても良さそうです。
なんの数字なのかわからない箇所もあるので完全とは言えませんが全部固定してるよりはマシだと思います。
これも動的に変更できるよってものがあればコメントで教えてください。
参考サイト