Прогресс разработки приложения [ЛОНГ]

Новые фичи

Всем привет!

Давно тут ничего не постила, но работу над приложением не забросила. Много времени и сил ушло на проработку backend, который я делала впервые, что уже само по себе создавало много приключений, потому что пока делаешь первый этап, ничего не понимая про второй, когда доходишь до второго этапа — приходится переделывать первый, и так по кругу.

Плюс к работе с базами данных, серверами и синхронизацией добавились новые законы, из-за которых пришлось сильно менять архитектуру хранения персональных данных и авторизацию на территории РФ. Но ничего, и это вроде как получилось сделать, хотя я провела слишком много времени, изучая юридическую сторону вопроса, которую толком никто не объясняет, а хранение данных на территории РФ с арендой ВМ выходит в копеечку, которая бы уплывала из моего кошелька раз в месяц даже без прибыли с приложения.

Поэтому я приняла решение сделать хранение данных раздельным: для всего мира у нас удобный и быстрый Supabase, работать с которым одно удовольствие, а для РФ данные пользователя хранятся на его личном Яндекс Диске, что убирает с меня статус хранителя персональных данных. Плюс авторизацию пришлось поменять на Яндекс ID по тем же причинам, потому что хранение даже данных о почте — это ПД. Из-за этого изменения данные для РФ при синхронизации между устройствами будут грузиться все и сразу, а не только новые, как через Supabase, но зато это решает много юридических, технических и финансовых проблем, а на скорость работы приложения это никак не повлияло.

Если бы при начале разработки я знала, что мне нужно будет так заморачиваться с хранением данных и серверами, я бы изначально сделала просто возможность бэкапов данных между устройствами через какой-нибудь Google/Яндекс Диск или что-то подобное. Но я решила оставить синхронизацию между устройствами, раз уж я ее сделала, и так много потратила на нее времени.

А ещё приятным (ага, если бы) сюрпризом для меня стало, что данные о подписках на одном устройстве (например, подписка куплена через Google Play) не так-то легко получить на другом устройстве (например, на ПК) без хранения данных о подписке где-то на стороне. Плюс помимо хранения данных о подписке надо ещё проверить активность этой самой подписки. Моя наивная головушка думала, что я просто напишу что-то вроде GooglePlayShop.checkSubscription() где-нибудь на ПК, и всё будет готово. Но нет. Магазины не разрешают так делать, потому что тогда было бы легко подделать данные о подписке и получить её бесплатно, если вы хацкер, который очень любит туду-приложения.

Поэтому мне пришлось изучить, как пишутся серверные функции, которые выступают своего рода посредником между моим приложением и сервером магазина. Серверная функция с помощью секретного ключа, который знает только она, обращается к серверу магазина, получает оттуда актуальный статус подписки и возвращает его приложению. Пользователь не может подделать этот ответ, потому что секретный ключ хранится только на сервере, а не в коде приложения. Хвала небесам, что в том же Supabase есть серверные функции (там вообще всё есть!), и у меня получилось подключить проверку подписок для Google Play с любого устройства. Вы не представляете, какая я была счастливая, когда купила тестовую подписку на андроиде, затем зашла с этого же аккаунта на ПК, и там подписка тоже была активна без необходимости покупать подписку второй раз.

Помимо этого много времени ушло на продумывание того, как подключить различные платёжные системы, потому что сейчас в РФ работает только Rustore, а я хочу выпустить приложение на Android, ПК и хотелось бы на iOS и Mac. На это ушло, наверно, больше всего времени. Как регистрироваться в зарубежных магазинах, как выводить оттуда деньги, что такое LLC, LLP, как открывать зарубежные карты, можно ли подключить свою систему оплаты, какие из них работают вне РФ (спойлер: никакие не работают). Все эти вопросы я решала много месяцев, и если честно, до сих пор пока решаю, потому что это оказалось самой сложной частью разработки. Вот вам для наглядности моя доска с данными про подписки и возможностью оплаты, которая на самом деле ещё больше, но просто вся не влезла в скриншот.

тут должна быть картинка того мема с челом у доски с красными нитями и бумажками на стене
тут должна быть картинка того мема с челом у доски с красными нитями и бумажками на стене

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

И вот список того, что было добавлено в последние пару месяцев:

  • новые анимации для дел, списков и прогресс-баров
  • UI теперь более круглый и кавайный
  • доработан визуал диалогов и кнопок
  • добавлены новые темы + вместо 4 цветов их теперь 6
  • добавлена авторизация для РФ через Яндекс ID
  • хранение данных для РФ через Яндекс Диск
  • тёмная тема
  • доделала страницу с настройками
  • подключила подписки и их проверку для Google Play

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

Всем 💜

2