我知道这个确切的问题已经问了数百遍了,但是每个用户都有一个不同的问题,而且我已经尝试了许多解决方案,但是一无所获。
好消息是横幅测试广告(如此处的LINK)可以正确显示…并且我已经在AdMob中注册了单元横幅(尚未连接FireBase)
这是我的代码,摘自互联网上的各种示例……对于每个人来说,这是一个非常标准的代码模式:
MainPage.xaml
// Settings Button
val settingsButton = gvrView.findViewById<ImageButton>(R.id.ui_settings_button)
settingsButton.visibility = View.GONE
// Back Button
val backButton = gvrView.findViewById<ImageButton>(R.id.ui_back_button)
backButton.visibility = View.GONE
// Alignment Marker
val alignmentMarker = gvrView.findViewById<RelativeLayout>(R.id.ui_alignment_marker)
alignmentMarker.visibility = View.GONE
AdView
<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>
AdViewRenderer
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);
}
}
AppDelegate.cs
[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;
}
}
}
这是主要代码……您怎么看? 我的AdMob帐户可能有问题吗? 测试广告可以正确显示,甚至在我旋转设备时也会刷新自我……所以我不知道该怎么想。
感谢您对我的帮助。
答案 0 :(得分:0)
如果您最近(在24小时内)创建了AD单元ID,则可能需要一些时间和多个AD请求来建立AD资源。因此,您可能不会立即看到实际的演示文稿。当您的应用程序多次请求时,您应该看到更加一致的结果。请注意,测试广告通过与实际广告相同的渠道运行。如果测试广告返回,则表明您的应用程序正在与网络正确通信。