Un client mobile multiplateforme pour la plateforme, écrit en React Native avec des modules natifs Android où la couche JavaScript ne peut pas atteindre - livraison de messages en arrière-plan, fenêtres de superposition flottantes, inscription d'appareils et stockage sécurisé des informations d'identification.
| Mesure | Valeur | Source | Mesurées |
|---|---|---|---|
| Des Android modules natifs aux côtés de la base de code React Native | Kotlin modules for overlays, background delivery and enrolment | android source tree in the mobile client repository | |
| Source Kotlin dans le client mobile | 24 files | find . -name '*.kt' across project repositories | |
| Canaux de distribution exploités | 2 (store release and over-the-air update) | mobile release process |
Quel bâtiment il nous a appris
Les frameworks multi-plateformes sont vendus sur la promesse que vous écrivez une fois, peut-être pour 80 % d’une application. Le cinquième restant est celui où se trouve le travail, et c’est invariablement la partie qui donne à l’application l’impression d’être native plutôt que de s’enrouler : les notifications qui arrivent lorsque l’application est fermée, les superpositions qui survivent à la perte de focalisation de l’application, les flux d’inscription qui touchent l’élément sécurisé.
Notre travail de superposition est une bonne illustration d’une classe subtile de bug. Une tête flottante est soulevée pour tout message provenant d’une conversation autre que celle à l’écran — assez simple, jusqu’à ce que vous remarquiez que le badge non lu est dessiné deux fois, une fois dans JavaScript et une fois dans le code natif, et que les têtes vivent dans deux magasins séparés, donc en effaçant l’un, l’autre est rempli.Deux sources de vérité pour un élément visuel est le défaut structurel le plus commun dans les applications mobiles et il n’est presque jamais visible jusqu’à ce qu’un utilisateur signale quelque chose d’impossible.
Un jeton d'inscription unique était consommé avant l'enregistrement de l'appareil, de sorte que toute défaillance ultérieure dans le flux était présentée à l'utilisateur comme « ce code a déjà été utilisé », un message qui l'envoie vers le support plutôt que de réessayer, et qui décrit un symptôme plutôt que la cause. Séquencer un flux à plusieurs étapes de sorte que ses messages d'échec restent véridiques est un travail de conception, pas seulement d'ingénierie.
Le processus de publication est délibérément ennuyeux : les compilations se font sur une seule machine qui possède la chaîne d'outils, les mises à jour sans fil sont gérées séparément des publications en magasin, et aucune n'est faite à partir d'un ordinateur portable à la fin de la journée.
Construit avec
- React Native
- TypeScript
- Kotlin
- Android SDK
- push notifications
- WebSocket
Dites-nous ce que vous essayez de faire
Une courte conversation est généralement suffisante pour savoir si nous sommes les bonnes personnes, si nous ne le sommes pas, nous le dirons et vous indiquerons quelque part mieux.
