HUSKING - kotteri

技術系Note

【XAMARIN】Admob広告を表示

Xamarinを試してみるに、初めにAdmobの広告を試してみた。


実装方法は以下の方の記事が凄く参考になると思います。
qiita.com


手を入れたのは、iOSAndroidのそれぞれのカスタムレンダラー。
Admobは自分で広告をクリックするとダメらしいので、
自分の端末をテスト端末として登録。

iOS
using System;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using Google.MobileAds;
using UIKit;
using CoreGraphics;
using SimpleMemo;
using SimpleMemo.iOS;

[assembly: ExportRenderer(typeof(AdMobBanner), typeof(AdMobBannerRenderer))]
namespace SimpleMemo.iOS
{
    public class AdMobBannerRenderer : ViewRenderer
    {
        private const string adUnitID = @"ca-app-pub-*********************";  // ← Admobで作成した広告ID
        private bool onScreen;

        protected override void OnElementChanged(ElementChangedEventArgs<View> e)
        {
            base.OnElementChanged(e);

            if (e.NewElement == null)
            {
                return;
            }

            if (e.OldElement == null)
            {
                UIViewController viewController = null;
                foreach (UIWindow window in UIApplication.SharedApplication.Windows)
                {
                    if (window.RootViewController != null)
                    {
                        viewController = window.RootViewController;
                        break;
                    }
                }

                if (viewController == null)
                {
                    viewController = UIApplication.SharedApplication.KeyWindow.RootViewController;
                }

                var banner = new BannerView(AdSizeCons.Banner, new CGPoint(-10, 0))
                {
                    AdUnitID = adUnitID,
                    RootViewController = viewController
                };

                banner.AdReceived += (sender, args) =>
                {
                    if (!onScreen)
                    {
                        AddSubview(banner);
                        onScreen = true;
                    }
                };
                var request = Request.GetDefaultRequest();
                request.TestDevices = new string[] { "*******************" }; // ← テスト端末のID
                banner.LoadRequest(request);
                SetNativeControl(banner);
            }
        }
    }
}
Android
using System;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using SimpleMemo;
using SimpleMemo.Droid;

[assembly: ExportRenderer(typeof(AdMobBanner), typeof(AdMobBannerRenderer))]
namespace SimpleMemo.Droid
{
    public class AdMobBannerRenderer : ViewRenderer<AdMobBanner, Android.Gms.Ads.AdView>
    {
        private const string adUnitID = @"ca-app-pub-******************"; // ← Admobで作成した広告ID

        protected override void OnElementChanged(ElementChangedEventArgs<AdMobBanner> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                var banner = new Android.Gms.Ads.AdView(Forms.Context);
                banner.AdSize = Android.Gms.Ads.AdSize.Banner;
                banner.AdUnitId = adUnitID;

                var builder = new Android.Gms.Ads.AdRequest.Builder();
                builder.AddTestDevice("**************"); // ← テスト端末のID
                banner.LoadAd(builder.Build());
                SetNativeControl(banner);
            }
        }
    }
}


最後に、ちょっと困った?こと

最初、上記を実装しても全然広告が出ませんでした。
コンソールを見ると以下のような出力が。。。

There was a problem getting an ad response. ErrorCode: 0 Failed to load ad:0

これじゃ意味わからん!って困ってたのですが、単純なミスに気づく。。


Admobのアカウントを作成しただけで満足してて、必要なアカウント情報を入力してなかった・・・


アカウント情報を入力して、承認のメールが届いたら、表示されるようになりました。

以下、アカウントが承認された状態
f:id:huskworks53:20180720220502p:plain:w300

ここが最初、「まだ完了してません」みたいなメッセージが出てました。。