Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

HideBanner -> NullReferenceException: Object reference not set to an instance of an object

Discussion in 'Unity Ads & User Acquisition' started by denis_bogdanov, Jun 4, 2021.

  1. denis_bogdanov

    denis_bogdanov

    Joined:
    Apr 20, 2015
    Posts:
    135
    Hello

    Unity 2020.3.10f1
    Package Manager - Unity Ads 3.7.3 or 3.7.1
    One Scene

    ***Only Editor***
    if Show Banner with "Banner Options" -> HideBanner() -> Advertisement.Banner.Hide() -> Throw error :
    NullReferenceException: Object reference not set to an instance of an object
    UnityEngine.Advertisements.Platform.Editor.EditorBanner.<Hide>b__12_0 () (at Library/PackageCache/com.unity.ads@3.7.3/Runtime/Advertisement/Platform/Editor/EditorBanner.cs:57)
    UnityEngine.Advertisements.Utilities.CoroutineExecutor.Update () (at Library/PackageCache/com.unity.ads@3.7.3/Runtime/Advertisement/Utilities/CoroutineExecutor.cs:17)


    Code (CSharp):
    1.  
    2.  
    3.     void Start()
    4.     {
    5.         if (IsOn)
    6.         {
    7.             bool testMode = GameConfig.Instance.adsTestMode;
    8.  
    9. #if UNITY_ANDROID
    10.             Advertisement.Initialize(Const.UNITY_GAME_ID_ANDROID, testMode);
    11. #elif UNITY_IOS
    12.            Advertisement.Initialize(Const.UNITY_GAME_ID_IOS, testMode);
    13. #endif
    14.  
    15.             bannerOptions = GetOpts();
    16.             BannerOptions GetOpts()
    17.             {
    18.                 var opts = new BannerOptions();
    19.                 opts.clickCallback += () => GameNotifications.RaiseAdBannerClick();
    20.                 opts.showCallback += () => GameNotifications.RaiseAdBannerShow();
    21.                 return opts;
    22.             }
    23.         }
    24.     }
    25.  
    26.     public void HideBanner(bool destroy = false)
    27.     {
    28.         StopCoroutine(BANNER_IE);
    29.         GameLog.Print("[ADS]", "Hide Banner");
    30.         Advertisement.Banner.Hide(destroy);
    31.     }
    32.  
    33.     public void ShowBanner()
    34.     {
    35.         StopCoroutine(BANNER_IE);
    36.         StartCoroutine(BANNER_IE);
    37.     }
    38.  
    39. IEnumerator ShowBannerWhenInitialized()
    40.     {
    41.         GameLog.Print("[ADS]", "Try Show Ads Banner...");
    42.  
    43.         if (!IsOn)
    44.         {
    45.             GameLog.Print("[ADS]", "Show Ads Banner", "DISABLE");
    46.             yield break;
    47.         }
    48.  
    49.         yield return new WaitWhile(() => !Advertisement.isInitialized);
    50.         yield return new WaitWhile(() => !Advertisement.IsReady(bannerId));
    51.  
    52.  
    53.         Level currentLevel = GameStats.Instance.currentLevel;
    54.         if (currentLevel != null)
    55.         {
    56.             int v1 = GameConfig.Instance.IsRelease() ? 2 : 0;
    57.  
    58.             if (!currentLevel.IsDaily)
    59.             {
    60.                 if (Wallet.GetCount(Const.STATS_GAME_TOTAL) >= v1)
    61.                 {
    62.                     yield return new WaitForSeconds(bannerDelay);
    63.                     ShowBanner();
    64.                 }
    65.             }
    66.             else
    67.             {
    68.                 if (Wallet.GetCount(Const.STATS_GAME_DAILY) >= v1)
    69.                 {
    70.                     yield return new WaitForSeconds(bannerDelay);
    71.                     ShowBanner();
    72.                 }
    73.             }
    74.  
    75.             void ShowBanner()
    76.             {
    77.                 Advertisement.Banner.SetPosition(BannerPosition.BOTTOM_CENTER);
    78.                 Advertisement.Banner.Show(bannerId, bannerOptions);
    79.               //  Advertisement.Banner.Show(bannerId); //IT'S OK
    80.  
    81.                 GameLog.Print("[ADS]", "Show Ads Banner", "SUCCESS");
    82.             }
    83.         }
    84.     }
    85.  
    86.  
    87.  
    88.  
    89.  
    90.  
    How can i fix it?
     
    Last edited: Jun 4, 2021
  2. Toastbyte

    Toastbyte

    Joined:
    Sep 1, 2016
    Posts:
    51
    Try using Advertisement.Banner.Hide(); instead of Advertisement.Banner.Hide(destroy);
     
  3. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    14,446
    You have a void ShowBanner() inside ShowBannerWhenInitialized() and also have it declared publicly, is this intentional?
     
  4. denis_bogdanov

    denis_bogdanov

    Joined:
    Apr 20, 2015
    Posts:
    135
    Hello

    I changed to simple script

    Code (CSharp):
    1. using UnityEngine;
    2. using UnityEngine.Advertisements;
    3.  
    4. public class TestAds : MonoBehaviour, IUnityAdsListener
    5. {
    6.  
    7.     void Awake()
    8.     {
    9.         Advertisement.AddListener(this);
    10.     }
    11.  
    12.     void Start()
    13.     {
    14.         bool testMode = GameConfig.Instance.adsTestMode;
    15.  
    16. #if UNITY_ANDROID
    17.         Advertisement.Initialize(Const.UNITY_GAME_ID_ANDROID, testMode);
    18. #elif UNITY_IOS
    19.             Advertisement.Initialize(Const.UNITY_GAME_ID_IOS, testMode);
    20. #endif
    21.  
    22.         var bannerOptions = new BannerOptions();
    23.  
    24.         Advertisement.Banner.SetPosition(BannerPosition.BOTTOM_CENTER);
    25.         Advertisement.Banner.Show(Const.UNITY_ADS_BANNER, bannerOptions);
    26.  
    27.         // --------------------------------- IT'S OK----------------------------------------
    28.         // Advertisement.Banner.Show(Const.UNITY_ADS_BANNER); // IT'S OK
    29.     }
    30.  
    31.  
    32.     public void OnUnityAdsDidError(string message)
    33.     {
    34.     }
    35.  
    36.     public void OnUnityAdsDidFinish(string placementId, ShowResult showResult)
    37.     {
    38.     }
    39.  
    40.     public void OnUnityAdsDidStart(string placementId)
    41.     {
    42.     }
    43.  
    44.     public void OnUnityAdsReady(string placementId)
    45.     {
    46.     }
    47.  
    48.     public void ButtonClick()
    49.     {
    50.         Advertisement.Banner.Hide();
    51.     }
    52.  
    53.  
    54.     void Update()
    55.     {
    56.         if (Input.GetMouseButtonDown(1))
    57.         {
    58.             Advertisement.Banner.Hide();
    59.         }
    60.     }
    61. }
    ***
    Now causes an error at Start and Update Click or Button click



    The problem only appears with "Banner Options"


    ---------------------ERROR---------------------------------------------
    var bannerOptions = new BannerOptions();

    Advertisement.Banner.SetPosition(BannerPosition.BOTTOM_CENTER);
    Advertisement.Banner.Show(Const.UNITY_ADS_BANNER, bannerOptions)


    ---------------------IT'S OK---------------------------------------------

    Advertisement.Banner.SetPosition(BannerPosition.BOTTOM_CENTER);
    Advertisement.Banner.Show(Const.UNITY_ADS_BANNER)

    --------------------------------------------------------

    NullReferenceException: Object reference not set to an instance of an object
    UnityEngine.Advertisements.Platform.Editor.EditorBanner+<>c__DisplayClass11_0.<Show>b__0 () (at Library/PackageCache/com.unity.ads@3.7.3/Runtime/Advertisement/Platform/Editor/EditorBanner.cs:42)
    UnityEngine.Advertisements.Utilities.CoroutineExecutor.Update () (at Library/PackageCache/com.unity.ads@3.7.3/Runtime/Advertisement/Utilities/CoroutineExecutor.cs:17)
     
  5. denis_bogdanov

    denis_bogdanov

    Joined:
    Apr 20, 2015
    Posts:
    135
    Changed. did not help
     
  6. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    14,446
  7. denis_bogdanov

    denis_bogdanov

    Joined:
    Apr 20, 2015
    Posts:
    135
    Hello

    (Case 1342640) Unity Ads - Problem With Banner Hide and Bbanner Options

    Answer Customer QA Team:
    "After some investigation, I found that this issue appears due to an unassigned BannerCallback hideCallback. After assigning this callback in the BannerAdScript.cs, the issue disappears (see an attached screenshot)."

    Problem solved.
     

    Attached Files:

  8. PoopofDog

    PoopofDog

    Joined:
    Nov 3, 2017
    Posts:
    2
    I was face this problem and I fixed by add "showCallback" and "hideCallback". Thank you!
    I think that we need to use these 3 callbacks.
    1.showcallback 2.clickcallback 3.hidecallback
     

    Attached Files:

    denis_bogdanov likes this.