ilyaPlotkin

На Пикабу
в топе авторов на 537 месте
2007 рейтинг 9 подписчиков 9 подписок 22 поста 2 в горячем
1

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4

Всем привет!

Тут я подумал... а почему бы не рассказать о сервере? Предупреждаю сразу: будет много сложного и непонятного текста!

Немного о сервере

Сервер — это Maven-проект (кто понял, тот понял). Maven — это не просто фреймворк, а целая экосистема, которая включает в себя огромное количество инструментов. Он также выполняет роль сборщика.

Главный конфигурационный файл проекта — pom.xml. В него добавляются библиотеки, фреймворки и прочие зависимости. Помимо Spring Boot и его компонентов, я добавил:

  • PostgreSQL — база данных, в которой хранится огромное количество таблиц.

  • Firebase — гугловая библиотека для отправки сообщений.

  • OkHttp3 — для выполнения HTTP-запросов на сторонние сервисы, такие как Firebase и Яндекс.

  • Quartz Scheduler — для работы с таймерами. Раньше использовался для отслеживания времени жизни SMS.

  • Lombok — значительно упрощает код, убирая необходимость вручную писать геттеры и сеттеры.

  • Flyway — для управления миграциями базы данных. Например, при переносе на другой сервер или создании новой таблицы можно не писать SQL-запросы вручную, а просто выполнить команду, и Flyway сам всё сделает.

  • Hibernate — облегчает работу с базой данных, избавляя от необходимости писать SQL-запросы вручную и разбираться, почему что-то не работает из-за новой колонки или неправильного запроса.

Миграции

На данный момент у меня 36 миграций. Они включают в себя создание новых таблиц и обновление старых.

Первый блок — init: здесь просто инициализируется схема базы данных. Затем добавляются таблицы.

Структура проекта

В проекте есть несколько пакетов (или папок, кому как удобнее):

  • secure — всё, что связано с защитой: конфигурация, токены и прочее.

  • controllers — здесь находятся Java-классы-контроллеры. Каждому классу даю название по принципу функционал + Controller, например:

    • FileController — отвечает за работу с файлами.

    • MessageController — управляет обработкой сообщений.

Это основные моменты, остальные параметры можно считать стандартными.

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4 Программирование, Интернет, IT, Длиннопост

DTO (Data Transfer Object) — объект передачи данных между клиентом и сервером.

По сути, у меня там всего один enum, который содержит две подкатегории:

  • Request — запрос

  • Response — ответ

Думаю, логика понятна: Request используется для отправки данных на сервер, а Response — для получения ответа.

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

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4 Программирование, Интернет, IT, Длиннопост

Entity — таблицы для Hibernate

В проекте есть несколько Entity-классов, которые описывают структуру таблиц в базе данных.

Есть две абстрактные сущности:

  1. AbstractEntity — содержит стандартные параметры, которые есть в каждой таблице:

    • id — первичный ключ

    • Переопределённые методы, такие как equals() и hashCode()

  2. DatedEntity — расширяет AbstractEntity и добавляет два поля:

    • createdAt — время создания записи (например, когда был создан пользователь)

    • updatedAt — время последнего обновления записи (например, когда сообщение было прочитано)

Таким образом, сущности наследуются друг от друга:

DatedEntity наследует AbstractEntity
➡ Другие классы наследуются от DatedEntity

В результате при создании новой таблицы мне не нужно каждый раз вручную добавлять id, createdAt и updatedAt — они уже есть в базовом классе. Удобно и меньше дублирования кода! 🚀

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4 Программирование, Интернет, IT, Длиннопост

Repository — репозитории для работы с БД

Если просто, то для каждой таблицы создаётся свой репозиторий, в котором прописаны запросы к базе данных. У меня их 24, значит, и таблиц тоже 24.

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

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4 Программирование, Интернет, IT, Длиннопост

Service — бизнес-логика приложения

Сервисные классы отвечают за взаимодействие между слоями приложения. Здесь происходит:

  • Взаимодействие с базой данных через репозитории

  • Взаимодействие между различными компонентами приложения

  • Логика обработки данных перед отправкой клиенту

  • Выполнение различных проверок и преобразований

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

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4 Программирование, Интернет, IT, Длиннопост

Дополнительные моменты и распределение нагрузки

Думаю, основные вещи я описал, но есть ещё несколько дополнительных компонентов, которые взаимодействуют между собой.

Почему я не использую WebSocket?

