Разработка системы комментариев в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Разработка системы комментариев в мобильном приложении
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Разработка системы комментариев в мобильном приложении

Комментарии сложнее лайков в разы: вложенность (или её отсутствие по дизайну), пагинация, клавиатура перекрывает поле ввода, @упоминания внутри текста, модерация. Самая частая жалоба на самописные реализации — «при открытии комментариев скролл прыгает» или «клавиатура перекрывает последний комментарий». Начнём именно с этого.

Проблема с клавиатурой

На iOS UITableView или UICollectionView со списком комментариев + UITextField внизу. При появлении клавиатуры нужно поднять весь контент. Правильный способ — не трогать contentInset вручную, а использовать KeyboardLayoutGuide (iOS 15+): view.keyboardLayoutGuide.topAnchor.constraint(equalTo: inputView.bottomAnchor). На iOS 14 и ниже — подписка на UIResponder.keyboardWillShowNotification и обновление tableView.contentInset.bottom.

После добавления нового комментария — прокрутить к нему: tableView.scrollToRow(at: lastIndexPath, at: .bottom, animated: true). Проблема: если scrollToRow вызван до того как UITableView обработал вставку (insertRows(at:with:)), крашим на NSInternalInconsistencyException. Порядок: сначала beginUpdates → insertRows → endUpdates, потом scrollToRow.

На Android с Compose — LazyColumn с reverseLayout = true (новые сообщения снизу) и imePadding() на уровне колонки. reverseLayout избавляет от ручного скролла вниз при добавлении комментария.

Структура данных и вложенность

Flat-структура (все комментарии на одном уровне) — проще и работает для большинства приложений. Instagram так и сделан: один уровень комментариев + replies внутри каждого через отдельный запрос.

Если нужна вложенность: хранить parent_comment_id (nullable). Отображать максимум 2 уровня — глубже не читают. Загрузку replies делать lazy: по умолчанию показываем «N ответов», по тапу загружаем.

Пагинация — cursor-based: GET /posts/{id}/comments?cursor=<last_id>&limit=20. Для вложенных replies — отдельный endpoint GET /comments/{id}/replies.

Добавление комментария

Оптимистичное добавление — обязательно. Локально генерируем client_comment_id, добавляем в список с isPending = true, показываем spinner или серый текст. При успехе — заменяем на серверный объект. При ошибке — показываем кнопку «Повторить» рядом с комментарием.

Поле ввода — UITextView с авторасширением (не UITextField): комментарии бывают длинными. Лимит 500-1000 символов с счётчиком. Кнопка «Отправить» — активна при непустом тексте.

Удаление и модерация

Удаление своего комментария — свайп (iOS) или лонг-тап с bottom sheet. Удалённый комментарий не убираем из ленты полностью, если у него есть replies — заменяем текст на «Комментарий удалён». Иначе дочерние ответы теряют контекст.

Жалоба на комментарий — report_comment_id → очередь модерации. Автоматический скрытие при N жалобах (настраивается) + ручная проверка.

Счётчик комментариев в ленте

Денормализованное поле comments_count в таблице поста, инкрементируется/декрементируется триггером или очередью. При добавлении комментария через приложение — обновляем счётчик в UI оптимистично.

Сроки

Flat-комментарии с пагинацией, оптимистичным добавлением, удалением — 2-3 рабочих дня. С вложенными replies, упоминаниями, модерацией — 5-7 дней. Стоимость рассчитывается индивидуально.