KamoCRM

Une application mobile, en magasin

React Native avec des modules natifs où JavaScript ne fonctionne pas

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.

Chaque chiffre indique d'où il vient et quand il a été mesuré.
MesureValeurSourceMesurées
Des Android modules natifs aux côtés de la base de code React NativeKotlin modules for overlays, background delivery and enrolmentandroid source tree in the mobile client repository
Source Kotlin dans le client mobile24 filesfind . -name '*.kt' across project repositories
Canaux de distribution exploités2 (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

Ce qui nous qualifie

Mobile applicationsCross-platform where it makes sense, native where it does notReal-time systemsLive data, messaging, presence and media — the unforgiving end of the webCustom web applicationsThe system your business actually runs on, built properly

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.

Commencez une conversationJ'utilise déjà KamoCRMComment nous citons