【XAMARIN】Admob広告を表示
Xamarinを試してみるに、初めにAdmobの広告を試してみた。
実装方法は以下の方の記事が凄く参考になると思います。
qiita.com
手を入れたのは、iOSとAndroidのそれぞれのカスタムレンダラー。
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のアカウントを作成しただけで満足してて、必要なアカウント情報を入力してなかった・・・
アカウント情報を入力して、承認のメールが届いたら、表示されるようになりました。
以下、アカウントが承認された状態
ここが最初、「まだ完了してません」みたいなメッセージが出てました。。