[Android] WebViewでCookieを扱う方法

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を扱う場合は、SecureHttpOnly の属性に注意する必要があります。

まとめ

WebViewでCookieを正しく扱うと、ログイン済みの状態をそのままアプリ内に持ち込めたり、サーバーとのやり取りがスムーズになります。
逆に設定を忘れると「なぜかログイン状態が反映されない…」といったトラブルになりやすいので要注意ですね。

👉 実務でハマりやすい部分なので、知っておくとかなり便利だと思います。

コメント

タイトルとURLをコピーしました