簡體   English   中英

Xamarin.iOS應用中未展示AdMob橫幅廣告

[英]AdMob banner ads not showing in Xamarin.iOS apps

我知道這個確切的問題已經被問了數百次了,但是每個用戶都有一個不同的問題,我已經嘗試了許多解決方案,但是卻一無所獲。

好消息是橫幅測試廣告(如此處的鏈接LINK )可以正確顯示…並且我已經在AdMob中注冊了單元橫幅(尚未連接FireBase)

這是我的代碼,摘自互聯網上的各種示例……對於他們每個人來說,這是一個非常標准的代碼模式:

MainPage.xaml中

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:TestAd"
         xmlns:localIOS="clr-namespace:TestAd.iOS"
         xmlns:vm="clr-namespace:TestAd.ViewModels"
         x:Class="TestAd.MainPage">
<ContentPage.BindingContext>
    <vm:AppViewModel/>
</ContentPage.BindingContext>
<StackLayout>
    <Grid …>
    </Grid>

    <localIOS:AdMobView AdUnitId="ca-app-pub-XXXXXXXXXXXXXXX/XXXXXXXXXX"/>
    <ListView ...>
    </ListView>
</StackLayout>

AdView的

public class AdMobView : View
{

    public static readonly BindableProperty AdUnitIdProperty = BindableProperty.Create(
               nameof(AdUnitId),
               typeof(string),
               typeof(AdMobView),
               string.Empty);

    public string AdUnitId
    {
        get => (string)GetValue(AdUnitIdProperty);
        set => SetValue(AdUnitIdProperty, value);
    }
}

AdViewRenderer

[assembly: ExportRenderer(typeof(AdMobView), typeof(AdMobViewRenderer))]
namespace AppReminderIOS.iOS
{
public class AdMobViewRenderer : ViewRenderer<AdMobView, BannerView>
{
    protected override void OnElementChanged(ElementChangedEventArgs<AdMobView> e)
    {
        base.OnElementChanged(e);
        if (Control == null)
        {
            SetNativeControl(CreateBannerView());
        }
    }

    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        base.OnElementPropertyChanged(sender, e);

        if (e.PropertyName == nameof(BannerView.AdUnitID))
            Control.AdUnitID = "ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXX"; //Even tried: "Element.AdUnitId;"
    }

    private BannerView CreateBannerView()
    {
        var bannerView = new BannerView(AdSizeCons.SmartBannerPortrait)
        {
            AdUnitID = "ca-app-pub-XXXXXXXXXXXXXXXXXX/XXXXXXXXX", //Even tried: "Element.AdUnitId,"
            RootViewController = GetVisibleViewController()
        };

        bannerView.LoadRequest(GetRequest());

        Request GetRequest()
        {
            var request = Request.GetDefaultRequest();
            return request;
        }

        return bannerView;
    }

    private UIViewController GetVisibleViewController()
    {
        var windows = UIApplication.SharedApplication.Windows;
        foreach (var window in windows)
        {
            if (window.RootViewController != null)
            {
                return window.RootViewController;
            }
        }
        return null;
    }
}
}

AppDelegate.cs

public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
    //
    // This method is invoked when the application has loaded and is ready to run. In this 
    // method you should instantiate the window, load the UI into it and then make the window
    // visible.
    //
    // You have 17 seconds to return from this method, or iOS will terminate your application.
    //
    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        Google.MobileAds.MobileAds.Configure("ca-app-pub-XXXXXXXXXXXXXXXXXX~XXXXXXXX");

        Xamarin.Forms.Forms.Init();
        LoadApplication(new App());

        return base.FinishedLaunching(app, options);
    }
}

這是主要代碼……您怎么看? 我的AdMob帳戶可能有問題嗎? 測試廣告可以正確顯示,甚至在我旋轉設備時也會刷新自我……所以我不知道該怎么想。

謝謝您對我的幫助。

如果您最近(在24小時內)創建了一個AD單元ID,則可能需要一些時間和幾個AD請求才能建立AD資源。 因此,您可能不會立即看到實際的演示文稿。 當您的應用程序多次請求時,您應該看到更加一致的結果。 請注意,測試廣告通過與實際廣告相同的渠道運行。 如果測試AD返回,則表明您的應用程序正在與網絡正確通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM