KamoCRM

Мобильное приложение, в магазинах

React Native с нативными модулями, где JavaScript не будет работать

Кросс-платформенный мобильный клиент для платформы, написанный в React Native с родными Android модулями, где слой JavaScript не может достичь - доставка фоновых сообщений, плавающие накладные окна, регистрация устройств и безопасное хранение учетных данных.

Каждое число здесь называет, откуда оно пришло и когда оно было измерено.
МераСтоимостьИсточникИзмеряемые
Нативные Android модули наряду с базой кода React NativeKotlin modules for overlays, background delivery and enrolmentandroid source tree in the mobile client repository
Исходный код Kotlin в мобильном клиенте24 filesfind . -name '*.kt' across project repositories
Количество каналов распределения2 (store release and over-the-air update)mobile release process

Чему здание нас научило

Кросс-платформенные платформы продаются на обещание, что вы пишете один раз. Вы делаете, возможно, для восьмидесяти процентов приложения. Остальная пятая часть - это то, где работа, и это неизменно часть, которая делает приложение чувствовать себя родной, а не завернуты: уведомления, которые прибывают, когда приложение закрыто, накладки, которые переживают приложение теряет фокус, потоки регистрации, которые касаются безопасного элемента.

Наша работа с накладками является хорошей иллюстрацией тонкого класса ошибок. Плавающий заголовок поднимается для любого сообщения, поступающего из разговора, кроме того, который находится на экране — достаточно просто, пока вы не заметите, что значок непрочитанного рисуется дважды, один раз в JavaScript и один раз в родном коде, и что заголовки живут в двух отдельных хранилищах, так что очистка одного оставляет другой заполнен. Два источника истины для одного визуального элемента является наиболее распространенным структурным дефектом в мобильных приложениях, и он почти никогда не виден, пока пользователь не сообщит о чем-то невозможном.

Одноразовый токен регистрации потреблялся до завершения регистрации устройства, поэтому любая последующая неудача в потоке представлялась пользователю как «этот код уже использован» — сообщение, которое направляет их в службу поддержки, а не повторяет попытку, и которое описывает симптом, а не причину. Последовательность многоэтапного потока, так что его сообщения об ошибках остаются правдивыми, является проектной работой, а не просто инженерной работой.

Процесс выпуска преднамеренно скучен: сборки происходят на одной машине, на которой есть цепочка инструментов, обновления по беспроводной связи обрабатываются отдельно от выпусков в магазине, и ни одно из них не делается с ноутбука в конце дня.

Построен с

  • React Native
  • TypeScript
  • Kotlin
  • Android SDK
  • push notifications
  • WebSocket

Для чего это нас квалифицирует

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

Расскажите нам, что вы пытаетесь сделать

Обычно достаточно короткого разговора, чтобы узнать, являемся ли мы подходящими людьми. Если нет, мы скажем вам об этом и покажем вам куда-нибудь лучше.

Начать разговорЯ уже использую KamoCRMКак мы цитируем