I've "successfully" implemented ads with Heyzap. Right now I'm implementing callback routines for a "extra-life" mechanic based on ads.
The system works like such:
- HeyzapAdsManager has 2 private delegates: successCallback and failedCallback. It also has a listener for the IncentiveAds Events
- A GameManager calls HeyzapAdsManager.RewardVideo, sending a success callback and failed callback;
- HeyzapAdsManager assigned those callbacks to it's private variables and call HZIncentvezeAd.ShowWithOptions (which shows an ad video)
- The IncentiveListener is called normally, but when it has to call either the successCallback or the failedCallback, sometimes they are null, sometimes not...
I'm using Unity 5.4.3f1
Does anybody sees a flaw in this? I've been over this for hours...
-----
HeyzapAdsManager
public class HeyZapAdsManager : SingletonMono
GameManager
private void ExtraLife(bool video, int medalAmount) { if (video) { HeyZapAdsManager.instance.ShowRewardVideoAd( Constants.HeyZapTags.EXTRA_LIFE_VIDEO, GrantExtraLife, GameOver); playerRevive.chosedToWatchVideo = true; playerRevive.VideoWatched(); } ... }HeyzapAdsManager - ShowAds and Listener
public void ShowRewardVideoAd(string tag, RewardVideoCallback success, RewardVideoCallback fail) { successCallback = success; failedCallback = fail; if (HZIncentivizedAd.IsAvailable(tag)) { HZIncentivizedShowOptions showOptions = new HZIncentivizedShowOptions(); showOptions.Tag = tag; HZIncentivizedAd.ShowWithOptions(showOptions); } } .... private void IncentiveListener(string adState, string adTag) { if (adState.Equals("incentivized_result_complete")) { Debug.Log("GIVE REWARD WITH TAG with tag: " + adTag); if (successCallback != null) { Debug.Log("SUCESS_CALLBACK"); successCallback(); } else throw new System.Exception("Success callback is null!"); FetchRewardVideoAd(adTag); } if (adState.Equals("incentivized_result_incomplete")) { Debug.Log("NOT give reward with tag: " + adTag); if (failedCallback != null) { failedCallback(); } else throw new System.Exception("Failed callback is null!"); FetchRewardVideoAd(adTag); } }