Нативные шаблоны в Dart

Выберите платформу: Android iOS Flutter

Нативные шаблоны — это полноценные представления кода для ваших нативных объявлений, разработанные для быстрой реализации и легкой модификации. С помощью нативных шаблонов плагин предоставляет вам готовые макеты Android и iOS, и вы можете настроить стиль нативных активов с помощью Dart API.

В этом руководстве показано, как использовать Dart API для стилизации представлений базовой платформы и визуализации рекламы.

Предпосылки

  • Flutter 2.4.0 или выше.

Всегда проводите тестирование с помощью тестовых объявлений

При создании и тестировании приложений убедитесь, что вы используете тестовые объявления, а не живые, производственные объявления. Самый простой способ загрузить тестовые объявления — использовать наш специальный идентификатор тестового рекламного блока для нативных объявлений:

андроид

ca-app-pub-3940256099942544/2247696110

iOS

ca-app-pub-3940256099942544/3986624511

Тестовые рекламные блоки настроены на возврат тестовых объявлений для каждого запроса, поэтому вы можете использовать их в своих приложениях при кодировании, тестировании и отладке — просто не забудьте заменить их на собственные идентификаторы рекламных блоков перед публикацией приложения.

Загрузить объявление

В следующем примере загружается нативное объявление с использованием нативного шаблона medium размера:

class NativeExampleState extends State<NativeExample> {
  NativeAd? nativeAd;
  bool _nativeAdIsLoaded = false;

 // TODO: replace this test ad unit with your own ad unit.
 final String _adUnitId = Platform.isAndroid
      ? 'ca-app-pub-3940256099942544/2247696110'
      : 'ca-app-pub-3940256099942544/3986624511';

  /// Loads a native ad.
  void loadAd() {
    _nativeAd = NativeAd(
        adUnitId: _adUnitId,
        listener: NativeAdListener(
          onAdLoaded: (ad) {
            debugPrint('$NativeAd loaded.');
            setState(() {
              _nativeAdIsLoaded = true;
            });
          },
          onAdFailedToLoad: (ad, error) {
            // Dispose the ad here to free resources.
            debugPrint('$NativeAd failed to load: $error');
            ad.dispose();
          },
        ),
        request: const AdRequest(),
        // Styling
        nativeTemplateStyle: NativeTemplateStyle(
            // Required: Choose a template.
            templateType: TemplateType.medium,
            // Optional: Customize the ad's style.
            mainBackgroundColor: Colors.purple,
            cornerRadius: 10.0,
            callToActionTextStyle: NativeTemplateTextStyle(
                textColor: Colors.cyan,
                backgroundColor: Colors.red,
                style: NativeTemplateFontStyle.monospace,
                size: 16.0),
            primaryTextStyle: NativeTemplateTextStyle(
                textColor: Colors.red,
                backgroundColor: Colors.cyan,
                style: NativeTemplateFontStyle.italic,
                size: 16.0),
            secondaryTextStyle: NativeTemplateTextStyle(
                textColor: Colors.green,
                backgroundColor: Colors.black,
                style: NativeTemplateFontStyle.bold,
                size: 16.0),
            tertiaryTextStyle: NativeTemplateTextStyle(
                textColor: Colors.brown,
                backgroundColor: Colors.amber,
                style: NativeTemplateFontStyle.normal,
                size: 16.0)))
      ..load();
  }
}

Доступные параметры стилей см. в разделах NativeTemplateStyle и NativeTemplateTextStyle .

Настроить рекламу

При настройке нативной рекламы с использованием нативных шаблонов конфигурация пользовательского интерфейса вашей рекламы будет находиться в классе NativeTemplateStyle , что позволит вам оформить всю нативную рекламу в коде Dart.

Размеры шаблона

Шаблоны собственных объявлений Flutter бывают двух типов: TemplateType.small и TemplateType.medium . Маленький шаблон идеально подходит для TableView или GridView , для рекламы в ленте или в любом месте, где вам нужен тонкий прямоугольный вид рекламы. Средний шаблон предназначен для просмотра страницы размером от половины до трех четвертей, что идеально подходит для целевых или всплывающих страниц.

Маленький

андроид

iOS
Середина

андроид

iOS

События нативной рекламы

