如何在Xamarin.Forms项目中正确集成Google AdMob横幅广告?
Xamarin.Forms中适配Android API31+的Google AdMob实现指引
针对你遇到的MarcTron.Admob 1.9.0.3版本不支持Android API31+、广告无法显示的问题,以下是具体的解决步骤和实现示例:
一、版本兼容修复
MarcTron.Admob 1.9.0.3确实存在Android API31+的兼容性问题,优先推荐升级到适配Xamarin.Forms 5的最新稳定版本(如2.0.x系列,需确认版本兼容)。若暂时无法升级,可通过手动配置Android项目来兼容API31+。
二、Android端核心配置
1. 修改AndroidManifest.xml
- 补充基础权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> - 添加API31+所需权限(用于广告相关包查询):
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> - 配置AdMob应用ID(替换为你的实际ID):
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy" />
2. 调整项目目标SDK
在Android项目属性中,将目标框架设置为Android 12(API31)或更高,同时确保编译版本与目标框架匹配。
三、Xamarin.Forms端实现示例
1. 初始化AdMob
在App.xaml.cs的OnStart方法中完成初始化:
using MarcTron.Admob; protected override void OnStart() { // 初始化AdMob,传入与清单一致的应用ID CrossMTAdmob.Current.Initialize("ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"); // 开启测试模式(调试阶段使用,发布前关闭) CrossMTAdmob.Current.TestDevices = new List<string> { CrossMTAdmob.Current.DeviceId }; }
2. 横幅广告(XAML)
在页面中添加横幅广告控件:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:mtadmob="clr-namespace:MarcTron.Admob;assembly=MarcTron.Admob" x:Class="YourAppNamespace.MainPage"> <StackLayout> <!-- 页面其他内容 --> <mtadmob:MTAdView AdUnitId="ca-app-pub-xxxxxxxxxxxxxxxx/zzzzzzzzzz" AdSize="Banner" VerticalOptions="End" /> </StackLayout> </ContentPage>
3. 插屏广告(代码触发)
通过按钮或其他事件触发插屏广告:
private async void ShowInterstitialBtn_Clicked(object sender, EventArgs e) { if (CrossMTAdmob.Current.IsInterstitialLoaded()) { CrossMTAdmob.Current.ShowInterstitial(); } else { await CrossMTAdmob.Current.LoadInterstitial("ca-app-pub-xxxxxxxxxxxxxxxx/zzzzzzzzzz"); // 可添加延迟或回调,确保加载完成后再显示 } }
四、排查要点
- 广告不显示时,优先使用AdMob官方测试ID验证:
- 横幅测试ID:
ca-app-pub-3940256099942544/6300978111 - 插屏测试ID:
ca-app-pub-3940256099942544/1033173712
- 横幅测试ID:
- 确认测试设备已加入
TestDevices列表,避免因未通过审核导致广告被拦截 - 检查网络连接状态,AdMob需要稳定的互联网环境
- 确保
Xamarin.GooglePlayServices.AdsNuGet包版本为最新兼容版,MarcTron.Admob依赖此包
内容的提问来源于stack exchange,提问作者Gerson Rodriguez
相关产品推荐
相关产品推荐

