Flutter 4.3.0

Flutter 4.3.0

Важно: в процессе внедрения или обновления SDK используйте последнюю версию из таблицы Changelog.

Оглавление:

Сhangelog

Версия SDK

Дата

Изменения

1.0.3

09.2022

Исходная версия

2.0.0

11.2023

Обновлены нативные версии библиотек
iOS - 2.2.1
Android - 2.2.2

2.0.1

11.2023

Исправлена ошибка при вызове UXFLogListener.

2.1.1

02.2024

Обновлены нативные версии библиотек
iOS - 2.3.1
Android - 2.3.1

Обновлена минимальная версия для iOS - 12

2.8.1

10.2024

Обновлены нативные версии библиотек
iOS - 2.8.1
Android - 2.8.0

Android compileSDK 34

Замените устаревший вызов UxFeedback.setup на UxFeedbackWrapper.setup в Android.

2.8.2

12.2024

Исправлен баг со стороны библиотеки

2.9.4

03.2024

Обновите зависимость до последней версии.

iOS - 2.9.3
Android - 2.9.0

Новый блок в опросах - звезды ⭐️
Передача campaignId в методах CampaignListener

2.9.5

21.04.2025

Обновлен AGP
Поддержка SwiftPM

3.0.5

22.10.2025

iOS - 3.0.3
Android - 3.0.5

3.0.6

3.11.2025

Android: исправлена ошибка при добавлении изображения из галереи.

4.2.1

17.03.2026

iOS - 4.2.1
Android - 4.2.1

4.3.0

13.05.2026

Функция sendEvent больше не поддерживается. Вместо неё используйте startCampaign.

Обновлены нативные версии библиотек

Android 4.3.1
iOS 4.3.2

Руководство по настройке и интеграции библиотеки в проект Flutter

Управление формами производится в личном кабинете UX Feedback в который можно зайти по ссылке

В личном кабинете можно создавать, редактировать и запускать формы двух типов:

Slide-in - форма появляется внизу экрана

PopUp - форма появляется по центру экрана

Версии

Flutter UX Feedback использует нативные версии sdk

Актуальная версия библиотеки для iOS - 4.3.2

Актуальная версия библиотеки для Android - 4.3.1

Что стоит знать:

  1. Для prod и test версий приложения используются разные App_ID (подробнее ниже).

  2. Для запуска форм используются события, которые отправляются со стороны приложения. В личном кабинете можно настраивать показ форм через N секунд или N раз, после отправления Event. Также есть настройка “Показывать каждый раз” при отправлении Event.

  3. Для настройки дизайна форм, необходимо попросить дизайнера прописать стили

Установка

Добавьте зависимость в файл pubspec.yaml в вашем проекте:

dependencies: ux_feedback: 4.3.0

Установите плагин, выполнив в терминале приведенную ниже команду:

$ flutter pub get

Использование

import 'package:ux_feedback/ux_feedback.dart'; final _uxFeedback = UxFeedback(); _uxFeedback.setup(appID: 'App_ID');

Для Android необходимы дополнительные настройки

1. iOS

Для поддержки функции добавления изображений из галереи в опрос необходимо в файле info.plist добавить строку конфигурации запроса разрешения, если эта строка отсутствовала:

<key>NSPhotoLibraryUsageDescription</key> <string>Добавление изображений к форме</string>

2. Android

Перейдите в файл /android/build.gradle и добавьте репозиторий maven в allprojects:

allprojects { repositories { ... maven { url "https://nexus.uxfeedback.ru/repository/android-sdk-new/" } } }

Далее перейдите в файл /android/app/build.gradle и добавьте зависимость UXFeedback в depencies:

