Кросс-платформенный мобильный клиент для платформы, написанный в React Native с родными Android модулями, где слой JavaScript не может достичь - доставка фоновых сообщений, плавающие накладные окна, регистрация устройств и безопасное хранение учетных данных.
| Мера | Стоимость | Источник | Измеряемые |
|---|---|---|---|
| Нативные Android модули наряду с базой кода React Native | Kotlin modules for overlays, background delivery and enrolment | android source tree in the mobile client repository | |
| Исходный код Kotlin в мобильном клиенте | 24 files | find . -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
Расскажите нам, что вы пытаетесь сделать
Обычно достаточно короткого разговора, чтобы узнать, являемся ли мы подходящими людьми. Если нет, мы скажем вам об этом и покажем вам куда-нибудь лучше.
