• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

c# - Unity AdMob 广告未显示

[复制链接]
菜鸟教程小白 发表于 2022-12-13 14:27:25 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在 Unity 5.5 上制作游戏,我关注了 Google's Official AdMob Getting Started Guide将 AdMob 集成到我的游戏中(目前仅限 iOS,但当我开始使用此功能时,Android 也会随之而来)。

  • 我在 AdMob 控制台上设置了我的游戏,并制作了一个基于奖励的视频广告。
  • 我已将 GoogleMobileAds.framework 添加到我在 Xcode 中构建的项目中。
  • 我已确保我也在链接新添加的框架。
  • 下载了 Unity 包,并根据需要将其集成到我的项目中。
  • 我已经连接到事件处理程序:我的广告加载没有问题,没有失败。

当我尝试在 iOS 上展示广告时,ad.IsLoaded(); 会返回 false,即使它刚刚加载(我的广告的 OnAdLoaded 事件正在触发)。在 Unity 编辑器中,我看到预期的虚拟方法以正确的顺序被调用(尽管没有显示任何内容,我认为这是 Unity 自己的编辑器的预期行为)。

这是我用于加载广告的代码(当然,我的发布商和广告单元 ID 已编辑):

public class AdManager : MonoBehaviour {

    static RewardBasedVideoAd ad;
    static UIManager uiManager;

    #if UNITY_ANDROID
    static string adUnitId = "ca-app-pub-XXX/YYY";
    #elif UNITY_IPHONE
    static string adUnitId = "ca-app-pub-XXX/YYY";
    #else
    static string adUnitId = "unexpected_platform";
    #endif

    static int headstartPoints;


    // Use this for initialization
    void Start () {
        uiManager = GameObject.Find("Scripts").GetComponent<UIManager>();
        ad = RewardBasedVideoAd.Instance;
        ad.OnAdRewarded += Ad_OnAdRewarded;
        ad.OnAdClosed += Ad_OnAdClosed;
        ad.OnAdFailedToLoad += Ad_OnAdFailedToLoad;
        ad.OnAdLoaded += Ad_OnAdLoaded;
        headstartPoints = 0;
        RequestNewAd();
    }

    void Ad_OnAdFailedToLoad (object sender, AdFailedToLoadEventArgs e)
    {
        Debug.Log("Ad failed to load.");
    }

    void Ad_OnAdLoaded (object sender, System.EventArgs e)
    {
        Debug.Log("Ad loaded.");
    }

    void Ad_OnAdClosed (object sender, System.EventArgs e)
    {
        Debug.Log("Ad was closed, proceeding to game without rewards...");
    }

    void Ad_OnAdRewarded (object sender, Reward e)
    {
        Debug.Log("Ad rewarded.");
        headstartPoints = (int)e.Amount;
    }

    public static int GetAndConsumeRewards(){
        int points = headstartPoints;
        headstartPoints = 0;
        return points;
    }

    public static void RequestNewAd(){
        Debug.Log("Requested new ad.");
        AdRequest request = new AdRequest.Builder().Build();
        ad.LoadAd(request, adUnitId);
    }

    public static void DisplayAdOrProceed(){
        if(ad.IsLoaded()){
            ad.Show();
            Debug.Log("Ad was loaded, displaying ad...");
        }else{
            Debug.Log("Ad wasn't loaded, skipping ad...");
            uiManager.ProceedToGame();
        }
    }

    // Update is called once per frame
    void Update () {

    }
}

我从未见过 OnAdFailedToLoad 方法被调用,而且我总是看到 OnAdLoaded 被调用,所以那里似乎没有问题。但是当我检查 ad.IsLoaded() after 广告加载后,由于某种奇怪的原因它是错误的。请注意,RewardBasedVideoAd 是 Google 文档中所述的单例对象。

我做错了什么?

更新:我在应用程序启动后立即调用 RequestNewAd() 并且在每个“级别”启动时(认为它就像一个级别大约是 ~30秒)和 DisplayAdOrProceed() 死亡(例如关卡结束)。当调用 DisplayAdOrProceed() 时,总是调用广告的加载方法(除非我有连接问题,但这里不是这种情况)。

更新 2: 刚刚注意到“广告加载”事件中有一个非常可疑的堆栈跟踪:

Ad loaded.
UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
UnityEngine.DebugLogHandlerogFormat(LogType, Object, String, Object[])
UnityEngine.Loggerog(LogType, Object)
UnityEngine.Debugog(Object)
AdManager:Ad_OnAdLoaded(Object, EventArgs)
System.EventHandler`1:Invoke(Object, TEventArgs)
GoogleMobileAds.Api.RewardBasedVideoAd:<RewardBasedVideoAd>m__8(Object, AdFailedToLoadEventArgs)
System.EventHandler`1:Invoke(Object, TEventArgs)
GoogleMobileAds.iOS.RewardBasedVideoAdClient:RewardBasedVideoAdDidFailToReceiveAdWithErrorCallback(IntPtr, String)

我可以看到广告加载事件是从一个为失败处理程序命名的方法触发的(RewardBasedVideoAdDidFailToReceiveAdWithErrorCallback, GoogleMobileAds.Api.RewardBasedVideoAd:m__8(Object, AdFailedToLoadEventArgs))。但是,它调用的是广告加载事件,而不是任何故障处理程序。我不知道发生了什么,也不知道这是否是设计不当的命名约定。



Best Answer-推荐答案


好吧,在深入研究 Xcode 项目中 IL2CPP 生成的 C++ 代码之后,我意识到 SDK 调用了不正确的方法。广告无法加载并出现错误“没有要显示的广告”,但错误地启动了广告加载方法。我将对我的代码进行额外的更改,以检测它是否被正确加载。

可怕的错误(或设计决策),谷歌。我希望这个问题能尽快得到解决。

关于c# - Unity AdMob 广告未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40974054/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap