AdMob广告未在Xamarin Android应用中显示

愿君学长松,慎勿作桃李。这篇文章主要讲述AdMob广告未在Xamarin Android应用中显示相关的知识,希望能为你提供帮助。
我最近设法完成并将我的第一个android应用程序部署到Google Play,现在我正在尝试添加AdMob。
经过一些错误的启动,几次清理和重建我正处于应用程序正在构建的位置,但我无法显示广告。
所以,我创建了一个名为AdMobView的内容视图;

using Xamarin.Forms; namespace MyApplication { public partial class AdMobView : ContentView { public AdMobView() { } } }

然后下课;
using Android.Gms.Ads; using Xamarin.Forms; using MyApplication; using Xamarin.Forms.Platform.Android; [assembly: ExportRenderer(typeof(AdMobView), typeof(AdMobRenderer))]namespace MyApplication { public class AdMobRenderer : ViewRenderer < AdMobView, AdView> { protected override voidOnElementChanged(ElementChangedEventArgs< AdMobView> e) { base.OnElementChanged(e); if (Control == null) { var ad = new Android.Gms.Ads.AdView(Forms.Context); ad.AdSize = Android.Gms.Ads.AdSize.Banner; ad.AdUnitId = "< the AdUnit id> "; var requestbuilder = new Android.Gms.Ads.AdRequest.Builder(); ad.LoadAd(requestbuilder.Build()); SetNativeControl(ad); } } } }

在我希望广告显示的XAML中,我添加了
< controls:AdMobView WidthRequest="320" HeightRequest="50" />

同样在这个XAML中,我为控件添加了一个xmln
xmlns:controls="clr-namespace:MyApplication; assembly=MyApplication"

在我添加的MainActivity.cs中
MobileAds.Initialize(ApplicationContext, "< the AdUnit id> ");

在AssemblyInfo.cs中我添加了;
[assembly: UsesPermission(Android.Manifest.Permission.Internet)] [assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]

在AndroidManifest.xml中我添加了;
< meta-data android:name="com.google.android.gms.version" android:value="https://www.songbingjia.com/android/@integer/google_play_services_version" /> < activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />

因此,正如我所说,这种构建很好,并且在真实设备和模拟器中以调试模式运行,但广告应该显示的区域中没有任何内容。我只能看到正常的背景 - 甚至没有“空白”框。
如果有人有任何想法,你可以节省我几个不眠之夜!
答案好的,我已经设法让它工作。 如果其他人都在苦苦挣扎,我将在这里发布完整的代码,因为我没有找到一个独立工作的教程,不得不从几个来源拼凑起来......
Android清单:
< ?xml version="1.0" encoding="utf-8"?> < manifest xmlns:android="http://schemas.android.com/apk/res/android"package="< your package name> " android:versionCode="< your version code> " android:versionName="< your version number> " android:installLocation="auto"> < uses-sdk android:minSdkVersion="16" /> < uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> < uses-permission android:name="android.permission.INTERNET" /> < application android:label="< your app title> " android:icon="@drawable/Icon"> < meta-data android:name="com.google.android.gms.version" android:value="https://www.songbingjia.com/android/@integer/google_play_services_version" /> < activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" /> < uses-permission android:name="android.permission.WAKE_LOCK" /> < uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> < uses-permission android:name="android.permission.INTERNET" /> < /application>


MainActivity.cs:
using Android.Gms.Ads; . . . MobileAds.Initialize(ApplicationContext, "< your unit id> "); LoadApplication(new App());

重要说明 - 确保这是应用单元ID,而不是看起来类似的应用ID。单元ID是格式为ca-app-pub-9nnnnnnnnnnnnnn / nnnnnnnnnn的应用程序ID看起来很相似但是有一个?而不是/如果你在主活动中使用了LoadApplication,请确保这是在Initialize之后 - 这就是我正在制作的一个小学生错误。在VS2015中,这实际上有一个绿色下划线,上面有一条消息说明它已被弃用,但我发现它仍然需要提供广告。
创建一个名为AdMobView.cs的视图:
using Xamarin.Forms; namespace FightJudgeAssistant { public class AdMobView : View {} }

在Visual Studio中创建视图时,它会放入不同的Using语句。你可以摆脱所有这些,只需使用Xamarin.Forms
创建一个名为AdViewRenderer.cs的类:
using Android.Widget; using Android.Gms.Ads; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; using FightJudgeAssistant; [assembly: ExportRenderer(typeof(mynamespace.AdMobView),typeof(AdMobRenderer))]namespace mynamespace { public class AdMobRenderer : ViewRenderer< mynamespace.AdMobView, Android.Gms.Ads.AdView> { protected override void OnElementChanged(ElementChangedEventArgs< mynamespace.AdMobView> e) { base.OnElementChanged(e); if (Control == null) { var ad = new Android.Gms.Ads.AdView(Forms.Context); ad.AdSize = Android.Gms.Ads.AdSize.Banner; ad.AdUnitId = "< your unit id> "; var requestbuilder = new Android.Gms.Ads.AdRequest.Builder(); ad.LoadAd(requestbuilder.Build()); SetNativeControl(ad); } } }

}
在屏幕上,您要显示广告(在我的情况下,它是网格视图中的XAML):
< ContentPage.Content> < Grid x:Name="controlGrid" RowSpacing="1" ColumnSpacing="1"> < Grid.RowDefinitions> < RowDefinition Height="*" /> < RowDefinition Height="*" /> < RowDefinition Height="*" /> < RowDefinition Height="*" /> < RowDefinition Height="*" /> < RowDefinition Height="*" /> < RowDefinition Height="Auto" /> < RowDefinition Height="*" /> < RowDefinition Height="*" /> < /Grid.RowDefinitions> < Grid.ColumnDefinitions> < ColumnDefinition Width="*" /> < /Grid.ColumnDefinitions> . . . . < controls:AdMobView Grid.Row="6"/> < /Grid>

我在上面没有显示的网格行中有其他内容。您会注意到我已将第6行的行高设置为“自动”而不是“*”,以确保广告占用所需的空间。
还在ContentPage部分中添加了以下XMLNS:
xmlns:controls="clr-namespace:mynamespace; assembly=myAssemblyname>

【AdMob广告未在Xamarin Android应用中显示】这就是它!为了测试这个工作我使用ca-app-pub-3940256099942544/6300978111专门用于测试横幅广告

    推荐阅读