Кто-то может спросить про WebSocket... но я его пока не реализовывал. Причина проста — текущее железо не потянет. Даже если в будущем будет более мощный сервер, всё равно есть ограничения на количество подключений к одному серверу.

К тому же WebSocket реально нужен только для отображения статуса "пользователь онлайн" (в моем случае). Но это излишняя нагрузка, которая мне не нужна.

Масштабирование сервера

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

Я прикинул примерную архитектуру серверов:

  • Сервер мониторинга — отслеживает состояние всех остальных серверов.

  • Сервер бэкапов — отвечает за сохранение резервных копий данных.

  • Два сервера для видеозвонков — работаю над полноценной WebRTC-реализацией, без использования сторонних сервисов.

С первого взгляда это может показаться сложным и непонятным 🤯, но на самом деле всё логично и продумано. 🚀

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4 Программирование, Интернет, IT, Длиннопост

Proxy и масштабируемость

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

То же самое касается серверов-хранилищ — их тоже можно масштабировать до бесконечности. Правда, используется принцип пара-зеркало: один сервер — основной, второй — резервный, на случай отказа основного.

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

Про видеозвонки расскажу подробнее позже, когда придет время и когда протестирую.

я тут подумал. оставлю свой телеграм для связи, мало ли, может какие нибудь предложения поступят. @ilyaPlotkin_vzhoohApp

Ну, как-то так. Всем спасибо за внимание! 🚀

Показать полностью 6
1

Приложение СамСервис часть 2 и Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 3

Кому интересно:

Здесь я решил объединить эти темы, так как речь пойдет об одном и том же – интеграции авторизации через Яндекс.

Почему Яндекс?

Думаю, причина очевидна: СМС-авторизация – это дорого.
Разберем цифры:

  • Регистрация "имени" у операторов – 2000–2500 рублей за каждого. Учитывая, что у нас 4 основных оператора, только за это придется платить от 8000 рублей в месяц.

  • Каждое СМС в среднем стоит 2,5 рубля. Если в месяц приходит 1000 новых пользователей, это еще +2500 рублей.

  • А если добавить возможные злоупотребления, спам и другие проблемы – сумма растет.

Итого: 10 000+ рублей в месяц только за возможность отправки СМС. Такой вариант явно не лучший.

Что тогда выбрать?

Очевидный вариант – авторизация через сервисы. Рассматривал Google, но… санкции, ограничения, возможные блокировки – не вариант.
А так как приложение ориентировано на российскую аудиторию, выбор пал на Яндекс.

Проблема с Google Play

При проверке приложения Google требует, чтобы проверяющий мог войти. Но тестового аккаунта в Яндексе не существует.

Решение: временная кнопка для проверки, которая 21 февраля 2025 года станет невидимой.

Приложение СамСервис часть 2 и Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 3 IT, Программирование, Программист, Программа, Интернет, Длиннопост

Как сделать интеграцию?

  1. Зарегистрировать приложение в Яндекс.OAuth.

  2. Указать пакет приложения и отпечаток ключа (можно найти в ключе или Google Play).

  3. После авторизации Яндекс выдает токен, по которому можно получить номер телефона пользователя.

Но тут возникает проблема: если делать все в самом Android-приложении, это дыра в безопасности.

Как обойти ограничение?

Яндекс не дает получить токен через WebView, поэтому алгоритм такой:

  1. После авторизации приложение отправляет код на сервер.

  2. Сервер по коду получает токен.

  3. По токену сервер получает номер телефона.

Приложение СамСервис часть 2 и Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 3 IT, Программирование, Программист, Программа, Интернет, Длиннопост

Проблема с редиректом (ошибка 400)

После настройки сервера приложение начало выдавать ошибку 400 при редиректе.
Долго гуглил, но ответов не нашел.
Решение оказалось простым: нужно указать, что приложение – это не только Android-клиент, но и веб-сервис.

В параметре Redirect URI нужно указать URL контроллера сервера, который принимает код. После этого всё заработало!

Еще одна проблема – два токена!

После авторизации устройство получает токен. Но при попытке использовать его – ничего не работает.

  • В БД Android-приложения токен есть.

  • В БД на сервере токен другой.

Что?! Как так?

Оказалось, Яндекс отправляет два запроса с одним кодом.

  1. Первый запрос получает код, сервер генерирует токен A, отправляет его устройству.

  2. Следом Яндекс шлет второй запрос, сервер генерирует новый токен B.

  3. Устройство продолжает работать с токеном A, но в БД уже записан токен B.

