AndroidアプリでWebViewを使うとき、「ログイン済みの状態を引き継ぎたい」「サーバー側で発行されたCookieをWebViewにも反映したい」といったケースはよくあります。
今回は、WebViewとCookieの扱いについてまとめてみました。
Cookieの基本
Androidでは CookieManager
というクラスが用意されていて、ここからCookieの読み書きを行えます。
ポイントは以下の通りです。
setAcceptCookie(true)
を呼んで、Cookieを有効にするsetCookie(url, cookieString)
で任意のCookieをセットできるgetCookie(url)
で現在のCookieを取得できる
WebViewを使う前にこれを設定しておくと、サーバーとの通信がスムーズになりますね。
実装例
実際のコードはこんな感じになります。
class WebViewActivity : AppCompatActivity() {
private lateinit var binding: ActivityWebviewBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityWebviewBinding.inflate(layoutInflater)
setContentView(binding.root)
val url = "https://example.com/"
// Cookieを有効化
val cookieManager = CookieManager.getInstance()
cookieManager.setAcceptCookie(true)
// 任意のCookieをセット(例: セッション情報など)
cookieManager.setCookie(url, "session_id=abcdef123456; path=/;")
// WebViewの基本設定
with(binding.webView) {
settings.javaScriptEnabled = true
webViewClient = WebViewClient()
loadUrl(url)
}
}
}
上の例だと、サーバーからもらった session_id
をWebViewに反映してからページを表示しています。
こうすると、サーバー側では「すでにログインしている状態」として扱ってくれるわけです。
注意点
Cookie周りでハマりやすいのは以下のあたりです。
- APIレベルによる挙動の違い
特に古いOSだとCookieSyncManager
が必要でしたが、今は不要です。 - 非同期反映
setCookie
は即座に反映されるわけではなく、少し遅れて書き込まれます。必要ならCookieManager.flush()
を呼んで確実に保存しましょう。 - セキュリティ
セッション系のCookieを扱う場合は、Secure
やHttpOnly
の属性に注意する必要があります。
まとめ
WebViewでCookieを正しく扱うと、ログイン済みの状態をそのままアプリ内に持ち込めたり、サーバーとのやり取りがスムーズになります。
逆に設定を忘れると「なぜかログイン状態が反映されない…」といったトラブルになりやすいので要注意ですね。
👉 実務でハマりやすい部分なので、知っておくとかなり便利だと思います。
コメント