RedCalendar — облачный трекер цикла, или покоряем Африку
Когда-то давно заметил, что у моей жены установлено странное приложение для отслеживания цикла. Тогда я подумал о двух вещах:
- Почему оно такое некрасивое
- Почему я не знаю о том, что там происходит
Подумал и забыл.
С детства я любил конструкторы и думал, что буду архитектором когда вырасту. Потом в моей жизни появилось программирование: сначала абстрактное (школьное), а затем стал писать приложения для Windows на Delphi. В те времена я делал автозапуски к дискам, а к окончанию школы написал висящее в трее приложение для извлечения лотка CD-ROM и свой редактор реестра. Всё это очень нравилось, поэтому решил продолжить обучение в институте, поступив на «информационные системы». На втором курсе устроился работать в салон связи к своим друзьям, где, поработав менеджером по продажам, переквалифицировался в мастера по ремонту телефонов. Институт закончил, но никто не мог предложить по моей специальности молодому специалисту даже что-то близкое к тому, что получалось зарабатывать на тот момент, поэтому программирование осталось моим хобби.
И вот однажды наткнулся на курсы Алексея Скутаренко по iOS разработке, вдохновился, купил макбук и начал учиться. Добросовестно закончив их, решил «заняться делом» и поучаствовал в паре стартапов (провальных, как и положено), параллельно изучая Стэнфордские курсы по Swift с Полом Хэгарти. В те времена Google представила Firebase и я написал пару клиент-серверных приложений, работающих на этой платформе. А потом вспомнил про трекер цикла.
Решил сделать бесплатное и полезное приложение с современной архитектурой. Которое можно бесконечно развивать, добавляя новые возможности.
Реализация
Мне нравятся люди, которые пишут, что сделали что-то крутое за выходные или месяц. Я им не очень верю, потому что сам так не умею: от идеи до первого релиза мне потребовалось около двух лет: по несколько раз переписывал авторизацию, хранение и синхронизацию данных, если что-то работало не так, как хотелось. Иногда сильно увлекался и в итоге всё затягивал, понимая при этом, что эти улучшения никто не заметит, но для меня они были важны. Сейчас мне не стыдно за каждый хранящийся / принятый / отправленный байт, а приложение работает даже в авиарежиме и так, как задумывалось.
Графику рисовал кодом, а где нельзя — использовал векторные изображения. И вот, первый результат, который можно «потрогать», готов.
Всё работает в облаке (для реализации п. 2 в будущем, хотя, пожалуй, сегодня так должны работать все приложения). Вот, для наглядности запустил календарь под одним аккаунтом на трёх разных телефонах и пользовался ими по очереди в реальном времени. Так выглядит запись с экранов:
Сейчас модно рассказывать про использование машинного обучения и нейронных сетей. Но это иногда комично и не всегда уместно, например, в моём случае (не понимаю, кого тут обычно обманывают — пользователей или инвесторов). Пусть организм непредсказуем, можно собирать статистику и использовать эти данные. Для расчета используются медианные значения за последние 3–7 месяцев, при этом предусмотрено, что если девушке при нерегулярном цикле назначат таблетки для его нормализации и она укажет параметры нового идеального цикла, приложение запомнит их на 3 месяца.
Особое внимание уделил уведомлениям. Изначально решил не надоедать пользователям и присылать их только по делу: за 2 дня до начала цикла, через день после окончания менструации (если забыли отметить) и за 4 дня до предполагаемой овуляции. Сейчас уведомления приходят в 9:00 с учётом часового пояса, который (если нужно) корректируется при запуске приложения (чтобы не мешать, например, в отпуске). Ещё, если человек запускал календарь за 3 часа до уведомления, он его не получит (уже и так всё посмотрел).
Не все пользователи догадались как отмечать циклы, когда календарь пуст, поэтому пришлось быстро выпускать обновление с пояснениями. Зато оценили возможность добавлять комментарии с Emoji к любому дню и стали активно пользоваться этой возможностью.
Причём тут Африка?
Приложение вышло на русском и английском, загрузки начались по всему миру. App Store Connect показывает статистику с задержкой в пару дней, поэтому первую аудиторию изучал по номерам авторизовавшихся пользователей.
С самого начала лидировала Африка. Возможно, для этих пользователей был решающим размер загружаемого приложения: порядка 10 МБ у меня, вместо 158 — у Flo, 91— у Clue или 58 — у Life. Сеичас пользователей из Африки порядка 70%.
Были и Тайланд, и Шри Ланка, и Украина, а позже — Великобритания, США, Германия и другие страны. А вот России почему-то не было вообще.
Первые проблемы или «почему пишу эту статью только сейчас»
Позже выяснилось, что загрузки из России тоже есть, но именно пользователи не появляются. Поскольку приложение облачное, для работы нужна учётная запись. Для входа используется номер телефона. Если человек уже пользовался приложением, мы покажем ему его данные. А если нет — спросим, что он знает о своем цикле и создадим учётную запись. Для авторизации используются штатные функции Firebase и, как показала практика, смс часто блокировались российскими операторами, особенно на Билайне. Надо было что-то срочно придумывать. Вход через Google, Apple ID или twitter не рассматривал, потому что в будущем будет версия для партнера/мамы, которых будет удобнее приглашать именно по номеру (как сделано в клабхаусе). Выбор пал на FlashCall (когда вам звонит робот и нужно ввести последние четыре цифры его номера). Это пришлось делать вручную, но сейчас такой способ нравится даже больше, чем вход по смс.
Реклама и деньги
Я задумывал приложение как бесплатное и не планировал (и пока не планирую) встраивать рекламу. Основной функционал останется бесплатным навсегда. Но, возможно, добавлю премиум опции по подписке или единоразовому платежу:
Гибкие теги для дней
- Настройку времени отправки уведомлений
- Возможность делиться информацией с партнёром / мамой
Ссылки
Загрузить приложение можно здесь (iOS) или с сайта calendar.red.
Знаете почему люди пишут, что сделали свое приложение за месяц-два? Просто изначально идет продумывание функционала, планирование архитектуры, дизайн и уже после код. Так, что у тех, кто имеет достаточный опыт разработки, все эти шаги идут как само собой разумеющееся. Стоит начать писать код без плана, проект незаметно становится долгостроем. Но ничего, продолжайте писать код, опыт придет со временем и вы начнете подобные приложение пачками выпускать, во время выходных, буквально на коленке. Это я сужу по себе. Если приложение у меня спланировано, напишу быстро. Стоит начать экспромт, могу вообще забросить со временем.
По поводу дизайна могу посоветовать envato elements, там по копеечной подписке доступны полноценные дизайн-макеты на все случаи жизни (решает проблему с отсутствием дизайнера).
P.S.: Жена оценила новое приложение? =)
Чуть не забыл, Firebase - зло, учитесь быстро писать свой бак, чтобы не было после мучительно больно. Если с этим проблема, то тогда лучше parse-server у себя развернуть. Зато будет полный контроль над сервером без сюрпризов в виде тайм-аута на запросах и прочего.
Ещё и потому, что автор сам себе и заказчик, и аналитик, и дизайнер, и архитектор, и разработчик, и тестировщик. Количество коммуникационных связей равно нулю, поэтому на взаимодействие не затрачивается времени, а самому с собой всегда проще договориться, чем ожидать, когда аналитик вытянет из заказчика хотелки, передаст их команде, пока дизайнер нарисует и согласует дизайн, пока под scope будет набросана архитектура и написано что-либо. Так что даже одну формочку можно писать полгода (реальный опыт из практики).
Вот мне нравится тоже что не надо никому ничего объяснять и согласовывать. Но иногда даже с собой сложно договориться))
Согласен, но тут наверное речь о пет-проектах. На коммерческой разработке можно долго незначительную фигню делать =)
Комментарий недоступен
Тоже в компании попали на эту проблему. Не приходят как-то максимально случайно - то всё норм, то какой-нибудь один оператор отвалится, то сразу несколько.
В качестве "спасательного круга" сделали отправку через российский шлюз при нажатии пользователем "Выслать код снова". Пока устраивает)
Комментарий недоступен
Может и удачная, но как быть, если всё-таки придёт первый код? Firebase присылает один и тот же код, в кастомном варианте (через российский шлюз) придётся генерировать код самому и он будет отличаться от первого. И проверять его нужно отдельной функцией в том же интерфейсе. Конечно, можно сделать коды разной длины и всё будет понятно. Но где гарантия, что код через российский шлюз придёт в Африку или Нидерланды? Звонок придёт гарантированно и будет стоить значительно дешевле смс с кодом
Комментарий недоступен
Хорошо, я же не спорю. Тоже думал о такой реализации, но взвесив все аргументы, выбрал альтернативный вариант
Просто если пользователю придут сразу две смс, какой код ему вводить? Первый проверит Firebase. Второй надо проверять самим. Если нажали «выслать повторно», получается, проверять надо самому и, если придут обе смс, один из кодов станет неверным. Сегодня проблемы с смс замечены только в России. Но и в других странах они могут быть, поскольку для доставки кодов используют дешевые каналы
Комментарий недоступен
И даём человеку возможность авторизоваться двумя кодами и увеличиваем его шансы на временную блокировку номера в одной из систем😉
Комментарий недоступен
Завтра напишу в лс, если интересно и расскажу
Комментарий недоступен
В основном проблемы с Билайном. Они периодические и бывают дни, когда теряется 100% смс. Мы общались с представителем Firebase: отсылал им номера, где точно смс терялись. Проблему признали и обещали решить. Не решили, смс иногда не приходят😔
Месячные :)
Можете рассказать, в чем отличия вашего календаря от встроенного в Здоровье на iOS?
Он работает в облаке, поэтому можно будет делиться информацией с партнёром и реализовать еще несколько интересных функций. Когда будет версия для андроида, можно будет просто ввести свой номер телефона и продолжить пользоваться там. В программе «Здоровье» фаза лютеинизации зафиксирована и равна 13 дням (хотя исследования показывают, что должно быть 14 дней), и вообще она может отличаться (моё приложение умеет её рассчитывать если девушка отметила овуляцию хотя бы раз). Есть и много идей по развитию приложения: это же только первый релиз.
Ахах, а если произойдет утечка данных, в моду войдут еще и звонки в те самые дни чтобы просто потролить
Почему сразу просто потроллить!
Представляете, это же продаваны могут получить базу данных по ПМС - дням, в которые лучше не попадаться под горячую руку со своими холодными звонками.
Вот тоже так хочу, потому что много идей как по этому проекту, так и другие хочу сделать)
Знаю, что нужен чёткий план и он даже есть!
Ну если в Москве живете, может кофе попить и я могу поделиться наработками
Живу в Костроме)
Ну ничего, все равно опыт придет по планированию. Просто изначально пробуйте максимально детализировать идею, после на бумаге схемы порисуйте что где и как взаимодействует. После с модельками посидите подумайте, тоже можно на схеме все изобразить (я часто делаю это через диаграммы).
Тоже люблю с бумажками сидеть) Спасибо, Виталий
Да не за что! Удачи в реализации идей
Очень достойно!!! 👏🏾👏🏾👏🏾
Благодарю🤝
Какими сервисами для верификации номера через отсылку смс имеет смысл пользоваться - чтобы было глобальное покрытие, близко к 100% доставляемость и адекватные цены? (кроме Firebase)
https://lancktele.com
Вы лично с ними работали? Действительно высокий процент проходимости близкий к 100?
Сейчас у меня звонки идут через них. Заверяют, что отправляют смс через официальные каналы и они точно будут доставлены. Фирма представлена в разных странах (у нас тоже есть представительство, т.е. договор заключал прямо с русским ООО), очень хороший API . Возможно, по ценам можно найти чуть дешевле (тарифы они присылают выслушав задачу и поняв, что будет происходить).