Kaydırılan banner'lar için satır içi uyarlanabilir banner kullanma

Uyarlanabilir banner'lar, reklam boyutunu her cihaz için optimize ederek performansı en üst düzeye çıkaran yeni nesil duyarlı reklamlardır. Yalnızca sabit yükseklikleri destekleyen sabit boyutlu banner'ların geliştirilmiş hali olan uyarlanabilir banner'lar, geliştiricilerin reklam genişliğini belirlemesine ve bunu optimum reklam boyutunu belirlemek için kullanmasına olanak tanır.

Satır içi uyarlanabilir banner'lar, en iyi reklam boyutunu seçmek için sabit yükseklikler yerine maksimum yükseklikleri kullanır. Bu sayede performansı artırma fırsatları elde edersiniz.

Satır içi uyarlanabilir banner'lar ne zaman kullanılır?

Satır içi uyarlanabilir banner'lar, sabit uyarlanabilir banner'lara kıyasla daha büyük ve daha uzun banner'lardır. Yükseklikleri değişkendir ve cihaz ekranı kadar uzun olabilirler.

Kaydırılabilir içeriğe yerleştirilmek üzere tasarlanmıştır. Örneğin:

Ön koşullar

Devam etmeden önce Google Mobile Ads Flutter Plugin uygulamasını kurun.

Başlamadan önce

Uygulamanızda uyarlanabilir banner'ları kullanırken aşağıdaki noktalara dikkat edin:

  • Google Mobile Ads Flutter Plugin'ın en yeni sürümünü ve AdMob Uyumlulaştırması'nı kullanıyorsanız uyumlulaştırma bağdaştırıcılarınızın en yeni sürümlerini kullandığınızdan emin olun.

  • Satır içi uyarlanabilir banner boyutları, mevcut genişliğin tamamı kullanıldığında en iyi performansı verecek şekilde tasarlanmıştır. Çoğu durumda bu, kullanılan cihaz ekranının tam genişliği olur. Geçerli güvenli alanları hesaba katmayı unutmayın.

  • Reklam boyutunu öğrenmek için kullanılan yöntemler şunlardır:

    • AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(int width)
    • AdSize.getLandscapeInlineAdaptiveBannerAdSize(int width)
    • AdSize.getPortraitInlineAdaptiveBannerAdSize(int width)
    • AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight)
  • Satır içi uyarlanabilir banner API'leri kullanılırken Google Mobile Ads Flutter Plugin, belirtilen genişlikte ve satır içi işaretine sahip bir AdSize döndürür. Kullandığınız API'ye bağlı olarak yükseklik sıfır veya maxHeight olur. Reklamın gerçek yüksekliği, reklam döndürüldüğünde kullanılabilir hale gelir.

  • Satır içi uyarlanabilir banner, kaydırılabilir içeriğe yerleştirilmek üzere tasarlanmıştır. Banner, API'ye bağlı olarak cihaz ekranı kadar uzun olabilir veya maksimum yükseklikle sınırlanabilir.

Uygulama

Basit bir satır içi uyarlanabilir banner uygulamak için aşağıdaki adımları takip edin.

  1. Satır içi uyarlanabilir banner reklam boyutu alın. Aldığınız boyut, uyarlanabilir banner'ı talep etmek için kullanılır. Uyarlanabilir reklam boyutunu elde etmek için şunları yaptığınızdan emin olun:
    1. Kullanılan cihazın genişliğini yoğunluktan bağımsız piksel cinsinden alın veya ekranın tam genişliğini kullanmak istemiyorsanız kendi genişliğinizi ayarlayın. Ekran genişliğini öğrenmek için MediaQuery.of(context) kullanabilirsiniz.
    2. Geçerli yön için satır içi uyarlanabilir bir AdSize nesnesi almak üzere reklam boyutu sınıfında uygun statik yöntemleri (ör. AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(int width)) kullanın.
    3. Banner'ın yüksekliğini sınırlamak istiyorsanız statik yöntemi AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight) kullanabilirsiniz.
  2. Reklam birimi kimliğiniz, uyarlanabilir reklam boyutu ve bir reklam isteği nesnesiyle BannerAd nesnesi oluşturun.
  3. Reklamı yükleyin.
  4. onAdLoaded geri çağırma işlevinde, güncellenen platform reklam boyutunu almak ve AdWidget kapsayıcı yüksekliğini güncellemek için BannerAd.getPlatformAdSize() kullanın.

Kod örneği

Aşağıda, ekranın genişliğine sığacak şekilde satır içi uyarlanabilir banner yükleyen ve iç kısımları hesaba katan örnek bir widget verilmiştir:

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;
  BannerAd? _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 = BannerAd(
      // TODO: replace this test ad unit with your own ad unit.
      adUnitId: 'ca-app-pub-3940256099942544/9214589741',
      size: size,
      request: AdRequest(),
      listener: BannerAdListener(
        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.
          BannerAd bannerAd = (ad as BannerAd);
          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();
  }
}