728x90

앱의 수익을 위한 전면광고 다는 방법입니다.

먼저 AdMob 을 통해 광고 ID 를 Android, iOS 별로 만들었다는 가정하에 진행합니다.

참고 : http://kjcoder.tistory.com/276 및 구글링

 

전면 광고를 넣기위해 DependencyService 를 사용해야합니다.

개념은 아래 링크를 통해서..^^

https://docs.microsoft.com/ko-kr/xamarin/xamarin-forms/app-fundamentals/dependency-service/introduction

간단하게 말하면 각 플랫폼별 기능을 .Net Standard 프로젝트에서 하나의 코드로 호출할 수 있도록 해주는 것입니다.

 

.Net Standard 프로젝트에 IInterstitialAd 인터페이스를 만듭니다.

namespace Test
{
    public interface IInterstitialAd
    {
        void Show(string adUnitId);
    }
}


Android 프로젝트에 아래의 NuGet 패키지를 설치합니다.

InterstitialAdByAndroid 클래스를 아래와 같이 추가합니다.

using Android.Content;
using Android.Gms.Ads;
using Android.Media;
using Test.Droid;
using System.Threading.Tasks;

[assembly: Xamarin.Forms.Dependency(typeof(InterstitialAdByAndroid))]
namespace Test.Droid
{
    class InterstitialAdByAndroid : AdListener, IInterstitialAd
    {
        InterstitialAd interstitialAd;

        public void Show(string adUnitId)
        {
            var context = Android.App.Application.Context;
            InterstitialAd ad = new InterstitialAd(context);
            ad.AdUnitId = adUnitId;

            this.interstitialAd = ad;
            OnAdLoaded();
            ad.AdListener = this;

            var requestBuilder = new AdRequest.Builder();
            ad.LoadAd(requestBuilder.Build());
        }

        public override void OnAdClosed()
        {

        }

        public override void OnAdLoaded()
        {
            base.OnAdLoaded();

            if (this.interstitialAd.IsLoaded)
            {
                this.interstitialAd.Show();
            }
        }
    }
}


iOS 프로젝트에 아래와 같은 NuGet 패키지를 설치합니다.

InterstitialAdByiOS 클래스를 아래와 같이 추가합니다.

using Google.MobileAds;
using Test.iOS;
using System.Threading.Tasks;
using UIKit;
using Xamarin.Forms;

[assembly: Xamarin.Forms.Dependency(typeof(InterstitialAdByiOS))]
namespace Test.iOS
{
    public class InterstitialAdByiOS : IInterstitialAd
    {
        Interstitial interstitialAd;

        public async void Show(string adUnitId)
        {
            this.interstitialAd = new Interstitial(adUnitId);
            this.interstitialAd.LoadRequest(Request.GetDefaultRequest());

            while (!this.interstitialAd.IsReady)
            {
                await Task.Delay(100);
            }

            Device.BeginInvokeOnMainThread(() => this.interstitialAd.PresentFromRootViewController(UIApplication.SharedApplication.Windows[0].RootViewController));
        }
    }
}


이제 마지막으로 실제 .Net Standard 프로젝트에서 호출하는 방법입니다.

// 전면 광고
string adUnitId = "ca-app-pub-4681470946279796/3339648514";
if (Device.RuntimePlatform == Device.iOS)
{
    adUnitId = "ca-app-pub-4681470946279796/8947198411";
}

DependencyService.Get<IInterstitialAd>().Show(adUnitId);

 

위와 같이 하면 전면광고가 노출되게 됩니다.

728x90
Posted by kjun.kr
,