Xamarin forms and Firebase AdMob for iOS



直到几天前,我的应用程序都工作得很好,直到我在输出中收到一条消息,它建议我添加以下行:

request.TestDevices = new[] { "yourtestcodeid" };

对于Xamarin Components Store,名为Xamarin. google . ios的组件。MobileAds已经不存在了,但是你必须安装Firebase AdMob for iOS。

问题是这个例子只适用于原生iOS项目。我有一个Xamarin表单项目,在主项目中有一个通用视图

public class AdMobView : ContentView {
    /// <summary>
    /// Initializes a new instance of the <see cref="AdMobView"/> class.
    /// </summary>
    public AdMobView() {
    }
}

并在项目中针对每个平台进行其实现。对于iOS是:

[assembly: ExportRenderer(typeof(AdMobView), typeof(AdMobRenderer))]
namespace WordBankEasy.iOS.Renderers {
public class AdMobRenderer : ViewRenderer {
    const string AdmobID = "ca-app-pub-yourcode";
    BannerView adView;
    BannerView adViewTableView;
    BannerView adViewWindow;
    Interstitial adInterstitial;
    bool viewOnScreen;
    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.View> e) {
        base.OnElementChanged(e);
        if(e.NewElement == null)
            return;
        if(e.OldElement == null)
        {
            adView = new BannerView(
                size: AdSizeCons.SmartBannerPortrait, 
                origin: new CGPoint(0, UIScreen.MainScreen.Bounds.Size.Height - AdSizeCons.Banner.Size.Height))
            {
                AdUnitID = AdmobID,
                RootViewController = UIApplication.SharedApplication.Windows[0].RootViewController
            };
            adView.AdReceived += (sender, args) =>
            {
                if(!viewOnScreen) this.AddSubview(adView);
                viewOnScreen = true;
            };
            adView.LoadRequest(GetRequest());
            base.SetNativeControl(adView);
        }
    }
    private void AdViewWindow_AdReceived(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }
    Request GetRequest()
    {
        var request = Request.GetDefaultRequest();
        // Requests test ads on devices you specify. Your test device ID is printed to the console when
        // an ad request is made. GADBannerView automatically returns test ads when running on a
        // simulator. After you get your device ID, add it here
        request.TestDevices = new[] { "96080e40efec5229aad21b540eae6fe0" };
        return request;
    }
}
}

现在我不能查看广告了但是我有了一种新的错误

必须设置<GADBannerView的rootViewController属性:0x12de69c50;帧>>在加载请求之前。

如何修改我的代码?谢谢你的建议

对于新组件,在代码中需要做一些更改,如下所示:

if(e.OldElement == null)
{
    UIViewController viewCtrl = null;
    foreach(UIWindow v in UIApplication.SharedApplication.Windows)
    {
        if (v.RootViewController != null)
        {
            viewCtrl = v.RootViewController;
        }
    }
    adView = new BannerView(size: AdSizeCons.Banner, origin: new CGPoint(-10, 0))
    {
        AdUnitID = AdmobID,
        RootViewController = viewCtrl
    };
    adView.AdReceived += (sender, args) =>
    {
        if(!viewOnScreen) this.AddSubview(adView);
        viewOnScreen = true;
    };
    adView.LoadRequest(GetRequest());
    base.SetNativeControl(adView);
}

最新更新