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

Unity安卓平台Admob原生广告点击无响应问题求助

Unity集成Admob原生广告点击无响应问题

我在Unity游戏中集成了Admob原生广告,广告内容显示正常,但点击无响应。手动添加了Box Collider且能检测到点击,但广告仍无法跳转至链接,目前使用测试ID。

已尝试的无效方案

  • 禁用原生广告所有对象的Raycast Target
  • 为每个对象手动添加Box Collider
  • 在AndroidManifest.xml的UnityPlayerActivity的Activity块中添加代码:
    <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
    
  • 尝试使用UnifiedNativeAdView,但提示不存在错误

实现代码

using UnityEngine;
using UnityEngine.UI;
using GoogleMobileAds.Api;
using System;

//Banner ad
public class Admob : MonoBehaviour
{
    private BannerView adBanner;
    private NativeAd adNative;
    private bool nativeLoaded = false;

    private string idApp, idBanner, idNative;

    [SerializeField] GameObject adNativePanel;
    [SerializeField] RawImage adIcon;
    [SerializeField] RawImage adChoices;
    [SerializeField] Text adHeadline;
    [SerializeField] Text adCallToAction;
    [SerializeField] Text adAdvertiser;


    void Awake ()
    {
        adNativePanel.SetActive (false); //hide ad panel
    }

    void Start ()
    {
        idApp = "ca-app-pub-3940256099942544~3347511713";
        idBanner = "ca-app-pub-3940256099942544/6300978111";
        idNative = "ca-app-pub-3940256099942544/2247696110";

        MobileAds.Initialize (idApp);

        RequestBannerAd ();
        RequestNativeAd ();
    }

    void Update ()
    {
        if (nativeLoaded) {
            nativeLoaded = false;

            Texture2D iconTexture = this.adNative.GetIconTexture ();
            Texture2D iconAdChoices = this.adNative.GetAdChoicesLogoTexture ();
            string headline = this.adNative.GetHeadlineText ();
            string cta = this.adNative.GetCallToActionText ();
            string advertiser = this.adNative.GetAdvertiserText ();
            adIcon.texture = iconTexture;
            adChoices.texture = iconAdChoices;
            adHeadline.text = headline;
            adAdvertiser.text = advertiser;
            adCallToAction.text = cta;

            //register gameobjects
            adNative.RegisterIconImageGameObject (adIcon.gameObject);
            adNative.RegisterAdChoicesLogoGameObject (adChoices.gameObject);
            adNative.RegisterHeadlineTextGameObject (adHeadline.gameObject);
            adNative.RegisterCallToActionGameObject (adCallToAction.gameObject);
            adNative.RegisterAdvertiserTextGameObject (adAdvertiser.gameObject);

            adNativePanel.SetActive (true); //show ad panel
        }
    }

    #region Banner Methods --------------------------------------------------

    public void RequestBannerAd ()
    {
        adBanner = new BannerView (idBanner, AdSize.Banner, AdPosition.Bottom);
        AdRequest request = AdRequestBuild ();
        adBanner.LoadAd (request);
    }

    public void DestroyBannerAd ()
    {
        if (adBanner != null)
            adBanner.Destroy ();
    }

    #endregion

    #region Native Ad Mehods ------------------------------------------------

    private void RequestNativeAd ()
    {
        AdLoader adLoader = new AdLoader.Builder (idNative).ForNativeAd ().Build ();
        adLoader.OnNativeAdLoaded += this.HandleOnNativeAdLoaded;
        adLoader.LoadAd (AdRequestBuild ());
    }

    //events
    private void HandleOnNativeAdLoaded (object sender, NativeAdEventArgs args)
    {
        this.adNative = args.nativeAd;
        nativeLoaded = true;
    }

    #endregion

    //------------------------------------------------------------------------
    AdRequest AdRequestBuild ()
    {
        return new AdRequest.Builder ().Build ();
    }

    void OnDestroy ()
    {
        DestroyBannerAd ();
    }

}

解决方案

  1. 移除自定义点击干扰
    手动添加的Box Collider和自定义点击检测会覆盖Admob SDK的原生点击处理逻辑,必须移除这些元素,让SDK直接接管广告点击事件。

  2. 适配新版SDK替换NativeAd为UnifiedNativeAd
    提示UnifiedNativeAdView不存在说明你用的是新版Admob SDK,旧版NativeAd已被废弃,需调整代码:

    • 替换变量类型:private UnifiedNativeAd adNative;
    • 修改广告加载逻辑:
      private void RequestNativeAd ()
      {
          AdLoader adLoader = new AdLoader.Builder(idNative).ForUnifiedNativeAd().Build();
          adLoader.OnUnifiedNativeAdLoaded += this.HandleOnUnifiedNativeAdLoaded;
          adLoader.LoadAd(AdRequestBuild());
      }
      
      private void HandleOnUnifiedNativeAdLoaded(object sender, UnifiedNativeAdEventArgs args)
      {
          this.adNative = args.nativeAd;
          nativeLoaded = true;
      }
      

    注册UI元素的方法保持不变,新版SDK兼容原有注册逻辑。

  3. 确认事件转发配置有效性
    检查AndroidManifest.xml中ForwardNativeEventsToDalvik的meta-data是否正确放置在UnityPlayerActivity的<activity>标签内;同时在Unity Player Settings的Android选项中,开启Allow External Events(路径:Player Settings > Android > Other Settings)。

  4. 调整UI注册时机
    将UI元素的注册逻辑移至广告面板激活之后,确保注册时所有UI对象处于活跃状态,避免SDK无法绑定点击事件:

    if (nativeLoaded) {
        nativeLoaded = false;
        // 先赋值UI内容
        adIcon.texture = this.adNative.GetIconTexture();
        // ...其他UI赋值逻辑
        // 先激活面板
        adNativePanel.SetActive(true);
        // 再注册所有UI元素
        adNative.RegisterIconImageGameObject(adIcon.gameObject);
        // ...其他注册逻辑
    }
    
  5. 更新SDK版本
    确保使用的Google Mobile Ads Unity插件为最新稳定版,旧版本可能存在原生广告点击的兼容性bug,同时确认Android构建的compileSdkVersion、targetSdkVersion符合插件要求。


内容的提问来源于stack exchange,提问作者dayna chandera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:40:35