首页 > 解决方案 > 在 Admob 中完成激励视频广告后,文本未更改

问题描述

我正在将 Admob 实施到我的 android 统一游戏中。现在我正在测试奖励视频广告。

我添加了一个 ui 文本,并希望在奖励视频播放完毕后更改文本。

但是在视频播放完毕并关闭视频后,文本并没有改变。

这是我的脚本:

private RewardBasedVideoAd rewardBasedVideo;
public Text text;

// Start is called before the first frame update
void Start()
{
    RequestReward();
}

private void RequestReward()
{
    string adUnitId;
    adUnitId = "ca-app-pub-3940256099942544/5224354917";

    //rewardedAd = new RewardedAd(adUnitId);
    rewardBasedVideo = RewardBasedVideoAd.Instance;

    AdRequest request = new AdRequest.Builder().Build();
    // Load the rewarded video ad with the request.
    this.rewardBasedVideo.LoadAd(request, adUnitId);
}

 public void DisplayRewardAd()
 {
     if (rewardBasedVideo.IsLoaded())
         rewardBasedVideo.Show();
 }

 public void HandleRewardBasedVideoLoaded(object sender, EventArgs args)
 {
     rewardBasedVideo.Show();
 }

 public void HandleRewardBasedVideoFailedToLoad(object sender, AdFailedToLoadEventArgs args)
 {
     RequestReward();
 }

 public void HandleRewardBasedVideoOpened(object sender, EventArgs args)
 {
     MonoBehaviour.print("HandleRewardBasedVideoOpened event received");
 }

 public void HandleRewardBasedVideoStarted(object sender, EventArgs args)
 {
     MonoBehaviour.print("HandleRewardBasedVideoStarted event received");
 }

 public void HandleRewardBasedVideoClosed(object sender, EventArgs args)
 {
     text.text = "Done!";
 }

 public void HandleRewardBasedVideoRewarded(object sender, Reward args)
 {
     text.text = "Done!";
 }

 public void HandleRewardBasedVideoLeftApplication(object sender, EventArgs args)
 {
     MonoBehaviour.print("HandleRewardBasedVideoLeftApplication event received");
 }

 private void OnEnable()
 {
     HandleRewardedAdEvents(true);
 }

 private void OnDisable()
 {
     HandleRewardedAdEvents(false);
 }
 void HandleRewardedAdEvents(bool subscribe)
{
    if (subscribe)
    {
        // Called when an ad request has successfully loaded.
        rewardBasedVideo.OnAdLoaded += HandleRewardBasedVideoLoaded;
        // Called when an ad request failed to load.
        rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
        // Called when an ad is shown.
        rewardBasedVideo.OnAdOpening += HandleRewardBasedVideoOpened;
        // Called when the ad starts to play.
        rewardBasedVideo.OnAdStarted += HandleRewardBasedVideoStarted;
        // Called when the user should be rewarded for watching a video.
        rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
        // Called when the ad is closed.
        rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
        // Called when the ad click caused the user to leave the application.
        rewardBasedVideo.OnAdLeavingApplication += HandleRewardBasedVideoLeftApplication;
    }
    else
    {
        // Called when an ad request has successfully loaded.
        rewardBasedVideo.OnAdLoaded -= HandleRewardBasedVideoLoaded;
        // Called when an ad request failed to load.
        rewardBasedVideo.OnAdFailedToLoad -= HandleRewardBasedVideoFailedToLoad;
        // Called when an ad is shown.
        rewardBasedVideo.OnAdOpening -= HandleRewardBasedVideoOpened;
        // Called when the ad starts to play.
        rewardBasedVideo.OnAdStarted -= HandleRewardBasedVideoStarted;
        // Called when the user should be rewarded for watching a video.
        rewardBasedVideo.OnAdRewarded -= HandleRewardBasedVideoRewarded;
        // Called when the ad is closed.
        rewardBasedVideo.OnAdClosed -= HandleRewardBasedVideoClosed;
        // Called when the ad click caused the user to leave the application.
        rewardBasedVideo.OnAdLeavingApplication -= HandleRewardBasedVideoLeftApplication;
    }
}

编辑:我忘了在问题中添加 HandleRewardedAdEvents 方法。

标签: unity3dadmob

解决方案


好的,现在您添加了HandleRewardedAdEvents我将更改我的答案并注意之前OnEnable执行 StartrewardBasedVideo的操作,直到可能还不存在的那一刻。

所以我宁愿添加回调

private void RequestReward()
{
    string adUnitId;
    adUnitId = "ca-app-pub-3940256099942544/5224354917";

    //rewardedAd = new RewardedAd(adUnitId);
    rewardBasedVideo = RewardBasedVideoAd.Instance;

    AdRequest request = new AdRequest.Builder().Build();

    // ADD THE CALLBACKS

    HandleRewardedAdEvents(true);

    // Load the rewarded video ad with the request.
    this.rewardBasedVideo.LoadAd(request, adUnitId);
}

通常是的,您应该删除任何不再需要的回调。但在这种情况下,我宁愿这样做

private void OnDestroy()
{
    HandleRewardedAdEvents(false);
}

不是每次都在OnEnableOnDisable

并使用

private void HandleRewardedAdEvents(bool subscribe)
{
    // NOTE that it is always secure to first remove callbacks
    // even if not added yet
    // this makes sure they are definitely only added once

    // Called when an ad request has successfully loaded.
    rewardBasedVideo.OnAdLoaded -= HandleRewardBasedVideoLoaded;
    // Called when an ad request failed to load.
    rewardBasedVideo.OnAdFailedToLoad -= HandleRewardBasedVideoFailedToLoad;
    // Called when an ad is shown.
    rewardBasedVideo.OnAdOpening -= HandleRewardBasedVideoOpened;
    // Called when the ad starts to play.
    rewardBasedVideo.OnAdStarted -= HandleRewardBasedVideoStarted;
    // Called when the user should be rewarded for watching a video.
    rewardBasedVideo.OnAdRewarded -= HandleRewardBasedVideoRewarded;
    // Called when the ad is closed.
    rewardBasedVideo.OnAdClosed -= HandleRewardBasedVideoClosed;
    // Called when the ad click caused the user to leave the application.
    rewardBasedVideo.OnAdLeavingApplication -= HandleRewardBasedVideoLeftApplication;

    if (!subscribe) return;

    // Called when an ad request has successfully loaded.
    rewardBasedVideo.OnAdLoaded += HandleRewardBasedVideoLoaded;
    // Called when an ad request failed to load.
    rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
    // Called when an ad is shown.
    rewardBasedVideo.OnAdOpening += HandleRewardBasedVideoOpened;
    // Called when the ad starts to play.
    rewardBasedVideo.OnAdStarted += HandleRewardBasedVideoStarted;
    // Called when the user should be rewarded for watching a video.
    rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
    // Called when the ad is closed.
    rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
    // Called when the ad click caused the user to leave the application.
    rewardBasedVideo.OnAdLeavingApplication += HandleRewardBasedVideoLeftApplication;
}

推荐阅读