Utiliser des bannières adaptatives intégrées pour les bannières à faire défiler

Sélectionnez la plate-forme : Android (bêta) Nouveau Android iOS Flutter

Les bannières adaptatives constituent la nouvelle génération d'annonces responsives. Elles permettent de maximiser les performances en optimisant la taille des annonces pour chaque appareil. Véritable progrès par rapport aux bannières de taille fixe qui ne toléraient que des hauteurs fixes, les bannières adaptatives permettent aux développeurs de définir la largeur de l'annonce, utilisée pour déterminer la taille optimale.

Pour choisir la meilleure taille d'annonce, les bannières adaptatives intégrées utilisent la hauteur maximale plutôt qu'une hauteur fixe. Cela permet d'améliorer les performances.

Quand utiliser les bannières adaptatives intégrées ?

Les bannières adaptatives intégrées sont plus grandes et plus larges que les bannières adaptatives ancrées. Leur hauteur est variable et peut atteindre celle de l'écran de l'appareil.

Elles sont destinées à être diffusées dans du contenu à faire défiler, par exemple :

Prérequis

Avant de commencer

Lorsque vous implémentez des bannières adaptatives dans votre application, tenez compte des points suivants :

  • Assurez-vous d'utiliser la dernière version de Google Mobile Ads Flutter Plugin et, si vous utilisez la médiation, les dernières versions de vos adaptateurs de médiation.

  • Les bannières adaptatives intégrées sont plus efficaces lorsqu'elles utilisent toute la largeur disponible. Dans la plupart des cas, il s'agit de la largeur totale de l'écran de l'appareil utilisé. Veillez à tenir compte des zones de sécurité applicables.

  • Vous devrez peut-être mettre à jour ou créer des éléments de campagne pour utiliser des tailles adaptatives. En savoir plus.

  • Les méthodes permettant d'obtenir la taille de l'annonce sont les suivantes :

    • AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(int width)
    • AdSize.getLandscapeInlineAdaptiveBannerAdSize(int width)
    • AdSize.getPortraitInlineAdaptiveBannerAdSize(int width)
    • AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight)
  • Lorsque vous utilisez les API de bannières adaptatives intégrées, Google Mobile Ads Flutter Plugin renvoie un AdSize avec la largeur donnée et un indicateur intégré. La hauteur est égale à zéro ou à maxHeight, selon l'API que vous utilisez. La hauteur réelle de l'annonce est disponible lorsqu'elle est renvoyée.

  • Une bannière adaptative intégrée est conçue pour être placée dans du contenu à faire défiler. La hauteur de la bannière peut atteindre celle de l'écran de l'appareil ou être limitée par une hauteur maximale, selon l'API.

Implémentation

Suivez les étapes ci-dessous pour implémenter une bannière adaptative intégrée simple.

  1. Obtenez une taille de bannière adaptative intégrée. La taille obtenue sera utilisée pour demander la bannière adaptative. Pour déterminer la taille de l'annonce adaptative :
    1. Obtenez la largeur de l'appareil utilisé en pixels indépendants de la densité, ou paramétrez votre propre largeur si vous ne souhaitez pas utiliser la largeur totale de l'écran. Vous pouvez utiliser MediaQuery.of(context) pour obtenir la largeur de l'écran.
    2. Utilisez les méthodes statiques appropriées concernant la classe de taille de l'annonce, telles que AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(int width) pour obtenir un objet AdSize adaptatif intégré pour l'orientation actuelle.
    3. Si vous souhaitez limiter la hauteur de la bannière, vous pouvez utiliser la méthode statique AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight).
  2. Créez un objet AdManagerBannerAd avec l'ID de votre bloc d'annonces, la taille de l'annonce adaptative et un objet de demande d'annonce.
  3. Chargez l'annonce.
  4. Dans le rappel onAdLoaded, utilisez AdManagerBannerAd.getPlatformAdSize() pour obtenir la taille de l'annonce de la plate-forme mise à jour et mettre à jour la hauteur du conteneur AdWidget.

