Satır içi uyarlanabilir banner'lar

Uyarlanabilir banner'lar, yeni nesil duyarlı reklamlardır ve reklam boyutunu her cihaz için optimize ederek performansı artırır. Uyarlanabilir banner'lar, yalnızca sabit yükseklikleri destekleyen sabit boyut banner'lardan gelişmiş versiyonudur. Reklamverenler bu banner'lar için reklam genişliğini belirtebilir ve bu genişlik en uygun reklam boyutunu belirlemek için kullanılı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 edebilirsiniz.

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 geniş ve daha uzun banner'lardır. Değişken yükseklikte olan bu banner'lar cihaz ekranı kadar uzun olabilir.

Bu reklamlar, kaydırılabilir içeriğe yerleştirilmek için tasarlanmıştır. Örneğin:

Ön koşullar

Başlamadan önce

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

  • Google Mobile Ads SDK'sının en yeni sürümünü ve uyumlulaştırma 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 şekilde çalışacak şekilde tasarlanmıştır. Çoğu durumda bu, kullanılan cihazın ekranının tam genişliği olur. Geçerli güvenli alanları göz önünde bulundurduğunuzdan emin olun.

  • Uyarlanabilir boyutlarla çalışmak için mevcut satır öğelerini güncellemeniz veya yeni satır öğeleri oluşturmanız gerekebilir. Daha fazla bilgi edinin.

  • Reklam boyutunu alma yöntemleri ş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ıldığında Google Mobile Ads SDK'sı, belirtilen genişlik ve satır içi işareti içeren bir AdSize döndürür. Yükseklik, kullandığınız API'ye bağlı olarak sıfır veya maxHeight olur. Reklamın gerçek yüksekliği, döndürüldüğünde kullanılabilir hale gelir.

  • Satır içi uyarlanabilir banner'lar, 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ırlı olabilir.

Uygulama

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

  1. Satır içi uyarlanabilir banner reklam boyutu alın. Aldığınız boyut, uyarlanabilir banner'ı istemek için kullanılır. Uyarlanabilir reklam boyutunu almak için:
    1. Kullanılan cihazın genişliğini yoğunluktan bağımsız piksel olarak öğrenin veya ekranın tam genişliğini kullanmak istemiyorsanız kendi genişliğinizi ayarlayın. Ekran genişliğini almak için MediaQuery.of(context) değerini kullanabilirsiniz.
    2. Reklam boyutu sınıfında, geçerli yön için satır içi uyarlanabilir AdSize nesnesi almak amacıyla AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(int width) gibi uygun statik yöntemleri kullanın.
    3. Banner'ın yüksekliğini sınırlamak istiyorsanız AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight) statik yöntemini kullanabilirsiniz.
  2. Reklam birimi kimliğinizi, uyarlanabilir reklam boyutunu ve bir reklam isteği nesnesini içeren bir AdManagerBannerAd nesnesi oluşturun.
  3. Reklamı yükleyin.
  4. onAdLoaded geri çağırma işlevinde, güncellenmiş platform reklam boyutunu almak ve AdWidget kapsayıcı yüksekliğini güncellemek için AdManagerBannerAd.getPlatformAdSize() işlevini kullanın.

Kod örneği

Aşağıda, satır içi uyarlanabilir banner'ı ekran genişliğine uyacak şekilde yükleyen ve ek öğeleri 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;
  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();
  }
}