Чтобы получать уведомления о событиях, связанных с взаимодействием с нативной рекламой, используйте свойство listener рекламы. Затем реализуйте NativeAdListener для получения обратных вызовов событий рекламы.

class NativeExampleState extends State<NativeExample> {
  NativeAd? _nativeAd;
  bool _nativeAdIsLoaded = false;

 // TODO: replace this test ad unit with your own ad unit.
 final String _adUnitId = Platform.isAndroid
      ? 'ca-app-pub-3940256099942544/2247696110'
      : 'ca-app-pub-3940256099942544/3986624511';

  /// Loads a native ad.
  void loadAd() {
    _nativeAd = NativeAd(
        adUnitId: _adUnitId,
        listener: NativeAdListener(
          onAdLoaded: (ad) {
            print('$NativeAd loaded.');
            setState(() {
              _nativeAdIsLoaded = true;
            });
          },
          onAdFailedToLoad: (ad, error) {
            // Dispose the ad here to free resources.
            print('$NativeAd failedToLoad: $error');
            ad.dispose();
          },
          // Called when a click is recorded for a NativeAd.
          onAdClicked: (ad) {},
          // Called when an impression occurs on the ad.
          onAdImpression: (ad) {},
          // Called when an ad removes an overlay that covers the screen.
          onAdClosed: (ad) {},
          // Called when an ad opens an overlay that covers the screen.
          onAdOpened: (ad) {},
          // For iOS only. Called before dismissing a full screen view
          onAdWillDismissScreen: (ad) {},
          // Called when an ad receives revenue value.
          onPaidEvent: (ad, valueMicros, precision, currencyCode) {},
        ),
        request: const AdRequest(),
        // Styling
        nativeTemplateStyle: NativeTemplateStyle(
            // Required: Choose a template.
            templateType: TemplateType.medium,
            // Optional: Customize the ad's style.
            mainBackgroundColor: Colors.purple,
            cornerRadius: 10.0,
            callToActionTextStyle: NativeTemplateTextStyle(
                textColor: Colors.cyan,
                backgroundColor: Colors.red,
                style: NativeTemplateFontStyle.monospace,
                size: 16.0),
            primaryTextStyle: NativeTemplateTextStyle(
                textColor: Colors.red,
                backgroundColor: Colors.cyan,
                style: NativeTemplateFontStyle.italic,
                size: 16.0),
            secondaryTextStyle: NativeTemplateTextStyle(
                textColor: Colors.green,
                backgroundColor: Colors.black,
                style: NativeTemplateFontStyle.bold,
                size: 16.0),
            tertiaryTextStyle: NativeTemplateTextStyle(
                textColor: Colors.brown,
                backgroundColor: Colors.amber,
                style: NativeTemplateFontStyle.normal,
                size: 16.0)))
      ..load();
  }
}

Показать рекламу

Чтобы отобразить NativeAd как виджет, необходимо создать экземпляр AdWidget с поддерживаемой рекламой после вызова load() . Вы можете создать виджет до вызова load() , но load() необходимо вызвать до его добавления в дерево виджетов.

AdWidget наследует класс Widget Flutter и может использоваться как любой другой виджет. На iOS убедитесь, что вы поместили виджет в контейнер с указанной шириной и высотой. В противном случае ваша реклама может не отображаться.

// Small template
final adContainer = ConstrainedBox(
  constraints: const BoxConstraints(
    minWidth: 320, // minimum recommended width
    minHeight: 90, // minimum recommended height
    maxWidth: 400,
    maxHeight: 200,
  ),
  child: AdWidget(ad: _nativeAd!),
);

// Medium template
final adContainer = ConstrainedBox(
  constraints: const BoxConstraints(
    minWidth: 320, // minimum recommended width
    minHeight: 320, // minimum recommended height
    maxWidth: 400,
    maxHeight: 400,
  ),
  child: AdWidget(ad: _nativeAd!),
);

Удалить объявление

NativeAd должен быть удален, когда доступ к нему больше не нужен. Лучшая практика для вызова dispose() — после того, как AdWidget , связанный с нативной рекламой, удален из дерева виджетов и в обратном вызове AdListener.onAdFailedToLoad() .

Следующие шаги

Полный пример на GitHub

Нативные шаблоны