Exemple de code

Voici un exemple de widget qui charge une bannière adaptative intégrée pour l'adapter à la largeur de l'écran, en tenant compte des marges intérieures :

import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

/// This example demonstrates inline adaptive banner ads.
///
/// Loads and shows an inline adaptive banner ad in a scrolling view,
/// and reloads the ad when the orientation changes.
class InlineAdaptiveExample extends StatefulWidget {
  @override
  _InlineAdaptiveExampleState createState() => _InlineAdaptiveExampleState();
}

class _InlineAdaptiveExampleState extends State<InlineAdaptiveExample> {
  static const _insets = 16.0;
  AdManagerBannerAd? _inlineAdaptiveAd;
  bool _isLoaded = false;
  AdSize? _adSize;
  late Orientation _currentOrientation;

  double get _adWidth => MediaQuery.of(context).size.width - (2 * _insets);

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    _currentOrientation = MediaQuery.of(context).orientation;
    _loadAd();
  }

  void _loadAd() async {
    await _inlineAdaptiveAd?.dispose();
    setState(() {
      _inlineAdaptiveAd = null;
      _isLoaded = false;
    });

    // Get an inline adaptive size for the current orientation.
    AdSize size = AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(
        _adWidth.truncate());

    _inlineAdaptiveAd = AdManagerBannerAd(
      // TODO: replace with your own ad unit.
      adUnitId: '/21775744923/example/adaptive-banner',
      size: size,
      request: AdManagerAdRequest(),
      listener: AdManagerBannerAdListener(
        onAdLoaded: (Ad ad) async {
          print('Inline adaptive banner loaded: ${ad.responseInfo}');

          // After the ad is loaded, get the platform ad size and use it to
          // update the height of the container. This is necessary because the
          // height can change after the ad is loaded.
          AdManagerBannerAd bannerAd = (ad as AdManagerBannerAd);
          final AdSize? size = await bannerAd.getPlatformAdSize();
          if (size == null) {
            print('Error: getPlatformAdSize() returned null for $bannerAd');
            return;
          }

          setState(() {
            _inlineAdaptiveAd = bannerAd;
            _isLoaded = true;
            _adSize = size;
          });
        },
        onAdFailedToLoad: (Ad ad, LoadAdError error) {
          print('Inline adaptive banner failedToLoad: $error');
          ad.dispose();
        },
      ),
    );
    await _inlineAdaptiveAd!.load();
  }

  /// Gets a widget containing the ad, if one is loaded.
  ///
  /// Returns an empty container if no ad is loaded, or the orientation
  /// has changed. Also loads a new ad if the orientation changes.
  Widget _getAdWidget() {
    return OrientationBuilder(
      builder: (context, orientation) {
        if (_currentOrientation == orientation &&
            _inlineAdaptiveAd != null &&
            _isLoaded &&
            _adSize != null) {
          return Align(
              child: Container(
            width: _adWidth,
            height: _adSize!.height.toDouble(),
            child: AdWidget(
              ad: _inlineAdaptiveAd!,
            ),
          ));
        }
        // Reload the ad if the orientation changes.
        if (_currentOrientation != orientation) {
          _currentOrientation = orientation;
          _loadAd();
        }
        return Container();
      },
    );
  }

  @override
  Widget build(BuildContext context) => Scaffold(
      appBar: AppBar(
        title: Text('Inline adaptive banner example'),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.symmetric(horizontal: _insets),
          child: ListView.separated(
            itemCount: 20,
            separatorBuilder: (BuildContext context, int index) {
              return Container(
                height: 40,
              );
            },
            itemBuilder: (BuildContext context, int index) {
              if (index == 10) {
                return _getAdWidget();
              }
              return Text(
                'Placeholder text',
                style: TextStyle(fontSize: 24),
              );
            },
          ),
        ),
      ));

  @override
  void dispose() {
    super.dispose();
    _inlineAdaptiveAd?.dispose();
  }
}