تبلیغات باز برنامه

تبلیغات باز برنامه، فرمت تبلیغاتی ویژه‌ای است که برای ناشرانی که مایل به کسب درآمد از صفحات بارگذاری برنامه خود هستند، در نظر گرفته شده است. تبلیغات باز برنامه را می‌توان در هر زمانی بست و طوری طراحی شده‌اند که وقتی کاربران شما برنامه شما را به پیش‌زمینه می‌آورند، نمایش داده شوند.

تبلیغات باز شدن اپلیکیشن به طور خودکار یک ناحیه کوچک از برند را نشان می‌دهند تا کاربران متوجه شوند که در اپلیکیشن شما هستند. در اینجا مثالی از ظاهر یک تبلیغ باز شدن اپلیکیشن آورده شده است:

پیش‌نیازها

  • افزونه فلاتر نسخه ۰.۱۳.۶ یا بالاتر.
  • شروع به کار را کامل کنید. برنامه Flutter شما باید از قبل افزونه Google Mobile Ads Flutter را وارد کرده باشد.

همیشه با تبلیغات آزمایشی تست کنید

هنگام ساخت و آزمایش برنامه‌های خود، مطمئن شوید که از تبلیغات آزمایشی به جای تبلیغات زنده و تولیدی استفاده می‌کنید. عدم انجام این کار می‌تواند منجر به مسدود شدن حساب شما شود.

ساده‌ترین راه برای بارگذاری تبلیغات آزمایشی، استفاده از شناسه‌های اختصاصی واحد تبلیغات آزمایشی ما برای تبلیغات پاداش‌دار اندروید و iOS است:

  • /21775744923/example/app-open

آنها به طور ویژه پیکربندی شده‌اند تا برای هر درخواست، تبلیغات آزمایشی را برگردانند و شما می‌توانید در هنگام کدنویسی، آزمایش و اشکال‌زدایی از آنها در برنامه‌های خود استفاده کنید. فقط قبل از انتشار برنامه خود، مطمئن شوید که آنها را با شناسه واحد تبلیغاتی خود جایگزین می‌کنید.

پیاده‌سازی

مراحل اصلی برای ادغام تبلیغات باز برنامه عبارتند از:

  1. یک کلاس کاربردی ایجاد کنید که قبل از نمایش تبلیغ، آن را بارگذاری کند.
  2. یک تبلیغ بارگذاری کنید.
  3. برای تماس‌های برگشتی ثبت‌نام کنید و تبلیغ را نمایش دهید.
  4. برای نمایش تبلیغ در طول رویدادهای برجسته‌سازی، در AppStateEventNotifier.appStateStream مشترک شوید.

ایجاد یک کلاس کاربردی

یک کلاس جدید به نام AppOpenAdManager برای بارگذاری تبلیغ ایجاد کنید. این کلاس یک متغیر نمونه را مدیریت می‌کند تا یک تبلیغ بارگذاری شده و شناسه واحد تبلیغ را برای هر پلتفرم پیگیری کند.

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;
  }
}

بارگذاری یک تبلیغ

تبلیغات باز برنامه شما باید قبل از ورود کاربران به برنامه آماده باشد. یک کلاس کاربردی پیاده‌سازی کنید تا درخواست‌های تبلیغ را قبل از زمانی که نیاز به نمایش تبلیغ دارید، ارسال کند.

بارگذاری یک تبلیغ با استفاده از متد loadWithAdManagerAdRequest در کلاس AppOpenAd انجام می‌شود. متد load به یک شناسه واحد تبلیغ، یک حالت جهت‌گیری، یک شیء AdManagerAdRequest و یک کنترل‌کننده تکمیل نیاز دارد که هنگام موفقیت یا شکست بارگذاری تبلیغ فراخوانی می‌شود. شیء AppOpenAd بارگذاری شده به عنوان یک پارامتر در کنترل‌کننده تکمیل ارائه می‌شود. مثال زیر نحوه بارگذاری یک AppOpenAd را نشان می‌دهد.

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.
        },
      ),
    );
  }
}

نمایش تبلیغ و مدیریت فراخوانی‌های تمام‌صفحه

