윈8 앱에서 광고 안 나올 때 처리하는 방법

윈8과 윈폰8에서는 현재 Microsoft Advertising에서 제공하는 pubcenter.microsoft.com 광고를 적용할 수가 있다. 하지만 앱에 광고를 적용했는데도, 실제로 광고가 나오지 않는 경우가 있다.

광고 서버의 상태가 좋지 않거나 해당 사이즈나 카테고리의 광고 소재가 없어서 나오지 않는 경우가 종종 있다. 요청 대비 실제 광고가 나오는 비율을 Fill Rate라고 하는데, 광고 노출 횟수당 비용 정산이 이루어 지기 때문에 이 비율에 따라 광고 수익이 크게 달라진다. 비율이 높으면 90%가 넘지만 10% 이하로 나오는 경우도 있기 때문에 광고가 나오지 않는 경우에는 자체 광고 컨텐츠를 보여주거나 다른 플랫폼 광고를 노출하는 등의 처리가 필요하다.

광고 단위 별로 필레이트가 다르다.

광고 단위 별로 필레이트가 다르다.

윈폰8 앱에서는 서버 이슈로 광고가 나오지 않을 때 AdControl의 ErrorOccurred 이벤트에서 이를 처리할 수 있는데(no ads, server error라고 나온다.) 윈도우8에서는 이런 경우에 ErrorOccurred 이벤트가 발생하지 않는다. 따라서 다른 방법을 써야 하는데, 광고가 초기화 될 때 IsEnabled 값이 False에서 True 변하는 것을 이용해서 아래과 같은 방법으로 체크할 수 있다.

        public MainPage()
        {
            this.InitializeComponent();
            MyAd1.IsEnabledChanged += MyAd1_IsEnabledChanged;
        }

        void MyAd1_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            if (!(bool)e.NewValue)
            {
                // 광고가 새로고침 되는 경우에도 False로 잠시 전환되므로
                // 3초 정도 후에 다시 확인을 해서 계속 False인 경우에 광고가 없다고 판단.
                var timer = new DispatcherTimer();
                timer.Tick += timer_Tick;
                timer.Interval = new TimeSpan(0, 0, 3);
                timer.Start();
            }
            else
            {

                // 광고가 제대로 나올 때
                new Windows.UI.Popups.MessageDialog("MyAd1 is filled.").ShowAsync();
            }
        }

        void timer_Tick(object sender, object e)
        {
            if (!MyAd1.IsEnabled)
            {
                FillOtherAds();
            }
            (sender as DispatcherTimer).Stop();
        }
        void FillOtherAds()
        {

            // 광고가 안 찼을 때
            new Windows.UI.Popups.MessageDialog("No Ads").ShowAsync();
        }

자바스크립트에서도 비슷하게 되지 않을까? 🙂

Advertisements

2 comments

  1. AdControl에서 ErrorOccurred 이벤트를 이용해서 광고 유무 확인 가능한 것으로 확인 했습니다.
    void adControl_ErrorOccurred(object sender, Microsoft.Advertising.WinRT.UI.AdErrorEventArgs e)
    {
    switch ((int)e.ErrorCode)
    {
    case PublicData.AD_ERROR_SERVER_SIDE_ERROR:
    case PublicData.AD_ERROR_INVALID_SERVER_RESPONSE:
    case PublicData.AD_ERROR_OTHER:
    case PublicData.AD_ERROR_REFRESH_NOT_ALLOWED:
    case PublicData.AD_ERROR_NO_AD_AVAILABLE:
    //adControl숨기기
    adControl.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
    adDuplex.Visibility = Windows.UI.Xaml.Visibility.Visible;
    break;
    case PublicData.AD_ERROR_CLIENT_CONFIGURATION:
    case PublicData.AD_ERROR_NETWORK_CONNECTION_FAILURE:
    case PublicData.AD_ERROR_UNKNOWN:
    //모든 광고 숨기기
    adControl.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
    adDuplex.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
    break;
    }
    }
    요렇게 사용중입니다. 흐흐

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중