메인 콘텐츠로 건너뛰기

앱 오픈 광고 형태 소개

  • 앱이 시작되거나 포그라운드로 전환될 때 표시되는 전면 광고입니다.
  • 앱 로딩 화면이나 스플래시 화면에서 자연스럽게 노출됩니다.

인스턴스 생성 및 콜백 설정

DaroAppOpenAd 인스턴스를 생성하고 콜백을 설정합니다.
import 'package:daro_flutter/daro_flutter.dart';
final appOpenAd = DaroAppOpenAd(adUnitId: '{YOUR_AD_UNIT_ID}');

appOpenAd.onAdLoadSuccess = (adInfo) {
  print('App open ad loaded');
};
appOpenAd.onAdLoadFail = (error) {
  print('App open ad failed to load: ${error.message}');
};
appOpenAd.onAdImpression = (adInfo) {
  print('App open ad impression');
};
appOpenAd.onAdClicked = (adInfo) {
  print('App open ad clicked');
};
appOpenAd.onAdShown = (adInfo) {
  print('App open ad shown');
};
appOpenAd.onAdFailedToShow = (error) {
  print('App open ad failed to show: ${error.message}');
};
appOpenAd.onAdDismiss = (adInfo) {
  print('App open ad dismissed');
};

광고 로드하기

load()를 호출하여 광고를 로드합니다.
appOpenAd.load();

광고 보여주기

isReady()로 광고 준비 여부를 확인한 후 show()로 광고를 표시합니다.
final isReady = await appOpenAd.isReady();

if (isReady) {
  appOpenAd.show();
}

리소스 해제

광고 사용이 끝나면 destroy()를 호출하여 리소스를 해제합니다.
appOpenAd.destroy();

구현 예시

import 'package:flutter/material.dart';
import 'package:daro_flutter/daro_flutter.dart';

class AppOpenAdPage extends StatefulWidget {
  const AppOpenAdPage({super.key});

  @override
  State<AppOpenAdPage> createState() => _AppOpenAdPageState();
}

class _AppOpenAdPageState extends State<AppOpenAdPage> with WidgetsBindingObserver {
  late final DaroAppOpenAd _appOpenAd;
  String _status = 'Not Loaded';

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
    _appOpenAd = DaroAppOpenAd(adUnitId: '{YOUR_AD_UNIT_ID}');
    _setupCallbacks();
  }

  void _setupCallbacks() {
    _appOpenAd.onAdLoadSuccess = (adInfo) {
      setState(() => _status = 'Loaded');
    };

    _appOpenAd.onAdLoadFail = (error) {
      setState(() => _status = 'Failed to Load');
    };

    _appOpenAd.onAdShown = (adInfo) {
      setState(() => _status = 'Shown');
    };

    _appOpenAd.onAdFailedToShow = (error) {
      setState(() => _status = 'Failed to Show');
    };

    _appOpenAd.onAdDismiss = (adInfo) {
      setState(() => _status = 'Not Loaded');
      // 광고가 닫힌 후 다시 로드
      _appOpenAd.load();
    };

    _appOpenAd.onAdClicked = (adInfo) {
      print('App open ad clicked');
    };

    _appOpenAd.onAdImpression = (adInfo) {
      print('App open ad impression');
    };
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      _showAppOpenAd();
    }
  }

  Future<void> _showAppOpenAd() async {
    final isReady = await _appOpenAd.isReady();
    if (isReady) {
      _appOpenAd.show();
    }
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    _appOpenAd.destroy();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('App Open Ad')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Status: $_status'),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                setState(() => _status = 'Loading...');
                _appOpenAd.load();
              },
              child: const Text('Load App Open Ad'),
            ),
            const SizedBox(height: 8),
            ElevatedButton(
              onPressed: () async {
                final isReady = await _appOpenAd.isReady();
                if (isReady) {
                  _appOpenAd.show();
                }
              },
              child: const Text('Show App Open Ad'),
            ),
          ],
        ),
      ),
    );
  }
}