В прошлый раз я рассказывал, как продакт без привлечения разработчиков, собрал приложение для личных финансов и довел его до публикации в App Store. Та статья заканчивалась на самом интересном месте, надо было понять, нужно ли это приложение кому-то кроме меня.
Прошел месяц. Докладываю обстановку)
Сначала цифры, они оказались неоднозначными
9 июля приложение появилось в сторе. И я никому не сказал: ни поста, ни рекламы, ни рассылки друзьям. Хотелось посмотреть, что произойдет само.
За месяц: 4 тысячи показов в поиске App Store и 155 установок при нуле рублей на продвижение. Люди просто искали что-то про бюджет и цели и находили в том числе меня. Честно говоря, я такого не ждал. И думаю что принял верное решение делать iOS приложение, а не миниапп в тг/web версию.
Дальше интереснее. Apple говорит 155 установок, а моя самописная аналитика показывает 212 человек. Разрыв в 57
Сначала я списал это на разницу подсчета: Apple считает уникальные Apple ID, я считаю устройства. Потом посмотрел, подробнее что это за люди. Оказалось за месяц бэкенд зарегистрировал 229 установок, и 52 из них пришли с локалью en_CN и таймзоной Asia/Shanghai
Похоже Китай не перестает искать «что переизобрести», хотя из 52 китайских товарищей до конца онбординга не дошел ни один.
212 минус 52 это 160. У Apple 155. +-Сходится идем дальше.
Кстати, про Хабр. Первая статья вышла 5 августа и за 2 часа собрала 3100 просмотров — приятно) Хотя установок в тот день было 16 при обычных 5-8, то есть статья принесла примерно 5-10 человек — вывод: охват и трафик это разные вещи -_-
Что успели сделать за месяц
Эта часть мне самому нравится больше всего. За месяц вышло 5 версий в App Store, с 1.1 одиннадцатого июля до 1.4 третьего августа, и 2-3 десятка сборок в TestFlight. Внутри 297 коммитов, 339 измененных файлов и плюс 32 тысячи строк.
Нас при этом трое: 2 IC и дизайнер.
Что появилось у людей:
Внесение трат скриншотом из банка. Кидаешь скриншот с операциями из своих банков, приложение само: вытаскивает операции, раскидывает по категориям и выбирает источник списания(плановые траты или кошелек) + позже научились разбирать и фото экрана кассы самообслуживания, прямо в магазине.
«Могу ли я себе это позволить?» Моя любимая фича. Вводишь сумму покупки и сразу видишь: хватает ли денег, откуда они возьмутся и что будет с целями, если сумма крупная. Мелкая покупка при этом больше не пугает разговорами про отпуск, а если денег не хватает, приложение показывает, когда хватит, и предлагает альтернативу.
Агент в чате, поумнел. Кубыш отвечает не общими словами про финансовую грамотность, а по твоему конкретному плану, тратам и целям — ошибок еще много, но пользовательская активность говорит, что как таковой чат не особо популярен.
«Загляни в будущее» Выбираешь дату и видишь, сколько накопишь к ней по текущему плану.
Математика подушки с премиями. Оказалось, самое муторное и гемморойное во всем проекте: приоритеты целей, желаемые даты и прогнозные даты долго не хотели жить вместе. А когда я решил, что закончил решил, что премии тоже важны и это прям редбосс. Наверно неделю мучал учет разовых и регулярных премий — как итог пришлось переделывать мат модель.
Короче, работы было вагон и маленькая тележка. Дошло до смешного. Файл с описанием изменений разросся до 194 тысяч символов, а накопительное «Что нового» для карточки App Store перестало влезать в лимит Apple в 4 тысячи символов, и перед публикацией приходится выкидывать пункты, чтобы уместиться.
Если интересно подробнее глянуть состав релизов или вам интересно развитие проекта подписывайтесь в тг: @kubyshka_user
Канал новый и сейчас там всего 26 человек — рекламы и маркетинга нет, поэтому будет интересно, что даст Хабр.
Мякушка — ранее я писал, что мне интересно до какого момента смогу дойти без привлечения разработки. Так вот с кодингом пока проблем нет, но вот по части DevOps/etc
есть проблема которую не смогли решить ни Claude ни Codex 0_о
TLS с SNI не проходит с мобильных сетей, а по IP проходит. Что это?
Это уже вышло за рамки первого месяца, но началось там же, и до сих пор не закрыто. Тут мне очень нужен совет, потому что спрашивать особо не у кого: знакомые разработчики, к которым я приходил, отвечают примерно одинаково, мол если ИИ не решил, то дальше вилы. А ИИ пока не решил.
Что есть. iOS-приложение со своим API. Бэкенд: FastAPI за nginx, VPS в Петербурге, сертификат Let’s Encrypt, TLS 1.2 и 1.3, домен в зоне .com, DNS на Cloudflare без проксирования.
Симптом. С российских мобильных операторов (Мегафон, МТС, Билайн, Москва) приложение не может достучаться до своего API. На проводных каналах все работает.
Замеры с физического устройства, ВПН и Private Relay выключены:
-
https://<домен>/v1/healthс мобильной не открывается, с Wi-Fi работает -
https://<второй-домен>/v1/healthто же самое -
https://<IP>/v1/healthоткрывается с мобильной. Сертификат не совпадает, но соединение устанавливается -
http://<IP>/v1/healthоткрывается, отвечает nginx
Второй домен я завел за час до проверки, он физически не мог заранее попасть ни в какие списки. Блокируется так же.
С внешних узлов в России (check-host, Москва и Петербург) домен отвечает 200 за 0,07-0,33 секунды. DNS исключен: 4 публичных резолвера отдают верный адрес, 20 запросов из 20. DNSSEC на зоне не включен.
Главное наблюдение. Соединение к тому же серверу, на тот же порт, с тем же сертификатом проходит, когда имя не передается в рукопожатии, и не проходит, когда передается. Причем блокируется любое наше имя, включая только что созданное.
Что пробовали, и не помогло:
-
переезд с зарубежного хостинга (Амстердам, через туннель Cloudflare) на VPS в России со своим TLS
-
2 смены IP сервера. Первый адрес действительно был недоступен у части операторов, замена помогла на проводных каналах, на мобильных нет
-
смена доменной зоны. Прежняя зона .app блокировалась целиком: не открывались ни поддомены, ни корень, при этом чужие сайты в .app открывались. После переезда в .com картина повторилась
-
перенос DNS с хостера на Cloudflare. У прежних NS ловил провал, когда все 4 публичных резолвера разом отдавали пустой ответ. Резолв стал стабильным, доступность не изменилась
-
запасной путь в приложении: при отказе связи ходить на IP вместо имени, с проверкой сертификата против нашего домена, доверие при этом не ослаблено. Работает, но нестабильно, и это очевидно лечение симптома
Со стороны сервера. В nginx включен лог с именем виртуального хоста. С мобильных адресов приходят фоновая синхронизация и события, все 200, а запросов от экранов, где проблема, нет вообще, ни с каким кодом. До сервера они не доезжают.
Вопросы, ради которых я это все и пишу:
-
Что вызывает такую реакцию? Похоже на фильтрацию по SNI, но блокируется имя, созданное час назад. Реагируют на сочетание имени с конкретным адресом? На параметры рукопожатия?
-
Есть ли смысл менять площадку хостинга, или адрес тут не главное?
-
Работает ли российский CDN перед API мобильного приложения как решение? У кого держится?
-
Есть ли способ надежнее клиентского костыля, такой, что не развалится от следующего изменения у оператора?
-
Расскажите как вы решали проблему доступности для пользователей LLM API OpenAI/Antropic из Российских адресов?
Готов дать дополнительные замеры: трассировки, дампы рукопожатия, проверки с конкретных операторов. Буду благодарен за любой практический опыт, даже за «мы пробовали, не сработало».
В общем, месяц вышел прикольный. Приложение живет, люди приходят сами, продукт меняется каждую неделю, а про свои цифры я узнал больше, чем за все время до релиза.
ссылка на оригинал статьи https://habr.com/ru/articles/1078768/