# VAST Реклама в Flutter Этот проект демонстрирует интеграцию VAST (Video Ad Serving Template) рекламы в Flutter приложение. ## Возможности - Загрузка VAST рекламы из локального XML-файла - Загрузка VAST рекламы с сервера - Поддержка пропуска рекламы после определенного времени - Обработка кликов по рекламе - Прогресс-бар для отображения времени воспроизведения - Fallback на локальный файл при ошибке загрузки с сервера ## Структура проекта ``` lib/ ├── vast_ad_model.dart # Модели данных для VAST рекламы ├── vast_ad_service.dart # Сервис для загрузки VAST рекламы ├── vast_ad_player.dart # Виджет для воспроизведения VAST рекламы ├── simple_video_page.dart # Основная страница с локальной VAST рекламой ├── vast_server_video_page.dart # Страница с загрузкой VAST с сервера └── main.dart # Главный файл приложения assets/ ├── vast_ad.xml # Локальный VAST XML-файл └── example_vast_server.xml # Пример XML для размещения на сервере ``` ## Использование ### 1. Локальная VAST реклама Реклама загружается из файла `assets/vast_ad.xml`: ```dart final vastAd = await VastAdService.loadVastAdFromAssets('assets/vast_ad.xml'); ``` ### 2. VAST реклама с сервера Реклама загружается с указанного URL: ```dart final vastAd = await VastAdService.loadVastAdFromUrl('https://your-server.com/vast_ad.xml'); ``` ### 3. Воспроизведение рекламы ```dart VastAdPlayer( vastAd: vastAd, onAdComplete: () { // Реклама завершена }, onAdError: () { // Ошибка воспроизведения }, onAdClick: () { // Клик по рекламе }, ) ``` ## Формат VAST XML Поддерживается VAST 4.0 формат. Пример структуры: ```xml SSIpfEA8qYq7 https://example.com/impression 00:00:15 ``` ## Настройка для сервера 1. Разместите XML-файл на вашем сервере 2. Обновите URL в `vast_server_video_page.dart`: ```dart static const String _vastAdUrl = 'https://your-server.com/vast_ad.xml'; ``` 3. Убедитесь, что сервер возвращает правильный Content-Type: `application/xml` ## Зависимости ```yaml dependencies: flutter: sdk: flutter video_player: xml: ^6.5.0 http: ^1.1.0 ``` ## Особенности - **Пропуск рекламы**: Кнопка пропуска появляется через время, указанное в `skipTime` - **Прогресс-бар**: Отображает прогресс воспроизведения рекламы - **Обработка ошибок**: При ошибке загрузки с сервера используется локальный fallback - **Жизненный цикл**: Корректная обработка паузы/возобновления при смене состояния приложения ## Тестирование 1. Запустите приложение: `flutter run` 2. Выберите вкладку "VAST Локальная" для тестирования локальной рекламы 3. Выберите вкладку "VAST Сервер" для тестирования загрузки с сервера ## Примечания - Убедитесь, что видео-файл доступен по указанному URL - Для продакшена настройте правильные URL для загрузки рекламы - Добавьте обработку ошибок сети и таймаутов - Рассмотрите добавление кэширования рекламы для улучшения производительности