Cómo abrir una pestaña personalizada para vínculos en WebView

Las WebViews son excelentes para integrar sin problemas tu propio contenido web en tu app. Cuando tu contenido de origen incluye vínculos a sitios web de los que no eres propietario, tiene sentido abrirlos en una pestaña personalizada en lugar de la WebView. Esto tiene dos beneficios:

  1. La UX de origen está claramente separada de la UX de contenido web de terceros.
  2. Los sitios web de terceros se benefician de que las cookies se compartan con el navegador predeterminado.

Para implementar esto, configura un controlador onLoadResource personalizado en tu WebViewClient:

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);                            
        }
    }
});