- Home /
Heyzap Listener: delegate randomly becoming null at run time (Android)
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);
         }
     }
Answer by $$anonymous$$ · Mar 27, 2017 at 06:46 PM
Ok, so I actually solved the problem... From a coding perspective there isn't nothing wrong... But was a problem with persistency among scenes...
HeyzapAdsManager was marked as "DontDestroyOnLoad" among scenes, and after a while I realize this problem didn't happened ramdonly, but only after the second time the level was loaded (menu -> game -> back to menu -> game)... After changing it to be destroyed and created at every scene creation the problem was solved...
Kinda crazy that happened though, could be related to how Unity unload/load scenes?
Your answer
 
 
             Follow this Question
Related Questions
Unity Built in Android Ads 3 Answers
question about unity analytics 0 Answers
Unity Ads can not show more than 1 time after install game 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                