奖励广告回调未触发

2024-01-06

我有一款游戏,当玩家失去生命时,我希望他们能够再次观看视频。

我正在使用 unity 版本 2018.1.1f1 人,并且我已经下载了 admob unity 插件版本 3.13.1

因此,如果玩家同意观看广告,广告就会播放,然后继续游戏,而不会触发奖励玩家的回调。这是我的代码:

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

public class RewardAd : MonoBehaviour {
    private BannerView bannerView;
    private InterstitialAd interstitial;
    private RewardBasedVideoAd rewardBasedVideo;
    private float deltaTime = 0.0f;
    private static string outputMessage = string.Empty;

    public AudioSource musicPlayer;
    public Player player;

    public Text UIText;

    public static string OutputMessage
    {
        set { outputMessage = value; }
    }

    public void Start()
    {

        #if UNITY_ANDROID
        string appId = "ca-app-pub-3940256099942544~3347511713";
        #elif UNITY_IPHONE
        string appId = "ca-app-pub-3940256099942544~1458002511";
        #else
        string appId = "unexpected_platform";
        #endif

        MobileAds.SetiOSAppPauseOnBackground(true);

        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(appId);

        //Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

        // RewardBasedVideoAd is a singleton, so handlers should only be registered once.
        this.rewardBasedVideo.OnAdLoaded += this.HandleRewardBasedVideoLoaded;
        this.rewardBasedVideo.OnAdFailedToLoad += this.HandleRewardBasedVideoFailedToLoad;
        this.rewardBasedVideo.OnAdOpening += this.HandleRewardBasedVideoOpened;
        this.rewardBasedVideo.OnAdStarted += this.HandleRewardBasedVideoStarted;
        this.rewardBasedVideo.OnAdRewarded += this.HandleRewardBasedVideoRewarded;
        this.rewardBasedVideo.OnAdClosed += this.HandleRewardBasedVideoClosed;
        this.rewardBasedVideo.OnAdLeavingApplication += this.HandleRewardBasedVideoLeftApplication;
    }

    public void Update()
    {
        // Calculate simple moving average for time to render screen. 0.1 factor used as smoothing
        // value.
        this.deltaTime += (Time.deltaTime - this.deltaTime) * 0.1f;
    }

    // Returns an ad request with custom ad targeting.
    private AdRequest CreateAdRequest()
    {
        return new AdRequest.Builder()
            .AddTestDevice(AdRequest.TestDeviceSimulator)
            .AddTestDevice("0123456789ABCDEF0123456789ABCDEF")
            .AddKeyword("game")
            .SetGender(Gender.Male)
            .SetBirthday(new DateTime(1985, 1, 1))
            .TagForChildDirectedTreatment(false)
            .AddExtra("color_bg", "9B30FF")
            .Build();
    }

    private void RequestRewardBasedVideo()
    {
#if UNITY_EDITOR
        string adUnitId = "unused";
#elif UNITY_ANDROID
        string adUnitId = "ca-app-pub-3940256099942544/5224354917";
#elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-7624023175090985/4535603801";
#else
        string adUnitId = "unexpected_platform";
#endif

        this.rewardBasedVideo.LoadAd(this.CreateAdRequest(), adUnitId);
    }

    private void ShowInterstitial()
    {
        if (this.interstitial.IsLoaded())
        {
            this.interstitial.Show();
        }
        else
        {
            MonoBehaviour.print("Interstitial is not ready yet");
        }
    }

    private void ShowRewardBasedVideo()
    {
        if (this.rewardBasedVideo.IsLoaded())
        {
            this.rewardBasedVideo.Show();
        }
        else
        {
            MonoBehaviour.print("Reward based video ad is not ready yet");
        }
    }

    #region RewardBasedVideo callback handlers

    public void HandleRewardBasedVideoLoaded(object sender, EventArgs args)
    {
        this.rewardBasedVideo.Show();
        UIText.text = "Watch a short video\nfor an extra life ?";
    }

    public void HandleRewardBasedVideoFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        UIText.text = "Watch a short video\nfor an extra life ?";
    }

    public void HandleRewardBasedVideoOpened(object sender, EventArgs args)
    {
        musicPlayer.Pause();
        player.disableMovment = true;
    }

    public void HandleRewardBasedVideoStarted(object sender, EventArgs args)
    {
        musicPlayer.Pause();
        player.disableMovment = true;
    }

    public void HandleRewardBasedVideoClosed(object sender, EventArgs args)
    {
        UIText.text = "Watch a short video\nfor an extra life ?";
    }

    public void HandleRewardBasedVideoRewarded(object sender, Reward args)
    {
        player.rewardAdUI.SetActive(false);
        UIText.text = "Watch a short video\nfor an extra life ?";
        player.disableMovment = false;

        if (PlayerPrefs.GetInt("music") == 1)
        {
            musicPlayer.Play();
        }

        Lives.addLives(1);
        player.RespawnPlayer();
    }

    public void HandleRewardBasedVideoLeftApplication(object sender, EventArgs args)
    {
        UIText.text = "Watch a short video\nfor an extra life ?";
    }

    public void secondChance()
    {
        UIText.text = "Loading video...\nplease wait.";
        this.RequestRewardBasedVideo();
    }

    public void GameOver()
    {
        player.disableMovment = false;

        if (PlayerPrefs.GetInt("music") == 1)
        {
            musicPlayer.Play();
        }

        player.gameOver();
    }

    #endregion
}

因此,倒数第二个名为 secondaryChance() 的函数是运行来播放广告的函数。在我的 Android 设备上,这会播放测试奖励视频。

广告播放后,应该调用 HandleRewardBasedVideoRewarded 函数,但它没有。任何帮助都是appriced


我在 Android Studio 中调试后发现了一个 Silent Error,这是由于 Unity 中的线程问题造成的。

解决方案:在主线程中调用您的处理事件(在 Update 方法中)

bool isAdClosed = false;
bool isRewarded = false;
void Update()
{
    if (isAdClosed)
    {
        if (isRewarded)
        {
            // do all the actions
            // reward the player
            isRewarded = false;
        }
        else
        {
            // Ad closed but user skipped ads, so no reward 
           // Ad your action here 
        }
        isAdClosed = false;  // to make sure this action will happen only once.
    }
}

public void HandleRewardBasedVideoClosed(object sender, EventArgs args)
{
    print("HandleRewardBasedVideoClosed event received");

    RequestRewardBasedVideo(); // to load Next Videoad
    isAdClosed = true;

}

public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
    print("HandleRewardBasedVideoRewarded event received for " + amount.ToString() + " " +
            type);
        isRewarded = true;
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

