Repasamos en este post las posibilidades que ofrecen actualmente los componentes Webviews y hacemos una aproximación a las Webviews con React Native.

Webviews under the hoods

Son componentes nativos (ios / android) que permiten embeber contenido web dentro de apps nativas. Si consideramos que un navegador de internet está compuesto de dos partes:

El componente Webview termina siendo un derivado reducido solamente al motor de renderizado web más un bridge JS para comunicar con la parte nativa.

El componente webview es un derivado reducido solamente al motor de renderizado web más un bridge JS.

Con la Webview embebida en la app nativa, el interfaz de usuario que tiene el navegador normal es reemplazado por componentes UI nativos, haciendo parecer que la página web está integrada completamente dentro de la app nativa.

Con la Webview embebida en la app nativa, el interfaz de usuario que tiene el navegador normal es reemplazado por componentes UI nativos.

Cada plataforma nativa tiene su implementación. En Android está implementado en este componente y en nuestros móviles lo podemos ver como una app más:

En nuestro móvil lo vemos como una app más.

En iOS está implementado en el componente VKWebview.

Las Webview apps llevan tiempo entre nosotros

En la carrera cross-platform por llevar contenido y funcionalidades a los usuarios de dispositivos móviles, hay en el mercado diferentes estrategias. Véanse Progressive Web Apps, No-Code App Builders, React Native, Flutter o Ionic. En muchas de esas formas, por debajo lo que hay es código web. Y es por algo. Si hay una tecnología que aguanta el paso del tiempo es la web: HTML+CSS+Javascript. De ahí que, por su portabilidad y su longevidad, muchas apps nativas que usamos habitualmente contienen Webviews como Facebook, Instagram, Twitter o Gmail.

En las Webview apps (apps nativas con, al menos, una pantalla en Webview), es imposible saber qué pantallas son Webviews y cuáles full native. Otras veces está claro, por ejemplo, cuando en Gmail abrimos un link de un email (in-app browser):

En gmail abrimos un link de un email (in-app browser) y vemos cuál es Webviews y cuál full native.

Tip: Una forma un poco drástica de saber qué apps nativas de tu móvil usan Webviews, es desinstalar el componente Webview y ver qué apps siguen funcionando.

Entonces, ¿qué ventajas tienen sobre hacer una web o webapp?

Si el código web es lo mejor de lo mejor, ¿por qué no servimos contenido a los navegadores de los usuarios en web/webapp y ya está? Dos estadísticas nos indican la mayor penetración que tienen las apps nativas sobre los contenidos servidos solo a través de navegadores.

Más de la mitad del tráfico online se hace desde dispositivos móviles.

Aproximadamente el 90% del tiempo de uso de los móviles es utilizando apps. Esto es porque las apps (tanto nativas como Webview apps) son mucho más fáciles de utilizar que los navegadores de los móviles:

Medio del tiempo utilizando apps o navegando escritorios.

Además, las Webview apps tienen otras ventajas:

En un móvil las apps con Webview se muestran organizadas.

No todo es bonito

Comparativa de Webview en distintos navegadores.

Exprimiendo las posibilidades de las Webviews en React Native

Vamos a mostrar aquí las características más reseñables de las webviews en cuanto al control que permiten desde la parte nativa. Elegimos poner ejemplos en React Native junto con el paquete React-Native Webview con el objeto de seguir trabajando sobre código web pero manteniéndonos en desarrollo nativo. El paquete React-Native-Webview soporta iOS, Android, Windows y MacOs.

Integrar una pantalla Webview en una app React Native es bastante simple.

import React, { Component } from 'react';
import { WebView } from 'react-native-webview';

// ...
class MyWebComponent extends Component {
  render() {
    return <WebView source={{ uri: 'https://reactnative.dev/' }} />;
  }
}

Desde el código nativo (React-Native en este caso) tenemos varias opciones de controlar el funcionamiento de la Webview. A continuación os dejo unos ejemplos “copy&paste”:

Inyectando JS en el Webview

Controlando la navegación dentro de la Webview

Comunicación Javascript bidireccional con la Webview

Configurando cookies/headers

File Upload

File Download

Todos los ejemplos están disponibles en el siguiente repositorio.

Conclusión

Construir una app full native es el camino si la app va a ser el centro de tu modelo de negocio, pero en todos los demás casos es muy a considerar tener pantallas de tu app hechas dentro de webviews.

En resumen, el componente Webview es una valiosa herramienta para servir contenido a las apps nativas. Si además hacemos los desarrollos nativos en React Native, conseguimos tener código web tanto para renderizar pantallas nativas como para reutilizar funcionalidad web existente.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.