使用Xamarin Forms时MarcTron Admob横幅广告不显示的问题排查
问题描述
我在Visual Studio 2019中使用Xamarin Forms开发应用,采用单列Grid布局将横幅广告放置在底部单元格。按配置应该在屏幕底部显示横幅广告,但实际仅显示一块灰色矩形,无广告内容。应用其余功能正常,且无任何警告或错误。以下是相关配置:
MainPage.xaml代码
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:controls="clr-namespace:MarcTron.Plugin.Controls;assembly=Plugin.MtAdmob" x:Class="ShaarShamayim.MainPage"> <ContentPage.Content> <Grid> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="100"/> </Grid.RowDefinitions> . . . <controls:MTAdView x:Name="myAds" Grid.Row="1" BackgroundColor="LightGray"></controls:MTAdView> </Grid> </ContentPage.Content> </ContentPage>
Android项目MainActivity.cs中的OnCreate方法
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, savedInstanceState); MobileAds.Initialize(ApplicationContext); LoadApplication(new App()); }
AndroidManifest配置
<application android:label="ShaarShamayim.Android"> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy" /> </application>
已安装的NuGet包
- MarcTron.AdMob 1.9.0.3
- Xam.Plugin.Geolocator 4.5.0.6
- Xamarin Essentials 1.6.1
- Xamarin.Forms 5.0.0.2478
- Xamarin.GooglePlayServices.Ads 120.3.0.3
排查与解决方法
1. 缺少广告单元ID配置
你只添加了MTAdView控件,但未指定广告单元ID,这是核心问题。Google AdMob必须通过单元ID加载对应广告,测试或正式ID都需设置:
- 直接在XAML中添加属性(使用Google官方测试横幅ID验证):
<controls:MTAdView x:Name="myAds" Grid.Row="1" BackgroundColor="LightGray" AdUnitId="ca-app-pub-3940256099942544/6300978111"/> - 或在MainPage.xaml.cs构造函数中赋值:
验证正常后,再替换为自己的正式广告单元ID。public MainPage() { InitializeComponent(); myAds.AdUnitId = "ca-app-pub-3940256099942544/6300978111"; }
2. 确认AdMob初始化与应用ID正确性
- 修改
MobileAds.Initialize为带回调的形式,确认初始化完成:MobileAds.Initialize(ApplicationContext, status => { // 可添加日志输出,验证初始化状态 }); - 检查
AndroidManifest中的应用ID是否正确,测试环境可使用官方测试应用ID:ca-app-pub-3940256099942544~3347511713,避免正式ID在测试阶段触发限制。
3. 网络与测试设备限制
- 测试设备需能正常访问Google服务,国内环境需特殊网络支持。
- 将测试设备添加到AdMob测试列表,避免被判定为无效请求:
var adRequest = new AdRequest.Builder() .AddTestDevice("你的测试设备ID") // 可从Logcat中获取设备ID .Build(); myAds.LoadAd(adRequest);
4. 权限与NuGet兼容性
- 确保
AndroidManifest.xml添加必要权限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> - MarcTron.AdMob 1.9.0.3版本较旧,与Xamarin.Forms 5.x可能存在兼容问题,建议更新到MarcTron.AdMob最新稳定版,同时确保Xamarin.GooglePlayServices.Ads版本与之匹配。
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