Решение: добавил триггер, который блокирует повторную генерацию токена для одного кода. Теперь всё работает корректно.

Приложение СамСервис часть 2 и Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 3 IT, Программирование, Программист, Программа, Интернет, Длиннопост


Что с «Вжух»?

Работа над проектом не заброшена, но сервер не тянет нагрузку, нужен более мощный, а цены на хорошие сервера кусаются.

Итог

Интеграция с Яндексом удалась, проблем было много, но всё решаемо.
Спасибо за внимание! 🚀

Показать полностью 3
5

Приложение СамСервис

Всем привет!

Однажды заходит ко мне в гости один очень хороший друг и заявляет:

— Слушай, у нас тачки старые, иногда нужен мелкий ремонт — то резину поменять, то прокладку ГБЦ заменить... А во дворе — тот еще квест. В сервис поедешь — месяц ждать. А твоего (ну, в смысле моего) японца мастера как видят, так крестятся. Если не верующие — уверуют, плюют через левое плечо, стучат по дереву, читают мантры… Но за доисторического японца все равно не берутся, даже если ремонт пустяковый.

— Хм... — задумался я.

— Так вот! Есть же автосервисы самообслуживания! Звонишь (или звонишь, кому как нравится), бронируешь место в теплом гараже, если зима. Если лето — в прохладном, без солнцепека. И ковыряешься там в свое удовольствие! В некоторых даже яма есть или подъемник. И цена норм — 300–400 рублей в час! Красота!

— Хм... — снова задумался я. — То есть менять прокладку ГБЦ во дворе было ошибкой? (Кстати, это чистая правда, весь двор сбежался посмотреть.) Ну блин, впервые слышу, что такие сервисы вообще существуют...

— Вот-вот! Они есть, но знают о них единицы. Разве что по сарафанному радио. Я сам только сегодня узнал! Короче... ты ж программист. Давай соберем все эти "СамСервисы" (да, мы уже название придумали) в одно место, чтобы больше людей о них узнало. Ну и, если повезет, может, даже какую-то копейку с этого поимели.

— Ни слова больше! — вслух подумал я. — Соберем это все в одно приложение! Но сначала нужно найти номера, адреса, города всех таких сервисов по России.

— Та без проблем! Соберу! Нужно сайт и мобильное приложение!

— Хорошо! Только сайты я не особо люблю делать. Я могу замутить сервер, клиент под Android… Сайт, если и сделаю, то простенький. Пойдет?

— КОНЕЧНО! Главное — начать!

Ну, собственно, начал. Сделал мини-сайт (честно, не фанат веба): https://myself-service.ru/
И приложение под Android, даже выкатил в Google Play! (Да, я могу, это несложно, аккаунт завел еще до СВО.)

Приложение СамСервис Программирование, Приложение, IT, Длиннопост
Приложение СамСервис Программирование, Приложение, IT, Длиннопост

часть кнопок, естественно, не работает, это задел на будущее.


Но, теперь само приложение:

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Когда мы открываем приложение, нас встречает раздел "Новости". Публиковать их могут только админы. Вообще, если зайти в приложение под учеткой админа, функционал будет немного другим — более расширенным. В частности, только админы могут добавлять новости.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост
Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Далее — каналы. По сути, это почти как каналы в Telegram. Сверху есть значок "карандаш" — кликнув по нему, можно создать свой канал. Писать в нем может только автор, а комментировать — все пользователи. Если нажать "Подписаться", то канал всегда будет отображаться вверху списка, даже если он был где-то внизу.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Карта СамСервисов, полотно от яндекс карт, при клике на значок переходит на сервис и показывает информацию, по сервису.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Чаты пользователей. По поисковику можно найти любого пользователя, даже меня) Синхронизацию с телефонной книгой пока не делал.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Можно отправлять друг другу сообщения и картинки. Картинки хранятся на сервере. Правда, сам сервер еще не полностью готов, поэтому функционал пока не весь.

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

Также можно отправлять картинки. Функция отправки видео временно отключена, но когда она работает, получателю сначала приходит GIF-анимация из видео. Если кликнуть, видео начинает стримиться с сервера, не занимая память телефона. Реализовал так специально — чтобы экономить место на устройстве.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Далее — профиль пользователя. Здесь можно сменить аватар и изменить ник. Каждый ник уникален — система не позволит установить уже существующий.

Под аватаром находится гараж, где пользователь может добавить свой автомобиль и вести по нему записи. Эти записи доступны только владельцу.

