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

使用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构造函数中赋值:
    public MainPage()
    {
        InitializeComponent();
        myAds.AdUnitId = "ca-app-pub-3940256099942544/6300978111";
    }
    
    验证正常后,再替换为自己的正式广告单元ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:40:56