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

Xamarin集成Facebook Audience Network遇无文档及报错问题求助

解决Xamarin C#集成Facebook Audience Network插屏广告的错误问题

我之前在Xamarin Android项目里集成Facebook Audience Network插屏广告时,也碰到过几乎一模一样的报错,给你梳理几个关键的排查和修复方向:


1. 修复AdListener的继承问题(最可能的核心原因)

你的AdListener继承了Activity是完全错误的,这会导致JNI绑定混乱和生命周期冲突!IInterstitialAdListener是一个Java接口,在Xamarin中实现这类接口必须继承Java.Lang.Object(否则会触发底层绑定错误),不需要继承任何Android组件。

修改后的AdListener代码:

public class AdListener : Java.Lang.Object, IInterstitialAdListener
{
    public void Dispose()
    {
        // 无需抛异常,若有资源需要释放可在此处理,否则留空即可
    }

    public void OnAdClicked(IAd p0)
    {
        Log.Debug("FacebookAds", "广告被点击");
    }

    public void OnAdLoaded(IAd p0)
    {
        Log.Debug("FacebookAds", "插屏广告加载完成");
    }

    public void OnError(IAd p0, AdError p1)
    {
        Log.Debug("FacebookAdsError", $"错误码: {p1.ErrorCode} | 错误信息: {p1.ErrorMessage}");
    }

    public void OnInterstitialDismissed(IAd p0)
    {
        Log.Debug("FacebookAds", "插屏广告已关闭");
        // 可选:广告关闭后自动加载下一条
        // ((YourMainActivity)p0.Context).LoadInterstitialAd();
    }

    public void OnInterstitialDisplayed(IAd p0)
    {
        Log.Debug("FacebookAds", "插屏广告正在展示");
    }
}

2. 使用官方测试广告ID排除账号/填充问题

Facebook Audience Network不像AdMob那样自动提供测试广告,你需要手动使用官方指定的测试Placement ID来验证代码逻辑,避免真实广告未填充或账号配置问题干扰排查:

  • Android插屏测试ID:IMG_16_9_APP_INSTALL#2312433698835503_2650502525028617

替换代码中的YOUR_PLACEMENT_ID为上述测试ID,再进行测试。

3. 完善基础配置与依赖检查

  • NuGet包确认:确保安装的是最新稳定版的Xamarin.Facebook.AudienceNetwork,同时检查是否安装了依赖的Xamarin.Facebook.Core包(部分版本需要手动安装)。安装完成后清理项目的bin和obj文件夹,重新生成解决方案。
  • AndroidManifest配置:必须添加必要权限和Facebook App ID的元数据:
    <!-- 网络权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
    <application ...>
        <!-- 配置你的Facebook App ID,在strings.xml中定义facebook_app_id -->
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" />
    </application>
    
  • 加载时机调整:不要在OnCreate中直接调用LoadInterstitialAd,建议在OnResume中调用,或者延迟300-500毫秒再执行,确保SDK初始化完成。

4. 优化Show()调用的安全性

调用Show()前必须检查广告是否已成功加载,避免触发内部错误:

private void ButtonClick()
{
    if (mInterstitialAd != null && mInterstitialAd.IsLoaded)
    {
        mInterstitialAd.Show();
    }
    else
    {
        Log.Debug("FacebookAds", "广告未加载完成,尝试重新加载");
        LoadInterstitialAd();
    }
}

5. 后台配置检查

确认Facebook Audience Network后台中:

  • 你的应用已通过审核,状态为"已批准"
  • 对应的插屏广告位已创建并启用
  • 广告格式设置正确(不要选错Banner/原生等其他类型)

内容的提问来源于stack exchange,提问作者innomotion media

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:35:58