" />
本ページはプロモーションが含まれています。

スポンサーリンク

Android

Androidアプリにおけるブラウザの開き方・Cookieについて

Andoridアプリからブラウザアプリで任意のURLを開く

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.google.com"));
startActivity(intent);

アプリからブラウザアプリを開くにはIntent.ACTION_VIEWを使用する。

Intent.ACTION_VIEWとは、setDataでセットするデータを最も一般的な方法で表示するIntentである。

https://developer.android.com/reference/android/content/Intent#ACTION_VIEW

上記のようなURLに対しては、ブラウザアプリ(多くの場合、Chrome)でURLを表示する。

AndoridアプリのWebviewで任意のURLを開く

WebView webView = findViewById(R.id.webView);
webView.loadUrl("https://www.yahoo.co.jp/");

アプリ内にWebviewでURLを表示するには、WebViewクラスを使用する。

https://developer.android.com/reference/android/webkit/WebView

WebviewでCookieを使用する方法1 CookieManager

CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true); // Cookie受け入れを許可
cookieManager.setCookie("https://www.example.com/", "key=value"); // Cookieを設定

WebView webView = findViewById(R.id.webView);

Webviewで表示するリクエスト先からCookieを受け入れるには、CookieManagerを使えば良い。

また、CookieManager#setCookieを使って、任意のホストに対するクッキーをセットすることができる。

https://developer.android.com/reference/android/webkit/CookieManager

WebviewでCookieを使用する方法2と遷移先URLを処理する方法 WebViewClient

public class MyWebViewClient extends WebViewClient {

    @Override
    public void shouldOverrideUrlLoading(WebView view, String url) {
        // 次のURLを処理する
        view.loadUrl(url);
    }

    @Override
    public void onReceivedCookies(WebView view, String url, Cookie[] cookies) {
        super.onReceivedCookies(view, url, cookies);

        // Cookie を処理する
    }
}

WebView webView = findViewById(R.id.webView);
webView.setWebViewClient(new MyWebViewClient());

WebviewではWebViewClient#shouldOverrideUrlLoadingを使用することで、次に表示するURLを検知して何らかの処理を挟むことができる。
例)URLが自分のドメインでなければブラウザアプリで表示する

https://developer.android.com/reference/android/webkit/WebViewClient

また、この方法でもCookieを受けとった時の処理は書くことができる。

Andoridアプリのカスタムタブで任意のURLを開く

CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(this, Uri.parse("https://www.google.com"));

アプリからカスタムタブでURLを開くにはCustomTabsIntentクラスを使用する。

https://developer.android.com/reference/androidx/browser/customtabs/CustomTabsIntent

Android カスタムタブの概要

カスタムタブを使用した場合、ユーザーはアプリ上でChromeを使用することになります。
・ChromeアプリでセットされているCookieはカスタムタブ内でもサイトに送信されます。
・Chromeアプリに保存しているID/PWはカスタムタブ内でも自動入力されます。

ただし、カスタムタブを使用した場合、Webviewのように任意のCookieをセットする方法は見つかりませんでした。

Androidで任意のURLに対して任意のCookieを送信する方法

Androidから任意のURLを遷移するパターンと、任意のCookieをセットする方法は次の通り。

アプリ→WebviewCookieManagerで任意のCookieをセットできる。
アプリ→カスタムタブ任意のCookieをセットできない。
アプリ→外部ブラウザ任意のCookieをセットできない。
Webview→外部ブラウザ任意のCookieをセットできない。
カスタムタブ→外部ブラウザ任意のCookieをセットできない。

任意のCookieをセットできるのは、「アプリでWebviewにて任意のURLを表示するとき」だけである。
「カスタムタブ」を使用したり、「外部ブラウザ」に飛ばすときは、任意のCookieをセットすることはできない。
理由としては、カスタムタブも外部ブラウザもChromeにURLを渡してるだけだからである。

スポンサーリンク

-Android