Uygulama Açılış Reklamları

Uygulama açılış reklamları, uygulama yükleme ekranlarından para kazanmak isteyen yayıncılara yönelik özel bir reklam biçimidir. Uygulama açılış reklamları dilediğiniz zaman kapatılabilir ve kullanıcılarınız uygulamanızı ön plana getirdiğinde gösterilecek şekilde tasarlanmıştır.

Uygulama açılış reklamları, kullanıcılara uygulamanızda olduklarını hatırlatmak için otomatik olarak küçük bir marka alanı gösterir. Aşağıda uygulama açılış reklamının nasıl göründüğüne dair bir örnek verilmiştir:

Ön koşullar

  • Flutter eklentisi 0.13.6 veya daha yeni bir sürüm.
  • Başlayın bölümünü tamamlayın. Flutter uygulamanıza Google Mobil Reklamlar Flutter eklentisi zaten içe aktarılmış olmalıdır.

Her zaman test reklamlarıyla test yapın

Uygulamalarınızı oluşturup test ederken canlı üretim reklamları yerine test reklamları kullandığınızdan emin olun. Bunu yapmazsanız hesabınız askıya alınabilir.

Test reklamlarını yüklemenin en kolay yolu, Android ve iOS ödüllü reklamlar için özel test reklam birimi kimliklerimizi kullanmaktır:

  • /21775744923/example/app-open

Bu URL'ler, her istek için test reklamları döndürecek şekilde özel olarak yapılandırılmıştır. Kodlama, test etme ve hata ayıklama sırasında kendi uygulamalarınızda bu URL'leri kullanabilirsiniz. Uygulamanızı yayınlamadan önce bunları kendi reklam birimi kimliğinizle değiştirdiğinizden emin olun.

Uygulama

Uygulama açılış reklamlarını entegre etmenin ana adımları şunlardır:

  1. Reklamı göstermeniz gerekmeden önce yükleyen bir yardımcı program sınıfı oluşturun.
  2. Reklam yükleyin.
  3. Geri aramalara kaydolun ve reklamı gösterin.
  4. Reklamı ön planda etkinlik sırasında göstermek için AppStateEventNotifier.appStateStream'e abone olun.

Yardımcı program sınıfı oluşturma

Reklamı yüklemek için AppOpenAdManager adlı yeni bir sınıf oluşturun. Bu sınıf, yüklü bir reklamı ve her platformun reklam birimi kimliğini takip etmek için bir örnek değişkeni yönetir.

import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'dart:io' show Platform;

class AppOpenAdManager {
  
  String adUnitId = '/21775744923/example/app-open';
  
  AppOpenAd? _appOpenAd;
  bool _isShowingAd = false;

  /// Load an AppOpenAd.
  void loadAd() {
    // We will implement this below.
  }

  /// Whether an ad is available to be shown.
  bool get isAdAvailable {
    return _appOpenAd != null;
  }
}

Reklam yükleme

Uygulama açılış reklamınızın, kullanıcılar uygulamanıza girmeden önce hazır olması gerekir. Reklamı göstermeniz gereken zamandan önce reklam isteği göndermek için bir yardımcı program sınıfı uygulayın.

Reklam yükleme işlemi, AppOpenAd sınıfındaki loadWithAdManagerAdRequest yöntemi kullanılarak gerçekleştirilir. Yükleme yöntemi için bir reklam birimi kimliği, yön modu, AdManagerAdRequest nesnesi ve reklam yükleme başarılı olduğunda veya başarısız olduğunda çağrılan bir tamamlama işleyici gerekir. Yüklenen AppOpenAd nesnesi, tamamlama işleyicide parametre olarak sağlanır. Aşağıdaki örnekte bir AppOpenAd öğesinin nasıl yükleneceği gösterilmektedir.

public class AppOpenAdManager {
  ...

