WRP - Protocolo de serviço com Protobuf para comunicação entre WebView e mobile nativo
(twitter.com/hrmm_flow)Na Riiid, como muitas outras startups focadas principalmente em apps mobile, usamos uma abordagem em que telas comuns a cada plataforma mobile são desenvolvidas na web e embarcadas no formato de WebView.
Separadamente, para permitir iterações mais rápidas no desenvolvimento de WebView, também usamos páginas web mobile virtuais que imitam o ambiente nativo com iframe em vez de WebView, e as utilizamos no desenvolvimento das telas web.
Como as telas feitas como páginas web têm um ciclo de vida mais curto que o nativo e possuem permissões de API limitadas, inevitavelmente surge a necessidade de escrever código para se comunicar com o invólucro que incorpora a WebView (nativo, parent window).
Mas as interfaces de cada invólucro para se comunicar com a WebView têm limitações incômodas — como não permitir comunicação bidirecional ou suportar apenas a execução de trechos arbitrários de código JS — e, além disso, como a interface varia muito entre os diferentes invólucros, escrever esse código de comunicação se torna cansativo.
Nós já usamos as tecnologias protobuf e gRPC quando clientes web/mobile se comunicam com servidores de API. O protobuf é uma linguagem de esquema usada para descrever interfaces de serviço, e o gRPC é a camada de protocolo que transforma requisições abstratas definidas em protobuf em requisições HTTP reais.
Como já usávamos protobuf na comunicação com o backend e os engenheiros já estavam familiarizados com ele, decidimos há bastante tempo usar protobuf para resolver os problemas do modelo existente de comunicação com WebView, unificando também o workflow.
Depois disso, ao desenvolver vários apps mobile ao longo de muitos anos, já vínhamos usando uma abordagem de desenvolvimento com codegen de protobuf para a comunicação entre invólucro <-> WebView, e recentemente, ao criar um novo app, decidimos melhorar essa tecnologia e torná-la open source.
wrp nasceu nesse contexto como uma camada de protocolo dedicada a WebView, com papel semelhante ao do gRPC.
O wrp oferece suporte a typescript & react / kotlin & compose / swift & tca, streams, comunicação bidirecional, restauração do contexto de comunicação quando a página web é recarregada, entre outros recursos, e também lida em certo grau com situações de incompatibilidade de protocolo entre WebView e app nativo causadas pela atualização lenta da versão do app pelos usuários.
Como as principais funcionalidades do wrp acabaram de ser desenvolvidas, ele ainda não é estável, mas, se você tiver interesse nessa tecnologia, gostaríamos muito que entrasse no nosso servidor do Discord para conversar com a gente.
Servidor do Discord do Pbkit: https://discord.gg/PHmV3nhvQq
Web - TypeScript & React
- Biblioteca: https://github.com/pbkit/wrp-ts
- Exemplo: https://github.com/pbkit/pbkit.dev/blob/main/islands/WrpIframeHost.tsx
iOS - Swift & TCA
- Biblioteca: https://github.com/pbkit/wrp-swift
- Exemplo: https://github.com/pbkit/wrp-swift/blob/main/Example/Wrp/WrpExampleServiceProvider.swift
Android - Kotlin & Compose
- Biblioteca: https://github.com/pbkit/wrp-kt
- Exemplo: https://github.com/pbkit/wrp-kt/blob/main/example/src/main/kotlin/dev/pbkit/wrp/example/MainActivity.kt
(O texto foi levemente revisado e transcrito a partir do que escrevi no Twitter)
https://twitter.com/disjukr/status/1537034296959315968
1 comentários