قبل از نمایش تبلیغ، برای هر رویداد تبلیغی که می‌خواهید به آن گوش دهید، یک FullScreenContentCallback ثبت کنید.

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();
      },
    );
  }
}

اگر کاربری پس از کلیک روی یک تبلیغ باز برنامه، پس از خروج از برنامه، دوباره به آن بازگشت، مطمئن شوید که با تبلیغ باز برنامه دیگری مواجه نشده است.

به رویدادهای برجسته‌سازی برنامه گوش دهید

برای اینکه از رویدادهای پیش‌زمینه‌سازی برنامه مطلع شوید، باید در AppStateEventNotifier.appStateStream مشترک شوید و به رویدادهای foreground گوش دهید.

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();
    }
  }
}

حالا می‌توانید AppLifecycleReactor خود را مقداردهی اولیه کنید و شروع به گوش دادن به تغییرات چرخه حیات برنامه کنید. برای مثال، از صفحه اصلی خود:

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);
  }

انقضای تبلیغ را در نظر بگیرید

برای اطمینان از اینکه تبلیغ منقضی شده‌ای را نشان نمی‌دهید، یک مهر زمانی به AppOpenAdManager اضافه کنید تا بتوانید بررسی کنید که چه مدت از بارگذاری تبلیغ شما گذشته است. سپس، از آن مهر زمانی برای بررسی اینکه آیا تبلیغ هنوز معتبر است یا خیر، استفاده کنید.

/// 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();
  }
}

صفحه‌های شروع سرد و بارگیری

تاکنون مستندات فرض می‌کنند که شما فقط زمانی تبلیغات باز بودن برنامه را نشان می‌دهید که کاربران برنامه شما را در حالت تعلیق در حافظه، در پیش‌زمینه قرار می‌دهند. «شروع سرد» زمانی اتفاق می‌افتد که برنامه شما راه‌اندازی می‌شود اما قبلاً در حافظه معلق نبوده است.

یک نمونه از شروع سرد زمانی است که کاربر برای اولین بار برنامه شما را باز می‌کند. با شروع سرد، شما یک تبلیغ باز شده از قبل بارگذاری شده در برنامه نخواهید داشت که بلافاصله آماده نمایش باشد. تأخیر بین درخواست تبلیغ و دریافت پاسخ تبلیغ می‌تواند وضعیتی را ایجاد کند که کاربران بتوانند قبل از اینکه با یک تبلیغ خارج از متن غافلگیر شوند، به طور خلاصه از برنامه شما استفاده کنند. باید از این امر اجتناب شود زیرا یک تجربه کاربری بد است.

روش ترجیحی برای استفاده از تبلیغات باز برنامه در شروع سرد، استفاده از یک صفحه بارگذاری برای بارگذاری محتوای بازی یا برنامه شما و نمایش تبلیغ فقط از صفحه بارگذاری است. اگر بارگیری برنامه شما کامل شده و کاربر را به محتوای اصلی برنامه هدایت کرده است، تبلیغ را نشان ندهید.

بهترین شیوه‌ها

تبلیغات باز برنامه به شما کمک می‌کند تا از صفحه بارگذاری برنامه خود، هنگام راه‌اندازی اولیه برنامه و هنگام تغییر برنامه، درآمد کسب کنید، اما مهم است که بهترین شیوه‌ها را در نظر داشته باشید تا کاربران شما از استفاده از برنامه شما لذت ببرند. بهتر است:

  • اولین تبلیغ باز برنامه خود را پس از اینکه کاربران چند بار از برنامه شما استفاده کردند، نمایش دهید.
  • تبلیغات باز شدن برنامه را در زمان‌هایی نمایش دهید که کاربران شما در غیر این صورت منتظر بارگذاری برنامه شما هستند.
  • اگر صفحه بارگذاری زیر تبلیغ باز برنامه دارید و صفحه بارگذاری شما قبل از بسته شدن تبلیغ، بارگذاری را کامل می‌کند، می‌توانید صفحه بارگذاری خود را در رویداد onAdDismissedFullScreenContent بسته کنید.