Август '26. Опросы внутри приложения
Во Flutter SDK появилась поддержка интерактивных in-app форм. Новый формат позволяет запускать опросы прямо в мобильном приложении: собирать оценки и комментарии, менять содержание формы в зависимости от ответа и предлагать пользователю следующий шаг.
Формы можно показывать в форматах modal, bottom sheet и full screen.
Новые элементы формы
option-select — выбор оценки
Новый элемент option-select позволяет добавить в форму шкалу оценки от 1 до 5. Его можно использовать для оценки приложения, отдельной функции, покупки, доставки или другого этапа клиентского пути.
Для каждого варианта ответа можно определить дальнейшее поведение формы. Например, после высокой оценки сразу предложить пользователю перейти в магазин приложений, а после низкой — продолжить опрос.
Внешний вид шкалы можно адаптировать под дизайн приложения:
- выбрать цвета активных и неактивных оценок;
- изменить размер элементов;
- настроить расстояние между ними;
- сделать выбор оценки обязательным.
text-input — поле для комментария
Элемент text-input добавляет в форму многострочное текстовое поле для развернутой обратной связи. Для него можно настроить:
- текст подсказки внутри поля;
- обязательность заполнения;
- минимальную и максимальную длину ответа;
- отображение счётчика символов;
- цвет фона и оформление текста;
- размер поля и скругление углов;
- внутренние и внешние отступы.
Поле подходит для уточняющих вопросов: что именно не понравилось, с какой проблемой столкнулся пользователь или чего ему не хватает в приложении.
Форма меняется в зависимости от ответа
Для элементов формы появилась условная видимость visibleWhen. Она позволяет показывать текст, поле ввода, кнопку или другой элемент только тогда, когда ответ пользователя соответствует заданному условию.
Условия могут проверять конкретное значение, диапазон значений, наличие или отсутствие ответа. Несколько условий можно объединить по логике «выполнены все» или «выполнено хотя бы одно».
Например, в опросе об оценке приложения можно настроить такую логику:
- Пользователь выбирает оценку от 1 до 5.
- При оценке от 1 до 3 форма показывает поле «Расскажите, что можно улучшить».
- При оценке 4 или 5 дополнительный вопрос не появляется.
Благодаря этому форма учитывает ответы пользователя и постепенно открывает только релевантные вопросы.
Отправка формы и следующий шаг
Для кнопок и вариантов ответа появилось действие submit_form. Оно отправляет заполненную форму и запускает следующий сценарий. Перед отправкой Gravity Field проверяет обязательные поля и ограничения на длину ответа.
После успешной отправки можно выбрать дальнейший сценарий:
- закрыть форму;
- открыть следующий шаг кампании;
- оставить форму открытой и показать сообщение с благодарностью;
- открыть ссылку или deeplink;
- выбрать действие в зависимости от ответа пользователя.
Например, после оценки 4 или 5 пользователя можно направить в App Store или Google Play, а после оценки от 1 до 3 — сохранить комментарий и показать экран с благодарностью.
Событие и данные ответа
При отправке формы SDK создаёт пользовательское событие. Для опроса об оценке приложения рекомендуем использовать:
- тип события —
in-app-review-v1; - название —
In-app review submitted.
Тип и название задаются при настройке кампании. Чтобы ответы из разных запусков попадали в один отчёт, не меняйте in-app-review-v1 между версиями опроса.
В сырых данных отправленная форма выглядит так:
{
"type": "in-app-review-v1",
"name": "In-app review submitted",
"customProps": {
"rating": "2",
"feedback": "Не хватает истории заказов",
"campaignId": "campaign-id",
"experienceId": "experience-id"
}
}
Ответы находятся в customProps:
rating— выбранная оценка;feedback— текстовый комментарий;campaignId— кампания, в которой была отправлена форма;experienceId— сценарий/experience кампании, который видел пользователь.
Gravity Field добавляет идентификаторы кампании и варианта автоматически. Названия полей с ответами соответствуют именам, заданным для элементов формы.
Как собрать ответы из сырых данных
В CSV-выгрузке тип события находится в колонке eventType, название — в eventName, а содержимое customProps записывается в eventProperties как JSON.
После загрузки CSV в таблицу raw_events ответы можно извлечь, например, таким запросом для ClickHouse:
select
moscowTime as submitted_at,
uid,
toUInt8OrNull(JSONExtractString(eventProperties, 'rating')) as rating,
if(
JSONHas(eventProperties, 'feedback'),
JSONExtractString(eventProperties, 'feedback'),
null
) as feedback,
coalesce(
nullIf(JSONExtractString(eventProperties, 'campaignId'), ''),
nullIf(campaignId, '')
) as campaign_id,
coalesce(
nullIf(JSONExtractString(eventProperties, 'experienceId'), ''),
nullIf(experienceId, '')
) as experience_id
from raw_events
where eventType = 'in-app-review-v1'
order by submitted_at desc;
Запрос возвращает одну строку на каждую отправленную форму. По результату можно считать среднюю оценку, распределение ответов, долю пользователей с комментарием и сравнивать данные между кампаниями или experience.
В событие попадают только поля, которые были показаны пользователю. Поэтому при высокой оценке скрытого поля feedback в eventProperties не будет — запрос вернёт NULL. Если поле было показано, но осталось незаполненным и не являлось обязательным, оно передаётся как пустая строка.
Подробнее о структуре CSV, доступе к файлам и подготовке staging-таблицы: Экспорт сырых данных и Как воспроизвести отчёты из raw data.
Больше сценариев для мобильных коммуникаций
In-app формы подходят не только для оценки приложения. С их помощью можно собирать мнение о новой функции, уточнять предпочтения, проводить короткие исследования и запрашивать обратную связь после целевого действия — например покупки, доставки или обращения в поддержку.
Новые возможности доступны во Flutter SDK 0.22.2 и более поздних версиях.