mnemo_cards/games/ads_example/README_VAST.md
2025-11-11 02:55:41 +03:00

149 lines
No EOL
5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 для загрузки рекламы
- Добавьте обработку ошибок сети и таймаутов
- Рассмотрите добавление кэширования рекламы для улучшения производительности