Реализация формы обратной связи в мобильном приложении
Форма обратной связи — это канал, через который разработчики получают информацию о проблемах до того, как они появляются в отзывах App Store. Пользователь, который нашёл куда написать прямо внутри приложения, с меньшей вероятностью поставит 1 звезду публично. Но плохо реализованная форма — с долгой загрузкой или потерей текста при поворотё экрана — хуже её отсутствия.
Что важно в реализации
Сохранение состояния
Пользователь написал три абзаца, получил звонок, вернулся в приложение — и текст исчез. Это ломает желание писать. На iOS сохраняем черновик в UserDefaults при каждом изменении:
textView.delegate = self
func textViewDidChange(_ textView: UITextView) {
UserDefaults.standard.set(textView.text, forKey: "feedback_draft")
}
При открытии формы восстанавливаем. Очищаем только после успешной отправки.
Автоматическое прикрепление диагностики
Пустое сообщение «всё плохо» бесполезно для разработчика. При отправке автоматически прикрепляем контекст: версия приложения, версия ОС, модель устройства, user ID (если авторизован). Пользователь это не заполняет — данные собираются программно.
// Android: формируем метаданные для отправки
val metadata = mapOf(
"app_version" to BuildConfig.VERSION_NAME,
"os_version" to Build.VERSION.RELEASE,
"device_model" to "${Build.MANUFACTURER} ${Build.MODEL}",
"user_id" to userRepository.getCurrentUserId()
)
Доставка сообщений
Способы отправки зависят от инфраструктуры:
- SMTP через backend — самый распространённый, поддержка получает письмо на почту
- Webhook в Slack/Telegram — удобно для небольших команд, сообщение видно сразу
- Интеграция с helpdesk (Zendesk, Freshdesk) — для продуктов с выделенной поддержкой
Прямую отправку email из мобильного приложения через MFMailComposeViewController (iOS) или Intent.ACTION_SENDTO (Android) лучше избегать — зависит от наличия почтового клиента на устройстве и не даёт централизованного хранения обращений.
Подтверждение получения
После отправки — простое уведомление: «Сообщение получено, ответим в течение 24 часов». Если форма используется как support-канал, полезно генерировать ticket ID и дать пользователю возможность отслеживать статус.
Процесс работы
Определяем назначение формы: сбор фидбека по UX, репорт багов, обращение в поддержку или всё вместе. От этого зависит набор полей и маршрутизация.
Проектируем UI: одно текстовое поле + категория (опционально) + кнопка отправки. Сложные формы с 10 полями пользователи не заполняют.
Реализация с сохранением черновика, автосбором метаданных и выбранным каналом доставки.
Тестирование: потеря сети во время отправки, очень длинный текст, спецсимволы.
Ориентиры по срокам
Простая форма с отправкой на email — 1–2 дня. Форма с интеграцией в helpdesk, категоризацией и историей обращений — 3–5 дней.