  /// Load an AppOpenAd.
  void loadAd() {
    AppOpenAd.loadWithAdManagerAdRequest(
      adUnitId: adUnitId,
      adManagerAdRequest: AdManagerAdRequest(),
      adLoadCallback: AppOpenAdLoadCallback(
        onAdLoaded: (ad) {
          _appOpenAd = ad;
        },
        onAdFailedToLoad: (error) {
          print('AppOpenAd failed to load: $error');
          // Handle the error.
        },
      ),
    );
  }
}

Reklamı gösterme ve tam ekran geri çağırmalarla ilgilenme

Reklamı göstermeden önce, dinlemek istediğiniz her reklam etkinliği için bir FullScreenContentCallback kaydedin.

public class AppOpenAdManager {
  ...

  public void showAdIfAvailable() {
    if (!isAdAvailable) {
      print('Tried to show ad before available.');
      loadAd();
      return;
    }
    if (_isShowingAd) {
      print('Tried to show ad while already showing an ad.');
      return;
    }
    // Set the fullScreenContentCallback and show the ad.
    _appOpenAd!.fullScreenContentCallback = FullScreenContentCallback(
      onAdShowedFullScreenContent: (ad) {
        _isShowingAd = true;
        print('$ad onAdShowedFullScreenContent');
      },
      onAdFailedToShowFullScreenContent: (ad, error) {
        print('$ad onAdFailedToShowFullScreenContent: $error');
        _isShowingAd = false;
        ad.dispose();
        _appOpenAd = null;
      },
      onAdDismissedFullScreenContent: (ad) {
        print('$ad onAdDismissedFullScreenContent');
        _isShowingAd = false;
        ad.dispose();
        _appOpenAd = null;
        loadAd();
      },
    );
  }
}

Bir kullanıcı, uygulamanızı açmak için bir uygulama açma reklamını tıklayarak uygulamanızdan ayrıldıktan sonra uygulamanıza geri dönerse kullanıcıya başka bir uygulama açma reklamı gösterilmemelidir.

Uygulamanın ön plana geçme etkinliklerini dinleme

Uygulamanın ön plana geçme etkinlikleri hakkında bildirim almak için AppStateEventNotifier.appStateStream'e abone olmanız ve foreground etkinliklerini dinlemeniz gerekir.

import 'package:app_open_example/app_open_ad_manager.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

/// Listens for app foreground events and shows app open ads.
class AppLifecycleReactor {
  final AppOpenAdManager appOpenAdManager;

  AppLifecycleReactor({required this.appOpenAdManager});

  void listenToAppStateChanges() {
    AppStateEventNotifier.startListening();
    AppStateEventNotifier.appStateStream
        .forEach((state) => _onAppStateChanged(state));
  }

  void _onAppStateChanged(AppState appState) {
    // Try to show an app open ad if the app is being resumed and
    // we're not already showing an app open ad.
    if (appState == AppState.foreground) {
      appOpenAdManager.showAdIfAvailable();
    }
  }
}

Artık AppLifecycleReactor'inizi başlatabilir ve uygulama yaşam döngüsü değişikliklerini dinlemeye başlayabilirsiniz. Örneğin, ana sayfanızdan:

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

import 'app_lifecycle_reactor.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  MobileAds.instance.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'App Open Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'App Open Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

/// Example home page for an app open ad.
class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  late AppLifecycleReactor _appLifecycleReactor;

  @override
  void initState() {
    super.initState();
    
    AppOpenAdManager appOpenAdManager = AppOpenAdManager()..loadAd();
    _appLifecycleReactor = AppLifecycleReactor(
      appOpenAdManager: appOpenAdManager);
  }

Reklam geçerlilik süresini göz önünde bulundurma

Geçerlilik süresi dolan bir reklamı göstermediğinizden emin olmak için reklamınızın yüklendiği tarihten itibaren ne kadar süre geçtiğini kontrol edebilmek amacıyla AppOpenAdManager öğesine bir zaman damgası ekleyin. Ardından, reklamın hâlâ geçerli olup olmadığını kontrol etmek için bu zaman damgasını kullanın.

/// Utility class that manages loading and showing app open ads.
class AppOpenAdManager {
  ...
  
  /// Maximum duration allowed between loading and showing the ad.
  final Duration maxCacheDuration = Duration(hours: 4);

