mnemo_cards/games/ads_example/README_VAST.md

149 lines
5 KiB
Markdown
Raw Permalink Normal View History

2025-11-10 23:55:41 +00:00
# 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
<?xml version="1.0" encoding="UTF-8"?>
<VAST version="4.0">
<Ad id="154517">
<InLine>
<AdServingId>SSIpfEA8qYq7</AdServingId>
<Impression>https://example.com/impression</Impression>
<Creatives>
<Creative id="1">
<Linear>
<Duration>00:00:15</Duration>
<MediaFiles>
<MediaFile id="1" delivery="progressive" type="video/mp4" width="1280" height="720">
<![CDATA[ https://example.com/video.mp4 ]]>
</MediaFile>
</MediaFiles>
<VideoClicks>
<ClickThrough>
<![CDATA[ https://example.com/click ]]>
</ClickThrough>
<ClickTracking>
<![CDATA[ https://example.com/tracking ]]>
</ClickTracking>
</VideoClicks>
<Extensions>
<Extension type="skipTime">
<![CDATA[ 00:08 ]]>
</Extension>
<Extension type="linkTxt">
<![CDATA[ Пропустить рекламу ]]>
</Extension>
</Extensions>
</Linear>
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>
```
## Настройка для сервера
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 для загрузки рекламы
- Добавьте обработку ошибок сети и таймаутов
- Рассмотрите добавление кэширования рекламы для улучшения производительности