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
カスタムタブを使用した場合、ユーザーはアプリ上でChromeを使用することになります。
・ChromeアプリでセットされているCookieはカスタムタブ内でもサイトに送信されます。
・Chromeアプリに保存しているID/PWはカスタムタブ内でも自動入力されます。
ただし、カスタムタブを使用した場合、Webviewのように任意のCookieをセットする方法は見つかりませんでした。
Androidで任意のURLに対して任意のCookieを送信する方法
Androidから任意のURLを遷移するパターンと、任意のCookieをセットする方法は次の通り。
アプリ→Webview | CookieManagerで任意のCookieをセットできる。 |
アプリ→カスタムタブ | 任意のCookieをセットできない。 |
アプリ→外部ブラウザ | 任意のCookieをセットできない。 |
Webview→外部ブラウザ | 任意のCookieをセットできない。 |
カスタムタブ→外部ブラウザ | 任意のCookieをセットできない。 |
任意のCookieをセットできるのは、「アプリでWebviewにて任意のURLを表示するとき」だけである。
「カスタムタブ」を使用したり、「外部ブラウザ」に飛ばすときは、任意のCookieをセットすることはできない。
理由としては、カスタムタブも外部ブラウザもChromeにURLを渡してるだけだからである。