Um cliente móvel multiplataforma para a plataforma, escrito em React Native com módulos Android nativos onde a camada JavaScript não pode chegar — entrega de mensagens em segundo plano, janelas de sobreposição flutuantes, inscrição de dispositivos e armazenamento seguro de credenciais.
| Medida | Valor | Fonte | Medido |
|---|---|---|---|
| Módulos nativos Android ao lado da base de código React Native | Kotlin modules for overlays, background delivery and enrolment | android source tree in the mobile client repository | |
| Código-fonte Kotlin no cliente móvel | 24 files | find . -name '*.kt' across project repositories | |
| Canais de distribuição operados | 2 (store release and over-the-air update) | mobile release process |
Que edifício nos ensinou
As estruturas multiplataforma são vendidas com a promessa de que você escreve uma vez, talvez oitenta por cento de um aplicativo. O quinto restante é onde o trabalho está, e é invariavelmente a parte que faz o aplicativo parecer nativo em vez de envolto: notificações que chegam quando o aplicativo é fechado, sobreposições que sobrevivem ao aplicativo perdendo o foco, fluxos de inscrição que tocam o elemento seguro.
Nosso trabalho de sobreposição é uma boa ilustração de uma classe sutil de bug. Um cabeçalho flutuante é levantado para qualquer mensagem que chegue de uma conversa que não seja a que está na tela — simples o suficiente, até que você perceba que o emblema não lido é desenhado duas vezes, uma vez em JavaScript e uma vez no código nativo, e que os cabeçalhos vivem em dois armazéns separados, então limpar um deixa o outro preenchido. Duas fontes de verdade para um elemento visual é o defeito estrutural mais comum em aplicativos móveis e quase nunca é visível até que um usuário relate algo impossível.
O registro nos ensinou sobre ordenação. Um token de registro único era consumido antes do registro do dispositivo ser concluído, então qualquer falha posterior no fluxo era apresentada ao usuário como "este código já foi usado" - uma mensagem que envia o usuário para o suporte em vez de tentar novamente, e que descreve um sintoma em vez da causa.
O processo de lançamento é deliberadamente chato: as compilações acontecem em uma máquina que tem a cadeia de ferramentas, as atualizações over-the-air são tratadas separadamente das versões da loja, e nenhuma delas é feita a partir de um laptop no final do dia.
Construído com
- React Native
- TypeScript
- Kotlin
- Android SDK
- push notifications
- WebSocket
Diga-nos o que você está tentando fazer
Uma breve conversa geralmente é suficiente para dizer se somos as pessoas certas, se não formos, diremos isso e indicaremos um lugar melhor.
