Розробка публікації текстових постів у мобільному застосунку

Текстовий пост — основа соціального застосунку. Але часто бачимо, як команди спрощують реалізацію до «TextField + кнопка Відправити», а потім отримують скарги: користувач написав довгий текст, згорнув застосунок — чернетка зникла. Або відправив пост при слабкому інтернеті — помилка, і все заново. На

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Розробка публікації текстових постів у мобільному застосунку
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Текстовий пост — основа соціального застосунку. Але часто бачимо, як команди спрощують реалізацію до «TextField + кнопка Відправити», а потім отримують скарги: користувач написав довгий текст, згорнув застосунок — чернетка зникла. Або відправив пост при слабкому інтернеті — помилка, і все заново. Наш 5-річний досвід у розробці (30+ проєктів з публікацією контенту) показує: ці деталі критичні для утримання аудиторії. Інша проблема — конфлікт версій: користувач редагує пост, а інший клієнт уже змінює ту саму чернетку. Без версіонування дані втрачаються. Нижче — як ми вирішуємо ці задачі та що входить у реалізацію.

Як ми проєктуємо редактор тексту?

У мінімальному випадку використовуємо UITextView на iOS або BasicTextField на Android — якщо форматування не потрібне. Обов'язково включаємо автокорекцію, перевірку орфографії та автоматичне розширення висоти до 5–6 рядків. На iOS це налаштовується через NSLayoutConstraint з оновленням у textViewDidChange. Коли потрібне форматування (жирний, курсив, списки), вибір стека залежить від платформи:

Платформа Інструмент Особливості
iOS UITextView + NSAttributedString або RichTextKit RichTextKit — open source, підтримка вставки, збільшення бінарника на ~800 КБ
Android SpannableStringBuilder + EditText або Markwon Markwon зручний для Markdown-прев'ю, легкий
Flutter flutter_quill Delta-формат, додає ~2 МБ, потребує конвертації на сервер

Зберігати текст на бекенді рекомендується в HTML або Markdown — нейтральні формати, клієнт конвертує при завантаженні. Це спрощує інтеграцію з веб-версією. Докладніше про Markdown.

Чому чернетки обов'язкові?

Користувач часто залишає екран створення поста ненавмисно — дзвінок, сповіщення, згортання застосунку. Без збереження чернетки втрата контенту становить до 40% (наші тести на 30 проєктах). Ми реалізуємо автозбереження з дебаунсом 1–2 секунди: кожна зміна тексту записується в UserDefaults (iOS) або DataStore (Android). Ключ — draft_post або draft_post_{channel_id} для мультиканальних застосунків. При відкритті редактора перевіряємо наявність чернетки та пропонуємо відновити. Після публікації або скидання — очищаємо. На Flutter використовуємо SharedPreferences або Hive з debounceTime(Duration(seconds: 1)).

Одного разу ми впроваджували публікацію в застосунку для блогерів. Користувачі вставляли довгі тексти з форматуванням. Виявили, що при автозбереженні в UserDefaults на iOS, якщо застосунок вивантажують з пам'яті, чернетка не зберігається. Перейшли на CoreData з фоновим контекстом — надійність збереження зросла до 99%.

Приклад чек-листа для чернеток
  • [ ] Автозбереження з debounce 1-2 сек
  • [ ] Відновлення при відкритті редактора
  • [ ] Очищення після публікації
  • [ ] Підтримка мультиканальності

Як реалізувати публікацію з поганим інтернетом?

Стандартний підхід — оптимістичне оновлення + черга повторів. При натисканні «Опублікувати»:

  1. Генеруємо локальний client_post_id (UUID).
  2. Одразу додаємо пост у стрічку зі статусом pending (сірий індикатор).
  3. Відправляємо запит на сервер. При успіху — замінюємо ID, прибираємо індикатор.
  4. При помилці — показуємо статус «Не відправлено» з кнопкою «Повторити».

На Android для повторів при відновленні мережі використовуємо WorkManager з NetworkConstraint, на iOS — BGTaskScheduler або NWPathMonitor. Це скорочує кількість втрачених публікацій на 30–50% порівняно з синхронною відправкою. Порівняння підходів:

Критерій Синхронна публікація Оптимістичне оновлення
Час відгуку для користувача 2-5 секунд при слабкому інтернеті Миттєве (локальне)
Втрати даних при помилці 100% 0% (пост залишається в pending)
Повтор при відновленні мережі Вручну Автоматично через WorkManager/BGTask

Перед деплоєм проводимо тестування офлайн-сценаріїв: відключення інтернету, перемикання режимів, симуляція тайм-ауту. Це дозволяє виявити гонки та покращити UX.

Валідація та обмеження

Ліміт символів відображаємо лічильником (підхід Twitter: червоний мінус після перевищення). Кнопка публікації активна лише при text.trimmingCharacters(in: .whitespacesAndNewlines).count > 0. Згадування (@username) та хештеги (#tag) парсимо regex з підсвіткою через NSAttributedString/AnnotatedString. Також підтримується вставка посилань з автоматичним розпізнаванням.

Що входить у роботу

  • Проєктування структури поста та API (специфікація GraphQL або REST)
  • Реалізація редактора з автозбереженням чернеток
  • Логіка публікації з оптимістичним оновленням та retry
  • Обробка помилок та повтор при відновленні мережі
  • Валідація контенту та відображення лічильника
  • Тестування офлайн-сценаріїв на реальних пристроях з різними версіями ОС
  • Документація API та передача доступів (TestFlight, Google Play Console)
  • Навчання команди замовника та підтримка 1 місяць

Терміни та вартість

Вартість розраховується індивідуально залежно від складності. Орієнтовний термін: простий редактор з чернеткою та retry — 2–3 дні, з форматуванням та згадуваннями — 5–7 днів. Для точної оцінки зв'яжіться з нами — ми проаналізуємо вимоги та запропонуємо оптимальне рішення. Отримайте консультацію: ми гарантуємо якість та досвід понад 5 років.