  /// Keep track of load time so we don't show an expired ad.
  DateTime? _appOpenLoadTime;
  
  ...

  /// Load an AppOpenAd.
  void loadAd() {
    AppOpenAd.loadWithAdManagerAdRequest(
      adUnitId: adUnitId,
      orientation: AppOpenAd.orientationPortrait,
      adManagerAdRequest: AdManagerAdRequest(),
      adLoadCallback: AppOpenAdLoadCallback(
        onAdLoaded: (ad) {
          print('$ad loaded');
          _appOpenLoadTime = DateTime.now();
          _appOpenAd = ad;
        },
        onAdFailedToLoad: (error) {
          print('AppOpenAd failed to load: $error');
        },
      ),
    );
  }

  /// Shows the ad, if one exists and is not already being shown.
  ///
  /// If the previously cached ad has expired, this just loads and caches a
  /// new ad.
  void showAdIfAvailable() {
    if (!isAdAvailable) {
      print('Tried to show ad before available.');
      loadAd();
      return;
    }
    if (_isShowingAd) {
      print('Tried to show ad while already showing an ad.');
      return;
    }
    if (DateTime.now().subtract(maxCacheDuration).isAfter(_appOpenLoadTime!)) {
      print('Maximum cache duration exceeded. Loading another ad.');
      _appOpenAd!.dispose();
      _appOpenAd = null;
      loadAd();
      return;
    }
    // Set the fullScreenContentCallback and show the ad.
    _appOpenAd!.fullScreenContentCallback = FullScreenContentCallback(...);
    _appOpenAd!.show();
  }
}

Sıfırdan başlatma ve yükleme ekranları

Şu ana kadarki dokümanlar, uygulama açılış reklamlarını yalnızca kullanıcılar uygulamanızı bellekte askıya alınmışken ön plana getirdiğinde gösterdiğinizi varsaymaktadır. "Sıfırdan başlatma", uygulamanız başlatılırken daha önce bellekte askıya alınmamışsa gerçekleşir.

Sıfırdan başlatmaya örnek olarak kullanıcının uygulamanızı ilk kez açması verilebilir. Sıfırdan başlatma işleminde, hemen gösterilmeye hazır olan önceden yüklenmiş bir uygulama açılış reklamınız olmaz. Reklam isteğinde bulunduğunuz zaman ile reklamın size geri gönderilmesi arasında geçen gecikme, kullanıcıların bağlam dışı bir reklamla karşılaşmadan önce uygulamanızı kısa süreliğine kullanabildiği bir durum oluşturabilir. Bu, kötü bir kullanıcı deneyimi olduğundan önlenmelidir.

Uygulama açılış reklamlarını baştan başlatma sırasında kullanmanın tercih edilen yolu, oyun veya uygulama öğelerinizi yüklemek için bir yükleme ekranı kullanmak ve reklamı yalnızca yükleme ekranından göstermektir. Uygulamanız yüklenmeyi tamamladıysa ve kullanıcıyı uygulamanızın ana içeriğine gönderdiyse reklamı göstermeyin.

En iyi uygulamalar

Uygulama açılış reklamları, uygulama ilk açıldığında ve uygulama geçişleri sırasında uygulamanızın yükleme ekranından para kazanmanıza yardımcı olur. Ancak kullanıcılarınızın uygulamanızı kullanmaktan keyif alması için en iyi uygulamaları göz önünde bulundurmanız önemlidir. En iyi uygulamalar şunlardır:

  • Kullanıcılarınız uygulamanızı birkaç defa kullandıktan sonra ilk uygulama açılış reklamınızı gösterin.
  • Uygulama açılış reklamlarını, kullanıcılarınızın uygulamanızın yüklenmesini beklediği zamanlarda gösterin.
  • Uygulama açılış reklamının altında yükleme ekranınız varsa ve reklam kapatılmadan önce yükleme ekranınızın yüklenmesi tamamlanırsa yükleme ekranınızı onAdDismissedFullScreenContent etkinlik işleyicisinde kapatmayı deneyebilirsiniz.