奖励广告回调未触发 的相关文章

  • 在下载的同时从 UnityWebRequest 获取数据?

    我有这段代码可以进行 REST 调用 public IEnumerator GetCooroutine string route string finalURL URL route UnityWebRequest www UnityWebR
  • 不带 Firebase 的集成 AdMob:不需要的权限 (C2D)

    我正在使用 Firebase 将旧游戏从 AdMob 移植到最新的 AdMob 我使用的是已弃用的 AdMob 版本 我想要尽可能最小的集成 我不需要 Firebase 分析 我有一个工作集成 使用 Android Studio 项目 但是
  • 如何在Unity中集成xAPI / TinCan

    我是 xAPI TinCan API 的新手 所以我的问题可能有点笼统 但到目前为止我还没有找到任何可以帮助我的东西 我认为可以将 xAPI 集成到 Unity 项目 游戏或模拟 中 但我到底该怎么做呢 我可以阅读有关 xAPI 和 Uni
  • Unity构建错误

    所以我制作了我的游戏并尝试构建它 我收到一些对我来说毫无意义的错误 这是错误 UnityEditor BuildPlayerWindow BuildMethodException 2 个错误 在 UnityEditor BuildPlaye
  • 我在统一复制门时遇到问题

    我正在尝试统一复制我的门 但是 当我尝试这样做时 只有原来的门正在执行打开和关闭等动画 我有一个 UI 按钮 它使用 OnClick 函数来操作门 当我输入触发器时它会弹出 这是带有OnClick功能的按钮UI https i stack
  • 获取单位圆上 (0, 0) 处的随机点

    我正在使用 Unity 和 C 并且想编写一个函数 以 0 0 单位圆上随机点的 Vector2 形式返回 x 和 y 坐标 好像有一个功能UnityEngine Random insideUnitCircle 得到单位圆内的随机点 有Un
  • 在速度和距离不一致和/或有噪声的向量之间平滑地进行调整

    我正在可视化一级方程式赛车中提供的 GPS 数据 并尝试以动画方式显示它们在路径上的位置 Formula 1 API 提供矢量坐标和时间戳 但时间戳各不相同 它们的更新时间大约在 100 到 400 毫秒之间 timestamp x y z
  • 如何在 Three.js 场景中包含 OVRManager?

    我创建了几个 Three js Javascript 演示应用程序 正在我的新 Oculus Go 中进行试验 我正在尝试让 Go 控制器在我的应用程序中执行某些操作 根据 Oculus 开发人员中心的说法 最好的办法是将 OVRManag
  • UV 展开运行时优化

    我正在尝试在运行时创建 UV 我使用 BOX 类型 UV 类似于 3ds max 中的 BOX UVW 并基于面方向进行计算 我知道将其创建为运行时不是一个好的选择 但我别无选择 它是在计算后保存的 所以我做了一次 但我花了 40 秒处理
  • 无法使用 Unity 函数在 Visual Studio Code 中获得完整的 Intellisense

    好吧 我知道这个问题已经被问过并回答过很多次了 但我花了大约 3 天的时间试图解决这个问题 但到目前为止我所做的一切都没有奏效 我基本上在 Visual Studio Code 中有部分智能感知 也就是说 它似乎只识别 Unity 类和变量
  • 点击按钮时的 Admob 插页式广告

    我有一个应用程序 我正在使用 admob 横幅 现在我想在点击按钮时显示插页式广告 我的应用程序有 2 个活动 我想在第二个活动上显示插页式广告 第二个活动有一个返回第一个活动的按钮 我想在单击按钮后显示广告 我可以在单击按钮时显示广告 但
  • foreach 循环为 Unity 中的按钮赋值时出现问题

    我正在尝试在 Unity 中为我的游戏制作一个类似 Candy Crush 的地图 我正在尝试将所有按钮收集到一个数组中 然后设置其 onclick 属性 这样当我单击它们时 我就可以达到我想要的级别 我正在使用 Foreach 循环来实现
  • Android UnityPlayerActivity 操作栏

    我正在构建一个 Android 应用程序 其中包含 Unity 3d 交互体验 我已将 Unity 项目导入 Android Studio 但启动时该 Activity 是全屏的 并且不显示 Android 操作栏 我怎样才能做到这一点 整
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 使用 Unity 在 iOS 应用程序上发送电子邮件时出错

    我正在开展一个学校项目 我正在尝试记录从我统一制作的游戏中存储的数据 我的问题是我想通过电子邮件将数据发送到应用程序 一切正常 电子邮件与数据一起发送等 但是当我将应用程序构建到 iOS 设备时 它不会发送电子邮件 我在 Unity 中没有
  • AdMob 广告未显示

    因此 我使用 Play Services SDK 实施了 AdMob 广告 我已经 按照书本 做了所有事情 但广告不会显示 如果我将 AdView 背景设置为白色 它会显示空白 但不显示广告 我正在使用 Fragments 但我将 AdVi
  • 测试奖励广告未显示 - 广告加载失败:LoadAdError(代码:3,域:com.google.android.gms.ads,消息:无广告配置。)

    我目前无法展示测试奖励广告 我正在使用激励广告Sample ad unit ID中提供的doc https developers google com admob android test ads ca app pub 3940256099
  • 在 Unity 中构建 apk 应用程序时包含文件

    在unity中构建apk文件时如何将文件和文件夹添加到apk文件中 我需要的是在Android上安装应用程序后 在应用程序的父目录 android data com company product files 中存在一些文件和文件夹 这是我
  • 如何让游戏音频在某个点循环播放

    我的游戏中有一场风暴 所以我制作了一个环境音频文件 它慢慢成长为一场风暴 雨逐渐消失 然后变成一个可循环的风暴音频文件 我是这样做的 Play intro clip and merge into main loop var introTim
  • jQuery Mobile + Admob:轮换?

    我使用 jQuery Mobile 框架创建了一个移动应用程序 所有页面都在index php中加载 使用 div 在每个页面的页脚中 我添加了Admob代码 div div div

