광고의 상태를 잘 관리하면 사용자 경험을 더 부드럽게 만들 수 있습니다. 예를 들어 광고가 끝나면 다시 광고를 로드하고, 광고가 없을 경우 버튼을 비활성화하는 방식도 가능합니다.
예시처럼 _isAdLoaded 상태를 이용해 버튼 활성화를 제어할 수 있습니다. 또한 광고 실패나 닫힘 이벤트를 리슨해서 앱 흐름을 자연스럽게 유지해야 합니다.
광고 생명주기 관리
는 다음과 같은 콜백을 통해 구현합니다:
onAdLoaded : 광고 페이지 로드 시 호출됩니다.
onAdFailedToLoad : 광고 로드 실패 시 호출됩니다.
onAdDismissedFullScreenContent : 광고를 시청 완료 후 다시 로드할 때 호출됩니다.
onAdFailedToShowFullScreenContent : 광고 표시 실패 시 호출됩니다.
onUserEarnedReward : 사용자가 보상을 획득했을 때 호출됩니다.
정상 작동 시 로그
광고 차단 프로그램(adguard) 동작 시 로그
onAdFailedToLoad: 광고 로드 실패: LoadAdError(code: 0, domain: com.google.android.gms.ads, message: Error while connecting to ad server: Unable to resolve host "googleads.g.doubleclick.net": No address associated with hostname, responseInfo: ResponseInfo(responseId: null, mediationAdapterClassName: , adapterResponses: [], loadedAdapterResponseInfo: null), responseExtras: {})
이러한 이벤트를 적절히 리슨하여 광고의 흐름을 설계하면 서버 로그 저장 등 다양한 기능을 구현할 수 있습니다.
보상형 전면 광고는 사용자에게 자연스럽게 참여를 유도하고 앱 수익을 창출할 수 있는 좋은 방법입니다. Flutter에서는 google_mobile_ads 패키지를 통해 쉽게 적용할 수 있으며, 적절한 이벤트 리슨과 상태 관리를 통해 광고 흐름을 부드럽게 구성할 수 있습니다.
이번 글에서는 AdMob 설정부터 Flutter 코드 작성, 이벤트 리슨까지 전반적인 흐름을 살펴보았습니다. 직접 테스트 광고로 연습해보신 후, 실제 광고 ID로 교체해 사용하시면 되겠습니다.