WebView 内のリンクのカスタムタブを開く

WebView は、独自のウェブ コンテンツをアプリにシームレスに統合する場合に最適です。ファーストパーティ コンテンツに自身が所有していないウェブサイトへのリンクが含まれている場合は、WebView ではなくカスタムタブでそれらを開くのが合理的です。これには、次の 2 つの利点があります。

  1. ファースト パーティの UX は、サードパーティのウェブ コンテンツの UX とは明確に別物です。
  2. サードパーティのウェブサイトは、Cookie をデフォルトのブラウザと共有することでメリットを得られます。

これを実装するには、WebViewClient でカスタムの onLoadResource ハンドラを設定します。

WebView webView = (WebView)findViewById(R.id.webview);
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return true;
    }

    @Override
    public void onLoadResource(WebView view, String url) {
        if (url.startsWith("http://www.my-own-domain.com")) {
            //Handle Internal Link...
        } else {
            //Open Link in a Custom Tab
            Uri uri = Uri.parse(url);
            new CustomTabsIntent.Builder()
                  .build()
                  .launchUrl(context, uri);                            
        }
    }
});