배너

배너 광고는 앱 레이아웃의 기기 화면 상단이나 하단에 게재됩니다. 사용자가 앱과 상호작용하는 동안 화면에 머무르고 일정 시간이 지나면 자동으로 새로고침될 수 있습니다.

이 가이드에서는 Ad Manager의 배너 광고를 Flutter 앱에 통합하는 방법을 보여줍니다. 코드 스니펫과 안내 외에도 배너 크기 조정에 대한 정보가 포함되어 있습니다.

항상 테스트 광고로 테스트

앱을 빌드하고 테스트할 때는 실제 프로덕션 광고 대신 테스트 광고를 사용하세요. 이렇게 하지 않으면 계정이 정지될 수 있습니다.

테스트 광고를 로드하는 가장 쉬운 방법은 배너 광고 테스트 전용 광고 단위 ID를 사용하는 것입니다.

  • /6499/example/banner

테스트 광고 단위는 모든 요청에 대해 테스트 광고를 반환하도록 구성되며, 코딩, 테스트, 디버깅 중에 앱에서 자유롭게 사용할 수 있습니다. 앱을 게시하기 전에 이 ID를 자체 광고 단위 ID로 바꿔야 합니다.

광고 로드

다음 예에서는 배너 광고를 인스턴스화합니다.

class BannerExampleState extends State<BannerExample> {
  AdManagerBannerAd? _bannerAd;
  bool _isLoaded = false;

  // TODO: replace this test ad unit with your own ad unit.
  final adUnitId = '/6499/example/banner';

  /// Loads a banner ad.
  void loadAd() {
    _bannerAd = AdManagerBannerAd(
      adUnitId: adUnitId,
      request: const AdManagerAdRequest(),
      size: AdSize.banner,
      listener: AdManagerBannerAdListener(
        // Called when an ad is successfully received.
        onAdLoaded: (ad) {
          debugPrint('$ad loaded.');
          setState(() {
            _isLoaded = true;
          });
        },
        // Called when an ad request failed.
        onAdFailedToLoad: (ad, err) {
          debugPrint('AdManagerBannerAd failed to load: $error');
          // Dispose the ad here to free resources.
          ad.dispose();
        },
      ),
    )..load();
  }
}

아래 표에는 표준 배너 크기가 나와 있습니다.

크기(dp(너비x높이)) 설명 AdSize 상수
320x50 표준 배너 banner
320x100 대형 배너 largeBanner
320x250 중형 직사각형 mediumRectangle
468 x 60 풀사이즈 배너 fullBanner
728x90 리더보드 leaderboard
제공된 너비 x 적응형 높이 적응형 배너 해당 사항 없음

맞춤 배너 크기를 정의하려면 원하는 AdSize를 설정합니다.

final AdSize adSize = AdSize(300, 50);

AdManagerBannerAdListener를 사용하면 광고 로드와 같은 수명 주기 이벤트를 수신 대기할 수 있습니다. 이 예에서는 각 메서드를 구현하고 콘솔에 메시지를 기록합니다.

class BannerExampleState extends State<BannerExample> {
  AdManagerBannerAd? _bannerAd;
  bool _isLoaded = false;

  // TODO: replace this test ad unit with your own ad unit.
  final adUnitId = '/6499/example/banner';


  /// Loads a banner ad.
  void loadAd() {
    _bannerAd = AdManagerBannerAd(
      adUnitId: adUnitId,
      request: const AdManagerAdRequest(),
      size: AdSize.banner,
      listener: AdManagerBannerAdListener(
        // Called when an ad is successfully received.
        onAdLoaded: (ad) {
          debugPrint('$ad loaded.');
          setState(() {
            _isLoaded = true;
          });
        },
        // Called when an ad request failed.
        onAdFailedToLoad: (ad, err) {
          debugPrint('AdManagerBannerAd failed to load: $error');
          // Dispose the ad here to free resources.
          ad.dispose();
        },
        // Called when an ad opens an overlay that covers the screen.
        onAdOpened: (Ad ad) {},
        // Called when an ad removes an overlay that covers the screen.
        onAdClosed: (Ad ad) {},
        // Called when an impression occurs on the ad.
        onAdImpression: (Ad ad) {},
      ),
    )..load();
  }
}

배너 광고 표시

AdManagerBannerAd를 위젯으로 표시하려면 load()를 호출한 후 지원되는 광고로 AdWidget를 인스턴스화해야 합니다. load()를 호출하기 전에 위젯을 만들 수 있지만 위젯 트리에 추가하기 전에 load()를 호출해야 합니다.

AdWidget는 Flutter의 위젯 클래스에서 상속되며 다른 위젯처럼 사용할 수 있습니다. iOS에서는 지정된 너비와 높이의 위젯에 위젯을 배치해야 합니다. 그렇지 않으면 광고가 게재되지 않을 수 있습니다. AdManagerBannerAd는 광고와 일치하는 크기의 컨테이너에 배치할 수 있습니다.

...
if (_bannerAd != null) {
  Align(
    alignment: Alignment.bottomCenter,
    child: SafeArea(
      child: SizedBox(
        width: _bannerAd!.size.width.toDouble(),
        height: _bannerAd!.size.height.toDouble(),
        child: AdWidget(ad: _bannerAd!),
      ),
    ),
  )
}
...

더 이상 액세스할 필요가 없는 광고는 폐기해야 합니다. dispose()를 호출할 시점에 관한 권장사항은 AdWidget가 위젯 트리 또는 AdManagerBannerAdListener.onAdFailedToLoad() 콜백에서 삭제된 후입니다.

작업이 끝났습니다. 이제 앱에서 배너 광고를 게재할 수 있습니다.

Android 9 이하의 스크롤 제한

Google에서는 Android 9 이하를 실행하는 구형이거나 성능이 낮은 일부 기기에서 스크롤 뷰 내에 인라인 배너 광고를 표시할 때 성능이 최적화되지 않을 수 있다는 점을 알고 있습니다. 이러한 유형의 배너는 Android 10 이상에서만 사용하는 것이 좋습니다. 앵커 광고 배너와 같은 고정 위치 배너는 영향을 받지 않으며 모든 Android API 수준에서 최적의 성능으로 사용할 수 있습니다.