[英]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.