如何在Xamarin.Forms项目中接入AdMob广告并解决Android 11编译报错问题
Xamarin.Forms Android端AdMob插屏广告编译失败解决方案
错误原因
你自定义MyInterstitialAd继承InterstitialAd的写法属于旧版AdMob API的用法,新版Xamarin.GooglePlayServices.Ads绑定的谷歌官方SDK已不允许自定义子类继承InterstitialAd,无需手动重写各类抽象成员,你的写法不符合新版API规范,直接导致编译失败。
修复步骤
1. 基础配置检查
- 安卓项目安装最新稳定版
Xamarin.GooglePlayServices.AdsNuGet包 - 安卓项目目标框架设置为Android 11(API 30)及以上,与测试设备系统版本匹配
2. 替换为新版API实现代码
不要自定义InterstitialAd子类,直接使用官方静态加载逻辑,参考实现如下:
using Android.App; using Android.Gms.Ads; using Android.Gms.Ads.Interstitial; namespace quPlayer.Droid { public class InterstitialAdImpl { private InterstitialAd _adInstance; // 测试阶段可直接使用谷歌官方测试ID:ca-app-pub-3940256099942544/1033173712 private readonly string _adUnitId = "你的正式插屏广告单元ID"; /// <summary> /// 预加载插屏广告 /// </summary> public void LoadAd(Activity activity) { var adRequest = new AdRequest.Builder().Build(); InterstitialAd.Load(activity, _adUnitId, adRequest, new AdLoadCallback(this)); } /// <summary> /// 展示已加载的插屏广告 /// </summary> public void ShowAd(Activity activity) { _adInstance?.Show(activity); } // 广告加载回调 private class AdLoadCallback : InterstitialAdLoadCallback { private readonly InterstitialAdImpl _owner; public AdLoadCallback(InterstitialAdImpl owner) => _owner = owner; public override void OnAdLoaded(InterstitialAd ad) { _owner._adInstance = ad; // 可选配置广告展示回调 _owner._adInstance.FullScreenContentCallback = new AdContentCallback(_owner); } public override void OnAdFailedToLoad(LoadAdError error) { _owner._adInstance = null; } } // 广告展示回调 private class AdContentCallback : FullScreenContentCallback { private readonly InterstitialAdImpl _owner; public AdContentCallback(InterstitialAdImpl owner) => _owner = owner; public override void OnAdDismissedFullScreenContent() { // 广告关闭后清空实例,可在此处触发预加载下一次广告 _owner._adInstance = null; } public override void OnAdFailedToShowFullScreenContent(AdError error) { _owner._adInstance = null; } } } }
3. 配置AndroidManifest.xml
在AndroidManifest.xml文件中添加必要配置:
首先在根节点下添加权限声明:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />之后在
<application>节点内添加AdMob应用ID配置:<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="你的AdMob应用ID" />
4. 调用逻辑
你可以通过Xamarin.Forms依赖服务将上述安卓实现注册到共享项目,即可在共享代码中统一调用广告加载、展示逻辑。
注意事项
开发测试阶段必须使用谷歌官方提供的测试广告ID,不要直接使用正式ID,避免触发账号风控。
内容的提问来源于stack exchange,提问作者Bill Qu
相关产品推荐
相关产品推荐

