0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Xamarin.iOSでDFPの広告が表示できない -> できた!

Last updated at Posted at 2017-10-25

10/26追記

やっとできました。
RendererのもととなるViewをWebViewを継承したものにして、その他を切り替えていくことで表示できました(実際のプロダクトコードではContentViewを使っていました)

おそらくこのことによりUserAgentなどが切り替わり、DFPのサーバ側からコンテンツが返ってくるようになったのではないかと推測しています。こんなのわかるか!!という思いでいっぱいですが、知見だけ残しておきます。


Xamarin.iOSでDFP(DoubleClick for Developer)のバナー広告を出そうとがんばってもう数週間。

BindingLibraryを作ったり、Web上のサンプルをあさってコードを書いてみるも動かない・・
ここで公開されているサンプルを元に実装しました
https://github.com/sharmapranav/Xamarin

有識者の方、何かヒントや気づきでもありましたらコメントいただけると非常に助かります。

やってみたこと

  • BannerViewはGADBannerViewではなくDFPBannerViewなどDFP用のものを使うようにした
  • DFP用はテスト広告(/6499/example/banner)も何も表示されない
  • もちろん用意した本物の広告も表示されない ※swiftやobjective-cのデモアプリでは表示されている。AndroidもOK
  • シミュレータと実機(Debug)いずれもダメ
  • ただし、Admobはテスト、本物いずれも表示される

エラー

Description:Error Domain=com.google.ads Code=1 "Request Error: No ad to show." UserInfo={NSLocalizedDescription=Request Error: No ad to show., NSLocalizedFailureReason=Request Error: No ad to show.}

書き換えたBanner部分のコード

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

[assembly: ExportRenderer(typeof(AdBanner), typeof(AdBanner_iOS))]
namespace Ads.iOS
{
    public class AdBanner_iOS : ViewRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<View> e)
        {
            base.OnElementChanged(e);

            if (e.OldElement == null)
            {
                Google.MobileAds.DoubleClick.BannerView bannerView = null;

                switch ((Element as AdBanner).Size)
                {
                    case AdBanner.Sizes.Standardbanner:
                        bannerView = new Google.MobileAds.DoubleClick.BannerView(AdSizeCons.Banner, new CGPoint(0, 0));
                        break;
                    case AdBanner.Sizes.LargeBanner:
                        bannerView = new Google.MobileAds.DoubleClick.BannerView(AdSizeCons.LargeBanner, new CGPoint(0, 0));
                        break;
                    case AdBanner.Sizes.MediumRectangle:
                        bannerView = new Google.MobileAds.DoubleClick.BannerView(AdSizeCons.MediumRectangle, new CGPoint(0, 0));
                        break;
                    case AdBanner.Sizes.FullBanner:
                        bannerView = new Google.MobileAds.DoubleClick.BannerView(AdSizeCons.FullBanner, new CGPoint(0, 0));
                        break;
                    case AdBanner.Sizes.Leaderboard:
                        bannerView = new Google.MobileAds.DoubleClick.BannerView(AdSizeCons.Leaderboard, new CGPoint(0, 0));
                        break;
                    case AdBanner.Sizes.SmartBannerPortrait:
                        bannerView = new Google.MobileAds.DoubleClick.BannerView(AdSizeCons.SmartBannerPortrait, new CGPoint(0, 0));
                        break;
                    default:
                        bannerView = new Google.MobileAds.DoubleClick.BannerView(AdSizeCons.Banner, new CGPoint(0, 0));
                        break;
                }

                // TODO: change this id to your admob id
                //bannerView.AdUnitID = "ca-app-pub-3940256099942544/2934735716";
                bannerView.AdUnitID = "/6499/example/banner";

                foreach (UIWindow uiWindow in UIApplication.SharedApplication.Windows)
                {
                    if (uiWindow.RootViewController != null)
                    {
                        bannerView.RootViewController = uiWindow.RootViewController;
                    }
                }
                bannerView.ReceiveAdFailed += (sender, args) =>
                {
                    Debug.WriteLine($"DFPエラー発生。{Environment.NewLine}Description:{args.Error.Description}");
                };
                bannerView.AdReceived += (sender, args) =>
                {
                    AddSubview(bannerView);
                };

                var request = new Google.MobileAds.DoubleClick.Request();
                
                bannerView.LoadRequest(request);

                SetNativeControl(bannerView);
            }
        }
    }
}


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?