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<HeyZapAdsManager> {
public delegate void RewardVideoCallback();
private RewardVideoCallback successCallback;
private RewardVideoCallback failedCallback;
protected override void Awake()
{
base.Awake();
HeyzapAds.Start(Constants.HeyZap.PublisherID, HeyzapAds.FLAG_DISABLE_AUTOMATIC_FETCHING);
....
HZInterstitialAd.SetDisplayListener(InterstitialListener);
}
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);
}
}