dependencies { ... // ... other project dependencies implementation 'ru.uxfeedback:sdk:4.3.1' }

Для работы SDK необходимо добавить следующие разрешения.

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

 

2.1. Java

android/src/.../MainApplication.java

import ru.uxfeedback.sdk.UxFeedbackWrapper

Затем проинициализируйте библиотеку в onCreate:

@Override public void onCreate() { super.onCreate(); // Получить App_ID можно в панели управления UX Feedback UxFeedbackWrapper.setup(this, "App_ID", null); }

2.2. Kotlin

android/src/.../MyApplication.kt

import ru.uxfeedback.sdk.UxFeedbackWrapper

Затем проинициализируйте библиотеку в onCreate:

class MyApplication : FlutterApplication() { override fun onCreate() { super.onCreate() // Получить App_ID можно в панели управления UX Feedback UxFeedbackWrapper.setup(this.application, "App_ID", null); } }


android/app/build.gradle

defaultConfig { //.... manifestPlaceholders = [ applicationName: ".MyApplication" ] }


2.3. Настройка styles

Для работы SDK необходимо использовать тему Theme.AppCompat

В файле android/app/src/main/res/values/styles.xml родительская тема должна быть Theme.AppCompat

Пример

<style name="LaunchTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowBackground">@drawable/launch_background</item> </style> <style name="NormalTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowBackground">?android:colorBackground</item> </style>

Так же необходимо сделать во всех файлах стилей используемых в вашем приложении, например android/app/src/main/res/values-night/styles.xmlиспользовать тему Theme.AppCompat.DayNight.NoActionBar

В android/app/src/main/AndroidManifest.xml необходимо указать theme для activity и meta-data

<activity ... android:theme="@style/LaunchTheme"> <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" /> </activity>

3. Конфигурирование библиотеки

Для того чтобы задавать нужные параметры работы библиотеки используйте метод setSettings:

_uxFeedback.setSettings( UXFeedbackSettings( globalDelayTimer: 1800, // Время показа между кампаниями. slideInUiBlocked: false, // Блокировка прочего ui пока показывается модальное окно фидбека. debugEnabled: false, // Включение режима логирования. socketTimeout: 5, // Время ожидания при установлении соединения SDK к серверу UXFeedback в секундах. retryTimeout: 300, // Время ожидания ответа сервера UXFeedback при успешном соединении в секундах. retryCount: 3, // Количество повторных попыток отправки данных в штуках. fieldsEventEnabled: false, // Отслеживания информации о значениях заполняемых полей. closeOnSwipe: false, // Только для iOS закрыть или свернуть форму при смахивании (swipe) вниз. slideInUiBlackout: UXFslideInUiBlackout( // Настройки фона при показе формы в режиме slideIn. color: Colors.black, // Цвет фона в opacity: 100, // Прозрачность от 0 до 100 blur: 10, // Размытие от 0 до 100 ), popupUiBlackout: UXFpopupUiBlackout( // Настройки фона при показе формы в режиме popUp color: Colors.black, // Цвет фона в opacity: 100, // Прозрачность от 0 до 100 blur: 10, // Размытие от 0 до 100 ), ), );

4. Настройка дизайна форм

Для изменения дизайна формы необходимо передать объект типа UXFTheme в метод setTheme:

_uxFeedback.setTheme(UXFTheme( text03Color: Color(0xFF8B90A0), inputBorderColor: Color(0xFFD3D4D8), iconColor: Color(0xFFB5B8C2), btnBgColorActive: Color(0xFF1983C8), btnBorderRadius: 4, errorColorSecondary: Color(0xFFF4A0A3), errorColorPrimary: Color(0xFFE84047), mainColor: Color(0xFF0076C2), controlBgColorActive: Color(0xFFDBF1FF), formBorderRadius: 8, inputBgColor: Color(0xFFF3F3F3), text01Color: Color(0xFF232735), controlBgColor: Color(0xFFF3F3F3), controlIconColor: Color(0xFFFFFFFF), btnBgColor: Color(0xFF0076C2), text02Color: Color(0xFF505565), btnTextColor: Color(0xFFFFFFFF), bgColor: Color(0xFFFFFFFF), fontH1: UXFFont(size: 22), fontH2: UXFFont(size: 17), fontP1: UXFFont(size: 17), fontP2: UXFFont(size: 14), fontBtn: UXFFont(size: 16), ));

Параметры цветов необходимо взять из файла, который сформируют дизайнеры по ссылке: Гайды по стилям

5. Запуск форм (Events)

Запуск кампании

В необходимом месте приложения вы можете стартовать кампанию вызвав метод startCampaign:

// Допустимые символы для названия события event_name: “Aa-Zz, 0-9, _”. Рекомендуем не использовать пробелы. _uxFeedback.startCampaign(event: 'event_name')

Остановка кампании

В необходимом месте приложения вы можете остановить кампанию вызвав метод stopCampaign:

_uxFeedback.stopCampaign();

Если кампания не была показана - ее показ отменится, если была показана - будет закрыта.

5.1. Показ формы с дополнительными атрибутами

При показе формы существует также возможность таргетироватся на дополнительные атрибуты которые задаются в личном кабинете. При использовании SDK необходимо создать экземпляр класса UXFBAttributesBuilder, используя соответствующие методы добавить в него значения атрибутов, после чего вызвать метод build()

_uxFeedback.startCampaign( event: "event", attributes: [ UXFeedbackAttribute("stringValue", "value"), UXFeedbackAttribute("intValue", 1), UXFeedbackAttribute("doubleValue", 36.6), UXFeedbackAttribute("booleanValue", true), UXFeedbackAttribute("dateValue", DateTime.now()), ], )

6. Отслеживание событий

При необходимости есть возможность отслеживать события как показ кампании пользователю или когда кампания пройдена/скрыта:

_uxFeedback.setCampaignListener( onCampaignLoaded: (bool success) { print('onCampaignLoaded $success'); }, onCampaignReceiveError: (String message) { print('onCampaignReceiveError $message'); } onCampaignShow: (int campaignId, String eventName) { print('onCampaignShow: $eventName'); }, onCampaignFinish: (int campaignId, String eventName) { print('onCampaignFinish: $eventName'); }, onCampaignEventSend: (int campaignId) { print('onCampaignEventSend: $campaignId'); }, onCampaignTerminate: (int campaignId, String eventName, int terminatedPage, int totalPages) { print('onCampaignTerminate: $eventName, $terminatedPage, $totalPages'); }, onCampaignAnswered: (int campaignId, String fieldValues) { print('onCampaignAnswered: $campaignId, $fieldValues'); } );

Так же есть возможность использовать сообщения, генерируемые SDK. Например, с целью отладки или записи в общий журнал приложения.

Для этого в пользовательском приложении следует вызывать следующий метод:

_uxFeedback.setLogListener( onLogReceive: (String message) { print('onLogReceive $message'); }, );

7. Отправка дополнительных параметров (Properties)

При необходимости есть возможность отправить дополнительные данные, вместе с ответом, например User_id, Email, Регион или любые другие. Для этого вызовите функцию setParameters:

_uxFeedback.setProperties( { 'userId': 21, 'email': '.....', // ... } );

8. Отладка приложения

Для того чтобы включить режим debug вам нужно указать в настройке библиотеки debugEnabled: true

_uxFeedback.setSettings( UXFeedbackSettings(debugEnabled: true) );