You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:45:07