Документация
Всё о каталоге FastAPK: как публиковать приложения, как работает глубокая автопроверка APK, чем открыт API v1 и на каких принципах построен дизайн продукта.
Начало работы
FastAPK — каталог Android-приложений, где каждая карточка ведётся разработчиком, а каждая версия APK проходит автоматическую проверку до публикации. Читателю каталог не требует регистрации: поиск, чарты, категории, версии, контрольные суммы и отзывы доступны сразу. Разработчику нужен аккаунт — он открывает создание карточек, загрузку APK, ответы на отзывы и статистику загрузок.
Быстрый путь разработчика выглядит так: регистрация → карточка приложения → загрузка подписанного APK → автоматическая проверка → публикация. Далее при каждом обновлении достаточно загрузить новый файл с большим versionCode — карточка, страница и API обновятся сами.
Публикация приложения
Карточка приложения — это витрина продукта: название, короткое описание (до 80 символов), полное описание, категория, возрастной рейтинг, иконка и скриншоты. Заполнение обязательно по всем полям: страницы каталога и ответы API собираются из карточки напрямую, поэтому от её качества зависит и витрина, и выдача поиска.
APK загружается на страницу карточки. К файлу три жёстких требования: подпись release-ключом (debug-подпись отклоняется), монотонно растущий versionCode и корректный versionName. После загрузки запускается автопроверка — её результат определяет судьбу версии: мгновенная публикация, ручная модерация или отклонение с объяснением.
Каждая опубликованная версия получает свою страницу в блоке «Все версии»: размер, дата, SHA-256 и список изменений разрешений относительно предыдущей версии. Пользователь видит историю полностью и может скачать любую предыдущую версию — это осознанное преимущество каталога перед магазинами, которые скрывают старые файлы.
Автопроверка файлов
Каждый загруженный APK разбирается автоматически ещё до того, как попадёт к пользователю. Проверка многослойная — от битого архива до скрытого кода:
- Целостность архива. CRC каждой записи, дубликаты имён файлов, защита от zip-бомб: коэффициент сжатия и предел распаковки 4 ГБ. Битый или злонамеренно собранный архив не пройдёт.
- Скрытый код. Исполняемые файлы (dex, jar) вне корня APK — в assets или res — запрещены: так прячут код, который не видит стандартный анализ манифеста.
- Запускаемость. В манифесте должен быть launcher-activity: файл, который нельзя установить и запустить, не публикуется.
- Режим отладки.
debuggable=true— отклонение: релизная сборка обязана быть закрытой. - Подпись. Debug-сертификат отклоняется. Подпись всех версий одной карточки сверяется между собой: смена ключа без объяснений — повод для ручной проверки.
- Риск разрешений. 33 разрешения классифицированы по риску: SMS и установка пакетов дают максимальные баллы, камера, микрофон и геолокация — средние. Итог — риск-скоринг версии.
Итог проверки — вердикт. pass — версия публикуется мгновенно, без участия человека. hold — суммарный риск выше порога 40: версия попадает на ручную модерацию, и решение принимает человек. fail — находка уровня порога 90 (битый архив, скрытый код, debug-подпись): отклонение с текстом конкретной причины — разработчик видит, что именно не так, и загружает исправленный файл.
Отчёт проверки хранится для каждой версии, а факт прохождения виден пользователю в блоке «Данные и приватность» на странице приложения. Каталог не рисует «проверено антивирусом» — он показывает, что реально проверено машинно.
Правила каталога
Публиковать может только правообладатель: карточку ведёт сам разработчик или его представитель. Запрещены вредоносное и скрытое поведение, обман в описании, чужие приложения и торговые марки без права на них. Возрастной рейтинг заявляет разработчик — каталог помечает контент 18+ и не показывает его в общих подборках без запроса.
Нарушения проверяются автоматически на этапе загрузки файла и вручную по жалобам пользователей: у каждой карточки есть кнопка «Пожаловаться», сигнал уходит модератору вместе с данными версии. Разработчик может отвечать на отзывы от имени приложения — публичные ответы видны всем и обязаны соответствовать тем же правилам вежливости, что и карточка.
API v1 — справочник
Открытый REST API каталога. Базовый адрес — https://fastapk.ru/api/v1/, формат ответов — JSON, кодировка UTF-8. Чтение публичных данных не требует ключей; запись (отзывы и ответы) — токен разработчика. Карта всех эндпоинтов всегда доступна по адресу GET /api/v1/.
Эндпоинты
| Метод | Путь | Назначение | Доступ |
|---|---|---|---|
GET | /api/v1/ | Карта API | публичный |
GET | /api/v1/apps/ | Каталог: поиск ?q=, категория ?category=, страница ?page= | публичный |
GET | /api/v1/apps/{slug}/ | Карточка: описания, версии, SHA-256, подпись | публичный |
GET | /api/v1/apps/{slug}/reviews/ | Отзывы: фильтр ?stars=, сортировка ?sort= | публичный |
POST | /api/v1/apps/{slug}/reviews/submit/ | Создать/обновить свой отзыв | токен |
POST | /api/v1/apps/{slug}/reviews/reply/ | Ответ разработчика на отзыв (идемпотентно) | токен |
GET | /api/v1/categories/ | Категории со счётчиками | публичный |
GET | /api/v1/home/ | Данные витрины: рекомендованные, новинки, обновлённые | публичный |
GET | /api/v1/suggest/?q= | Подсказки поиска | публичный |
GET | /api/v1/verify/?sha256= | Проверка файла по контрольной сумме | публичный |
POST | /api/v1/updates/ | Доступные обновления для списка пакетов | публичный |
POST | /api/v1/auth/token/ | Токен по логину и паролю | публичный |
Аутентификация
Получите токен один раз и передавайте его в заголовке каждого записывающего запроса:
POST /api/v1/auth/token/
{"username": "dev", "password": "..."}
→ 200 {"token": "9f1c..."}
Authorization: Token 9f1c...
Примеры
# Каталог с поиском
GET /api/v1/apps/?q=книга
# Карточка приложения
GET /api/v1/apps/fastapk/
→ 200 {"slug": "fastapk", "title": "FastAPK",
"latest": {"version_name": "1.5.0", "version_code": 9,
"min_sdk": 24, "min_sdk_name": "7.0", ...}}
# Отправить отзыв
POST /api/v1/apps/fastapk/reviews/submit/
Authorization: Token 9f1c...
{"rating": 5, "body": "Работает быстро"}
# Ответ разработчика на отзыв №12 (идемпотентно)
POST /api/v1/apps/fastapk/reviews/reply/
Authorization: Token 9f1c...
{"review_id": 12, "body": "Спасибо за отзыв!"}
Коды ответов
200 — успех; 400 — ошибка валидации (в ответе — errors); 401 — нет или неверный токен; 403 — действие недоступно этому пользователю (например, отвечать на отзывы может только разработчик карточки); 404 — объект не найден. Ошибки всегда в формате {"detail": "…"} или {"errors": {…}}.
Обновления и пуш-уведомления
Клиент FastAPK для Android сам сообщает пользователю о новых версиях установленных приложений. Раз в 6 часов фоновая задача собирает установленные пакеты, отправляет их с versionCode в POST /api/v1/updates/ и сравнивает ответ с прошлой проверкой. Для каждого пакета, у которого в каталоге появилась версия выше, показывается системное уведомление в канале «Обновления»: имя приложения, новая версия и размер. Тап по уведомлению открывает раздел обновлений в клиенте, где можно скачать файл сразу.
На Android 13+ клиент запрашивает разрешение POST_NOTIFICATIONS перед первой отправкой — без него уведомления не показываются, это требование системы. Сторонним приложениям доступен тот же механизм: любой клиент может опрашивать /api/v1/updates/ и строить собственные уведомления об обновлениях.
Дизайн-система
Витрина и Android-клиент собраны на одной палитре и одном наборе принципов — интерфейсы не расходятся ни на один оттенок. Главный принцип: никаких серых рамок. Поверхности разделяются заливкой и фоном, между строками — только hairline-разделители, акцент один и всегда сплошной: без градиентов, стеклянных слоёв и двойных рамок.
| Токен | Светлая тема | Тёмная тема | Роль |
|---|---|---|---|
--bg | #EEF1F6 | #0A0C11 | фон страницы |
--surface | #FFFFFF | #14161F | карточки и панели |
--icon-bg | #E9EDF6 | #1D2231 | заливка чипов, полей, плиток |
--text | #0B0D14 | #F5F6FA | основной текст |
--muted | #646B7F | #8B92A8 | вторичный текст |
--accent | #2563FF | #6B9AFF | действия, ссылки, фокус |
--free | #059669 | #34D399 | бесплатно, успех |
--danger | #E11D48 | #FB7185 | ошибки, жалобы |
Радиусы: 20px — карточки, 14px — поля и кнопки, 12px — мелкие блоки, 999px — чипы. Типографика — Inter (веб, локальное хостинг шрифтов) и системный Roboto-стек в клиенте. Те же hex-значения зашиты в colors.xml Android-клиента: светлая и тёмная темы приложения повторяют витрину один в один.
Частые вопросы
- Это безопасно? Чем подтверждается?
- Каждая версия проходит автопроверку архива, подписи и скрытого кода, а её SHA-256 опубликован на странице приложения. Скачайте файл, посчитайте сумму любым инструментом и сверьте — страница «Проверка APK» делает это за один запрос.
- Версия не опубликовалась. Почему?
- Причин три: fail автопроверки (в ответе загрузки указана конкретная находка — битый архив, скрытый код, debug-подпись), риск-скоринг выше порога hold (версия ждёт ручной модерации) или ошибка в карточке. Текст причины всегда виден разработчику.
- Как выпустить обновление?
- Загрузите новый APK на страницу карточки с большим
versionCode. После проверки версия появится в блоке «Все версии», каталог и API обновятся, а клиенты получат уведомление об обновлении при следующей фоновой проверке. - Сколько это стоит?
- Ничего: публикация, автопроверка, ответы на отзывы и API — бесплатны для разработчиков.
- Можно ли скачать предыдущую версию?
- Да — в блоке «Все версии» доступен каждый опубликованный APK с его SHA-256. Каталог не удаляет историю версий.