随机推荐

  • 更快地实现对所有可能组合的过滤

    考虑我有一个像这样的数据框 set seed 1 q lt 100 df lt data frame Var1 round runif q 1 50 Var2 round runif q 1 50 Var3 round runif q 1
  • 画布上的drawImage在firefox中具有奇怪的宽高比和其他问题

    我运行的是 Firefox 3 5 6 我想在画布上显示图像并在其上绘制几条线 它需要在 Firefox 和 Internet Explorer 使用 excanvas 中正确显示 这是我得到的 上图是我在 IE8 中看到的 下图是我在 F
  • 字典理解中的 if-else [重复]

    这个问题在这里已经有答案了 是否可以使用else声明 如果是 如何 dictcomp 无法使用else作为理解本身的一部分 参见this https docs python org 3 reference expressions html
  • 如何在Linux中查询Vsync相位

    我需要创建一个 C 函数 它将返回下一个 Vsync 间隔之前的秒数作为浮点值 Why 我正在创建显示跟随鼠标光标的矩形的程序 表面上OpenGL在glXSwapBuffers函数中提供了垂直同步机制 但我发现这是不可靠的 使用某些卡驱动程
  • Masonry 不适用于动态内容

    Masonry 无法处理我的动态内容 我不知道为什么 我不认为这是我这边的错误 至少我已经查看了代码几个小时了 我找不到任何不起作用的东西 reads listbox php and cycles through the array cal
  • 在 GCP 上部署 Weaviate k8s 设置时,无法在 API 组中列出资源“configmaps”

    运行时 在 GCP 上 helm upgrade values values yaml install namespace weaviate weaviate weaviate tgz 它返回 UPGRADE FAILED Error co
  • 键入时向数字添加逗号

    我试图在用户输入数字时添加逗号 选择的正确语法是什么input form control带属性的类number输入Jquery 编辑 我无法更改 HTML 代码 因为它是使用 Bootstrap 从 Django 输出的 HTML span
  • 为什么宇宙飞船运算符里面只有一个等号?

    为何宇宙飞船操作员 lt gt 选择有一个等号而不是两个 这是否被视为与一个等号 通常表示赋值 和两个等号 通常表示比较 不一致 为什么会有两个 里面只有一个 lt gt and 这一点也不矛盾 仅有的 不一致 这是为了避免与赋值运算符发生
  • 如何编写惯用的构造函数

    我对 Go 中的构造函数感到困惑 我见过的大多数构造函数都会返回一个结构体 但 Effective Go 表明在某些情况下可以返回一个接口 根据 普遍性 规则 https golang org doc effective go html g
  • 标志“-D_POSIX_C_SOURCE=200112L”是什么意思?

    没有它 我无法使用连接到互联网所需的库 但我不知道这意味着什么 D POSIX C SOURCE 200112L 谁能解释一下吗 随着时间的推移 POSIX 经历了多次修订 每个新版本都更改了它支持的功能集 该宏定义了您希望使用哪组功能来构
  • 哪里需要(不需要)完整的类型?

    我最近惊讶地发现这段代码可以编译 至少在 gcc 和 MSVC 上 template
  • JavaScript中reduceRight的原生实现是错误的

    对于关联运算f在数组的元素上a 以下关系应该成立 a reduce f 应该等于a reduceRight f 事实上 它确实适用于结合运算和交换运算 为了 例子 const a 0 1 2 3 4 5 6 7 8 9 const add
  • 临时表在 PHPMyAdmin 中不起作用

    我运行这个查询 CREATE TEMPORARY TABLE usercount SELECT FROM users 我收到这条消息 Your SQL query has been executed successfully Query t
  • AttributeError:“Request”对象没有属性“get”

    当我向服务器发出 POST 请求时 我收到 500 错误并带有注释 AttributeError Request object has no attribute get 这是我的服务器 app route api entries metho
  • 将 URL 参数从 Azure ACS 传递到我的自定义身份提供程序?

    我们正在开发一个自定义身份提供商 STS 来验证我们的应用程序 在此项目中 我们使用 Azure 访问控制服务 2 0 我们的身份提供程序是 wsfederation 因此 在启动项目时 azure ACS 有一个名为 wctx 的 url
  • 如何在 Apache 中使用 mod_rewrite 对特殊字符进行编码?

    我希望为我的标记系统提供漂亮的 URL 以及所有特殊字符 and 有没有办法用 mod rewrite 来做到这一点 而不必对链接进行双重编码 我注意到 delicious com 和 stackoverflow 似乎能够处理单编码的特殊字
  • 如何将字典列表转换为数据框?

    这是我要转换为数据框的字典列表 我尝试使用多索引但无法转换整个数据帧 response name xyz empId 007 details address street x street city x city street xx str
  • knockoutjs如何获取选中的选项arrayObject

    我想获取选定的选项对象
  • 如何禁用特定资产的构建警告?

    当我在 Unity IDE 中构建 进入播放模式时 控制台窗口中出现许多警告 这些警告是由第 3 方资源的脚本编译生成的 如何在不更改特定资产的情况下禁用或隐藏这些资产的控制台警告 我预计人们会正义地抱怨我需要如何解决这些警告 而不是把它们
  • 奖励广告回调未触发

    我有一款游戏 当玩家失去生命时 我希望他们能够再次观看视频 我正在使用 unity 版本 2018 1 1f1 人 并且我已经下载了 admob unity 插件版本 3 13 1 因此 如果玩家同意观看广告 广告就会播放 然后继续游戏 而