Если в поиске найти пользователя и перейти в его профиль, можно увидеть его автомобиль, но открыть его записи нельзя.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

В гараже добавил несколько полей. Кстати, если есть идеи, что еще добавить — предлагайте! Пока придумал такой вариант.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Причина сохранения данных — либо нажатие кнопки "Сохранить", либо замена аватара.

Про дизайн

Я не дизайнер, мне и слон на ухо наступил, и глаз на стиль не настроен, сделал как мог.

🚪 Про вход в приложение

Если хотите потестить — пишите мне в Telegram: @ilyaPlotkin_vzhoohApp.
СМС пока отключены, поэтому перед входом нужно указать мне свой номер. В ответ я пришлю код (но уже завтра 😉). Только после этого вводите номер в приложении и "ждите" СМС.

В будущем добавлю авторизацию через сервисы Яндекса.

🔧 Немного про сервер

Использую стандартный стек: Java Spring Boot, Hibernate, Spring Security, Firebase, Lombok.
База данных: PostgreSQL, миграции — Flyway.

📲 Ссылка на Google Play

👉 Скачать приложение

Всем спасибо за внимание! 🚀

Показать полностью 11
8

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 2.1

Всем привет!

Прошлый пост с описанием технологии неожиданно вызвал отклик. Вот ссылка на него:
Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 2

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

🔄 Стриминг видео

Видео с сервера стримится — да, настроен Nginx с медиасервером. Это не просто загрузка файла (как если бы это был архив или что-то подобное).

Пример: если вставить ссылку на видео в VLC-плеер, оно начнет воспроизводиться сразу, кэшируясь на ходу.

Но сервер у меня сейчас очень медленный — как интернет 20 лет назад, когда картинка грузилась сверху вниз по несколько часов.

📹 Длинные видео

В ленте длинных видео на превью показывается GIF (весит 400–500 КБ). Даже она загружается медленно.

👉 Если нажать на гифку, откроется плеер, и видео начнет стримиться сразу, без предварительной загрузки.

Почему я отказался от стриминга сразу в ленте?

Изначально я хотел, чтобы видео стримилось прямо при пролистывании. Но это плохо работает при медленном интернете:

  • Долгая загрузка

  • Особенно это заметно, когда интернет то есть, то пропадает

Мои наблюдения по TikTok

Честно, исходники TikTok я не смотрел, да и не хочу. Но по пользовательскому опыту заметил интересные детали.

📌 Если быстро пролистывать ленту, внизу появляется прогресс-бар.

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

Если бы это был стриминг:

  • Картинка бы появилась сразу

  • Видео воспроизвелось бы хотя бы пару секунд

Кроме того, занимаемая память приложения косвенно намекает на работу с файлами.
🤔 Почему приложение может весить 2–5 ГБ, если это не видео?

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

Вопрос по Spotify и Telegram

Мне писали, что в Spotify и Telegram треки стримятся, а параллельно загружаются следующие в плейлисте.

Честно, я пока не понимаю, зачем так делать.

Ну, допустим, мы перелистнули трек — и дальше происходит та же схема, что и у меня.
👉 Файл воспроизводится из памяти, а в фоне параллельно подгружается следующий.

Правильно ли я это понял? Если нет, поправьте меня.

Показать полностью
9

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 2

Снова приветствую всех!

Кто не в курсе, первая часть здесь:
Ссылка на пост

Продолжаем! В этом посте разберем ленту видео.

📌 Технологии

  • ViewPager2 — для прокрутки видео

  • ExoPlayer — плеер (читал, что TikTok использует тот же)

🔄 Загрузка видео

Первое, с чем столкнулся — небольшая задержка после авторизации, пока загружается первое видео. Но когда оно загрузилось, можно спокойно листать, ведь параллельно идет динамическая загрузка следующих роликов.

Скорость загрузки зависит от мощности телефона:
📱 Если устройство тянет — загружается сразу 8 видео.
📱 Если слабее — 2, 4 или 6.

Но нужно решить проблему первой загрузки.

🚀 Решение: предзагрузка видео

При запуске приложения в фоне стартует Worker, который загружает 10 видео и сохраняет их в памяти.
👉 Итог: после регистрации видео появляется сразу, без задержек.

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

📂 Какие видео загружаются?

Когда пользователь загружает видео и оно проходит модерацию, в PostgreSQL прописывается его путь и параметры.

Есть лента "последних" видео.
📌 Проблема: если в БД хранить только UUID, при большом количестве записей они начинают загружаться в случайном порядке.
📌 Решение: сортировка по времени создания и изменения.

