Что произошло

У команды FanBattle после одного из релизов случился инцидент. У 5% юзеров приложение перестало открываться. Они нажимали на иконку, видели сплэш-скрин и почти сразу получали белый экран и вылет.

Юзер FanBattle
Юзер FanBattle

Выяснилось, что это происходило у тех, кто давно не обновлял приложение. В этих версиях был старый парсер данных. После релиза бэкенд начал отдавать ленту в новом формате, и когда приложение пыталось её загрузить, старый код просто не справлялся и всё падало.

Как выглядела проблема

Для пользователей всё выглядело просто ��� приложение сломалось.
Интерфейс даже не успевал появиться, поэтому FanBattle не мог показать никаких in-app сообщений. Пуши этим версиям не доходили из-за старого SDK, а в стор или в почту люди заходят редко. Фактически с этой группой пользователей не было никакого работающего канала связи.
При этом саму ошибку довольно быстро исправили, и в сторах уже лежала новая версия, которая нормально работала с новыми данными. Но пользователи, у которых приложение падало, не могли до неё добраться, потому что приложение у них просто не открывалось.

Как помогла ранняя инициализация SDK

К этому моменту в FanBattle уже был подключён Releazio. Изначально его ставили скорее как инфраструктурный инструмент, чтобы проще ориентироваться в версиях, релиз-нотах и истории изменений между сборками. Но оказалось, что именно в этот критичный момент сервис оказался незаменимым и помог решить ситуацию.

SDK Releazio инициализируется очень рано — в самом начале запуска приложения. Когда пользователь нажимает на иконку, приложение только начинает стартовать, на экране ещё сплэш-скрин, никакие экраны и никакая бизнес-логика ещё не запущены. В этот момент SDK успевает сходить на сервер и узнать, есть ли для этой версии обязательное обновление. Приложение ждёт этого ответа и только потом решает, что показывать пользователю дальше. 

В FanBattle включили форс-апдейт для тех версий, которые падали на загрузке ленты. В результате для этих пользователей приложение просто перестало доходить до сломанного главного экрана. Вместо него сразу открывался экран обновления. Это важно, потому что это не попап поверх интерфейса — это другой корневой экран. Сломанный код ленты вообще не успевал выполниться.

Пользователи вместо вылета видели сообщение о том, что в этой версии есть ошибка и что нужно обновиться, и кнопку, которая вела в App Store. Приложение больше не выглядело мёртвым или сломанным, было понятно, что проблема в конкретной версии и что её можно решить.

Результат

В течение следующего дня:

  1. Скорость обновлений выросла в несколько раз

  2. Количество одинаковых обращений в поддержку резко снизилось

  3. Рейтинг в сторах начал восстанавливаться

  4. Отток вернулся к значениям ниже одного процента

С технической точки зрения ничего особенно сложного сделано не было. Команда просто воспользовалась тем, что в приложении уже был подключён Releazio, который работает на этапе запуска и позволяет перехватить пользователя до того, как сломанная логика успевает всё уронить.