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

Los WebViews son ideales para integrar de manera fluida tu contenido web en tu app. Cuando tu contenido de origen incluye vínculos a sitios web que no te pertenecen, tiene sentido abrirlos en una pestaña personalizada en lugar de WebView. Esto tiene dos beneficios:

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

Para implementarlo, 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));                            
        }
    }
});