Сейчас пользователи получают всю ленту последних видео (их пока не так много), но потом ограничу, например, 10 000 последних видео.

🔄 Как сделать так, чтобы видео не повторялись?

На сервере пользователь получает список видео, а телефон загружает их по порядку.

Но важно, чтобы при каждом открытии ленты не показывались одни и те же видео.

📌 Решение:
На устройстве есть локальная база данных, где записываются просмотренные видео.
🔹 Они просто не загружаются повторно.
🔹 В ленту подставляются только новые видео.
📌 После просмотра видео удаляется «сборщиком мусора».

🎥 Лента длинных видео

Работает по другому принципу:
🔹 Сначала загружается GIF-превью.
🔹 При нажатии на него открывается плеер и подгружает видео с сервера (кэшируется в приложении).

🚀 Дальнейшие планы

Добавлю:
Рекомендации
Подписки
✅ И другие фичи

💻 Производительность

На предыдущей работе тестировал ленту на нормальном сервере — работало отлично.
Сейчас у меня медленный сервер, загрузка видео очень долгая (аренда — 1000 рублей/мес).

📹 Демонстрация

Попробую прикрепить видео с работой ленты и переключением на длинные ролики.

Записываю одним телефоном другой телефон — да, это выглядит странно 😅.
Но раньше, когда записывал экран, мне говорили:
"Это просто анимация, покажите вживую!"
Так что теперь записываю по-старинке 😆.

Как видно, загруженные пользователем видео отображаются в профиле.

Видео с машинками длится более 1 минуты, поэтому оно попало в категорию "Видео" (для длинных роликов).

Буду рад фидбэку!

Показать полностью 1
6

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 1

Привет всем, кто читает! Пишу здесь впервые, и готов принять справедливую критику за ошибки. Но давайте не об этом. Немного вводной информации: я разработчик программного обеспечения, работаю с Java/Kotlin, занимаюсь андроид-разработкой. В настоящее время работаю над своим инди-проектом. Честно говоря, не думаю, что он «выстрелит», скорее это будет элемент портфолио. На написание этого поста меня подвиг один знакомый — заядлый пикабушник.

Теперь, собственно, о проекте. Это приложение для коротких видео, по аналогии с TikTok, шортсами и тому подобным. Думаю, из названия вы уже поняли, о чём речь. Сервер уже неплохо работает: реализована авторизация через SMS, при входе пользователю генерируется JWT-токен, и он авторизуется в приложении. Также есть загрузка видео в ленту. Если длина видео превышает минуту — оно попадает в ленту длинных видео. Реализована отправка сообщений внутри приложения, поиск пользователей и редактирование профиля.

Сразу хочу отметить важный момент: в сети есть фреймворк для создания подобных приложений, нечто вроде конструктора. Но хочу сразу развеять сомнения — это не тот фреймворк. Я пишу всё сам, это мой собственный код. Просто подозреваю, что те, кто знаком с такими фреймворками, сразу напишут, что я использую готовое решение.

Внизу покажу скриншоты приложения. Правда, не судите строго — пока на них пусто.

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 1 Программирование, IT, Программист, Интернет, Длиннопост

Окно регистрации/авторизации. Добавил 4 страны, Россия, Беларусь, Казахстан, Узбекистан. Логотип помог нарисовать чатГпт. На это роль чата закончилась😇

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 1 Программирование, IT, Программист, Интернет, Длиннопост

Введите описание к изображению (не обязательно)

Это скрин главной ленты, на данный момент видео в ленте нет, я их периодически после проверки удаляю, сверху две клавиши - Shorts и Видео - переключение между длинными и короткими видео,

Такую штуку реализовал: когда идет загрузка видео на сервер, создается гиф из первых 5 секунд по 10 кадров в секунду, эта гифка используется как превью на длинных видео.

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 1 Программирование, IT, Программист, Интернет, Длиннопост
Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 1 Программирование, IT, Программист, Интернет, Длиннопост

Пока вот так. Ожидайте APK файл ориентировочно завтра или послезавтра — сейчас нужно немного «помучать» сервер, оплатить SMS и еще настроить пару вещей.

Прошу прощения, что сразу не могу предоставить APK.

Не уверен, нужно ли сюда выкладывать код и будут ли его вообще смотреть. Если кто-то подскажет, буду рад.

Всем спасибо за внимание!

Показать полностью 4
Отличная работа, все прочитано!