13 puntos por disjukr 2022-06-15 | 1 comentarios | Compartir por WhatsApp

En Riiid, al igual que muchas otras startups centradas principalmente en apps móviles, usamos un enfoque en el que las pantallas que se comparten entre plataformas móviles se desarrollan como web y se integran en forma de WebView.

Por otro lado, para iterar más rápido en el desarrollo de WebView, también usamos páginas web móviles virtuales que simulan el entorno nativo móvil con iframe en lugar de WebView, y las aprovechamos para desarrollar las pantallas web.

Como las pantallas construidas como páginas web tienen un ciclo de vida más corto que las nativas y cuentan con permisos de API limitados, inevitablemente surge la necesidad de escribir código que se comunique con la carcasa que aloja el WebView (native, parent window).

Sin embargo, las interfaces de cada una de esas carcasas para comunicarse con el WebView tienen limitaciones incómodas —por ejemplo, no permiten comunicación bidireccional o solo soportan ejecutar fragmentos arbitrarios de código JS—, y además como la interfaz difiere mucho entre una carcasa y otra, escribir ese código de comunicación se vuelve tedioso.

Nosotros ya usábamos tecnologías protobuf y grpc para la comunicación entre clientes web/móviles y el servidor API. protobuf es un lenguaje de esquemas que se usa para describir interfaces de servicio, y grpc es una capa de protocolo que convierte las solicitudes abstractas definidas con protobuf en solicitudes HTTP reales.

Como ya utilizábamos protobuf para la comunicación con el backend y los ingenieros estaban familiarizados con ello, hace tiempo decidimos usar protobuf para resolver los problemas del método tradicional de comunicación con WebView y así unificar el workflow.

Después, durante varios años de desarrollo de distintas apps móviles, ya habíamos estado usando un enfoque de codegen con protobuf para la comunicación entre la carcasa y el WebView, y recientemente, al crear una nueva app, decidimos mejorar esta tecnología y convertirla en open source.
wrp nació en ese contexto: es una capa de protocolo dedicada a WebView que cumple un papel similar al de grpc.

wrp ofrece soporte para typescript & react / kotlin & compose / swift & tca, streams, comunicación bidireccional, restauración del contexto de comunicación cuando la página web se vuelve a cargar y también cierto nivel de manejo para situaciones en las que, debido a que los usuarios tardan en actualizar su app nativa, se produce una incompatibilidad de protocolo con el WebView.

Apenas acabamos de desarrollar las funciones principales de wrp, así que todavía no es estable, pero si les interesa esta tecnología, nos encantaría que se unieran a nuestro servidor de Discord para conversar.


Servidor de Discord de Pbkit: https://discord.gg/PHmV3nhvQq

Web - TypeScript & React

iOS - Swift & TCA

Android - Kotlin & Compose


(Es una versión ligeramente editada de algo que publiqué en Twitter)
https://twitter.com/disjukr/status/1537034296959315968

1 comentarios

 
disjukr 2022-06-15